From 8c0f30869455a3f8f7055705a8332618050fd07e Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Wed, 15 May 2024 00:11:58 -0400 Subject: [PATCH] Improved handeling of co-presenters --- app/routers/e_confex.py | 288 +++++++++++++++++++++++++++------------- 1 file changed, 198 insertions(+), 90 deletions(-) diff --git a/app/routers/e_confex.py b/app/routers/e_confex.py index a4904e0..8a22396 100644 --- a/app/routers/e_confex.py +++ b/app/routers/e_confex.py @@ -31,7 +31,8 @@ router = APIRouter() # Updated 2024-04-25 @router.get('/event/{e_confex_event_id}/import_reg', response_model=Resp_Body_Base) async def import_event_session_list( - e_confex_event_id: str = Path(min_length=5, max_length=22), # For AAPOR: aapor_2023 (2024-05); aapor_2023 (2023-05) + e_confex_event_id: str = Path(min_length=3, max_length=22), # For AAPOR: aapor_2023 (2024-05); aapor_2023 (2023-05) + e_confex_session_id: str = Query(None, min_length=5, max_length=22), event_id: str = Query(min_length=11, max_length=22), # For AAPOR: MCz-Qm-48-j1 (1513 2024-05) 9jW-Db-SF-wt (1478 2023-05); x2H2P2MYlXU (1447 2022-05) # Account ID For AAPOR: j5EBhRDqPuw (20) @@ -96,12 +97,17 @@ async def import_event_session_list( confex_session_id = event_session.get('id') - # if confex_session_id in ('1181', '1110', '1100', '1076'): # '1110', '1100' + if e_confex_session_id and e_confex_session_id != confex_session_id: + log.warning(f'Confex Session ID does not match. Confex Session ID: {confex_session_id}') + continue + + # DEBUG - A specific Confex session ID + # if confex_session_id in ('1504', '1541', '1619', '1624'): # # log.setLevel(logging.DEBUG) - # log.warning(f'**************** FOUND {confex_session_id} ******************') + # log.warning(f'**************** FOUND {confex_session_id} ******************') # else: - # log.setLevel(logging.INFO) - # log.warning(f'*** FOUND {confex_session_id} ***') + # # log.setLevel(logging.INFO) + # log.warning(f'*** FOUND {confex_session_id} ***') # continue # *** Part 1: *** Deal with the event_location first @@ -276,7 +282,11 @@ async def import_event_session_list( event_session_data['event_session_id'] = event_session_id # _random - event_session_data['event_presentation_list'] = None # Confex "Paper" + # DEBUG - The presentation list section + if confex_session_id in ('1541', '1624'): + log.setLevel(logging.DEBUG) + + event_session_data['event_presentation_list'] = None # Confex "Paper" is the same as a AE presentation if confex_session_detail: # log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL # log.setLevel(logging.DEBUG) @@ -398,13 +408,14 @@ async def import_event_session_list( # Presenter List event_presentation_data['event_presenter_list'] = [] + event_presenter_id_primary = None # This is the primary presenter and who will be linked to the presentation files. if len(confex_presentation_detail.get('ChildList_Person')): for confex_presenter_person in confex_presentation_detail.get('ChildList_Person'): confex_presenter_id = confex_presenter_person event_presenter_summary = {} event_presenter_summary['external_id'] = confex_presenter_id - event_presenter_summary['full_name'] = confex_presentation_detail.get('SubmitterFullName') + # event_presenter_summary['full_name'] = confex_presentation_detail.get('SubmitterFullName') confex_presenter_detail = get_event_presenter_detail(confex_session_id = confex_session_id, confex_presentation_id = confex_presentation_id, confex_presenter_id = confex_presenter_id) # log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL @@ -414,98 +425,195 @@ async def import_event_session_list( event_presenter_summary['given_name'] = confex_presenter_detail.get('FirstName') event_presenter_summary['middle_name'] = confex_presenter_detail.get('MiddleName') event_presenter_summary['family_name'] = confex_presenter_detail.get('LastName') + event_presenter_summary['full_name'] = confex_presenter_detail.get('FirstName')+' '+confex_presenter_detail.get('LastName') + + + + # NEW and MOVED CODE + + event_presenter_data_sql = {} + event_presenter_qry = {} + event_presenter_qry['event_session_id'] = event_session_id + event_presenter_qry['event_presentation_id'] = event_presentation_id + + event_presenter_qry['external_id'] = event_presenter_summary['external_id'] + + event_presenter_data_sql['external_id'] = event_presenter_summary['external_id'] + event_presenter_data_sql['given_name'] = event_presenter_summary['given_name'] + event_presenter_data_sql['middle_name'] = event_presenter_summary['middle_name'] + event_presenter_data_sql['family_name'] = event_presenter_summary['family_name'] + + # log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_presenter_qry) + + if event_presenter_qry['external_id']: + sql_select_event_presenter = f""" + SELECT id AS event_presenter_id, id_random AS event_presenter_id_random, external_id AS event_presenter_external_id + FROM `event_presenter` AS `event_presenter` + WHERE event_presenter.event_presentation_id = :event_presentation_id + AND event_presenter.external_id = :external_id + /*LIMIT 1*/; + """ + else: + sql_select_event_presenter = f""" + SELECT id AS event_presenter_id, id_random AS event_presenter_id_random, external_id AS event_presenter_external_id + FROM `event_presenter` AS `event_presenter` + WHERE event_presenter.event_presentation_id = :event_presentation_id + AND event_presenter.external_id IS NULL + /*LIMIT 1*/; + """ + log.debug(sql_select_event_presenter) + + try: + event_presenter_obj = Event_Presenter_Base(**event_presenter_data_sql) + except ValidationError as e: + log.error(e.json()) + return False + log.debug(event_presenter_obj) + + + event_presenter_id = None + if event_presenter_result := sql_select(sql=sql_select_event_presenter, data=event_presenter_qry): + + if isinstance(event_presenter_result, list): + log.error(f'Found more than one Event Presenter with the same External ID. Count: {len(event_presenter_result)}') + break + # return False + else: + event_presenter_id = event_presenter_result.get('event_presenter_id') + log.info(f'Found Event Presenter. Updating existing... Event Presenter ID: {event_presenter_id}') + if create_event_presenter_obj_result := create_update_event_presenter_obj_v4( + event_presenter_dict_obj = event_presenter_obj, + event_presenter_id = event_presenter_id, + event_id = event_id, + event_session_id = event_session_id, + event_presentation_id = event_presentation_id, + ): + event_presenter_id = create_event_presenter_obj_result + log.warning(f'Event Presenter updated. Event Presenter ID: {event_presenter_id}') + else: + log.warning(f'Event Presenter not updated. Event Presenter ID: {event_presenter_id}') + log.debug(create_event_presenter_obj_result) + break + # return False + else: + log.info('No Event Presenter found. Creating new...') + + if create_event_presenter_obj_result := create_update_event_presenter_obj_v4( + event_presenter_dict_obj = event_presenter_obj, + event_id = event_id, + event_session_id = event_session_id, + event_presentation_id = event_presentation_id, + ): + event_presenter_id = create_event_presenter_obj_result + log.warning(f'Event Presenter created. Event Presenter ID: {event_presenter_id}') + else: + log.warning(f'Event Presenter not created.') + log.debug(create_event_presenter_obj_result) + break + # return False + + event_presenter_summary['event_presenter_id'] = event_presenter_id # _random + if event_presenter_summary['full_name'] == presenter_full_name: + event_presenter_id_primary = event_presenter_id + + # NEW and MOVED CODE + + + # log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL event_presentation_data['event_presenter_list'].append(event_presenter_summary) - event_presenter_data_sql = {} - if presenter_full_name: - event_presenter_data_sql['full_name'] = presenter_full_name - event_presenter_data_sql['given_name'] = presenter_full_name - else: - event_presenter_data_sql['full_name'] = submitter_full_name - event_presenter_data_sql['given_name'] = submitter_full_name + # event_presenter_data_sql = {} + # if presenter_full_name: + # event_presenter_data_sql['full_name'] = presenter_full_name + # event_presenter_data_sql['given_name'] = presenter_full_name + # else: + # event_presenter_data_sql['full_name'] = submitter_full_name + # event_presenter_data_sql['given_name'] = submitter_full_name - event_presenter_qry = {} - event_presenter_qry['event_session_id'] = event_session_id - event_presenter_qry['event_presentation_id'] = event_presentation_id - if len(event_presentation_data['event_presenter_list']): - event_presenter_qry['external_id'] = event_presentation_data['event_presenter_list'][0]['external_id'] + # event_presenter_qry = {} + # event_presenter_qry['event_session_id'] = event_session_id + # event_presenter_qry['event_presentation_id'] = event_presentation_id + # if len(event_presentation_data['event_presenter_list']): + # event_presenter_qry['external_id'] = event_presentation_data['event_presenter_list'][0]['external_id'] - event_presenter_data_sql['external_id'] = event_presentation_data['event_presenter_list'][0]['external_id'] - event_presenter_data_sql['given_name'] = event_presentation_data['event_presenter_list'][0]['given_name'] - event_presenter_data_sql['middle_name'] = event_presentation_data['event_presenter_list'][0]['middle_name'] - event_presenter_data_sql['family_name'] = event_presentation_data['event_presenter_list'][0]['family_name'] - else: - event_presenter_qry['external_id'] = None + # event_presenter_data_sql['external_id'] = event_presentation_data['event_presenter_list'][0]['external_id'] + # event_presenter_data_sql['given_name'] = event_presentation_data['event_presenter_list'][0]['given_name'] + # event_presenter_data_sql['middle_name'] = event_presentation_data['event_presenter_list'][0]['middle_name'] + # event_presenter_data_sql['family_name'] = event_presentation_data['event_presenter_list'][0]['family_name'] + # else: + # event_presenter_qry['external_id'] = None # log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(event_presenter_qry) + # log.debug(event_presenter_qry) - if event_presenter_qry['external_id']: - sql_select_event_presenter = f""" - SELECT id AS event_presenter_id, id_random AS event_presenter_id_random, external_id AS event_presenter_external_id - FROM `event_presenter` AS `event_presenter` - WHERE event_presenter.event_presentation_id = :event_presentation_id - AND event_presenter.external_id = :external_id - /*LIMIT 1*/; - """ - else: - sql_select_event_presenter = f""" - SELECT id AS event_presenter_id, id_random AS event_presenter_id_random, external_id AS event_presenter_external_id - FROM `event_presenter` AS `event_presenter` - WHERE event_presenter.event_presentation_id = :event_presentation_id - AND event_presenter.external_id IS NULL - /*LIMIT 1*/; - """ - log.debug(sql_select_event_presenter) + # if event_presenter_qry['external_id']: + # sql_select_event_presenter = f""" + # SELECT id AS event_presenter_id, id_random AS event_presenter_id_random, external_id AS event_presenter_external_id + # FROM `event_presenter` AS `event_presenter` + # WHERE event_presenter.event_presentation_id = :event_presentation_id + # AND event_presenter.external_id = :external_id + # /*LIMIT 1*/; + # """ + # else: + # sql_select_event_presenter = f""" + # SELECT id AS event_presenter_id, id_random AS event_presenter_id_random, external_id AS event_presenter_external_id + # FROM `event_presenter` AS `event_presenter` + # WHERE event_presenter.event_presentation_id = :event_presentation_id + # AND event_presenter.external_id IS NULL + # /*LIMIT 1*/; + # """ + # log.debug(sql_select_event_presenter) - try: - event_presenter_obj = Event_Presenter_Base(**event_presenter_data_sql) - except ValidationError as e: - log.error(e.json()) - return False - log.debug(event_presenter_obj) + # try: + # event_presenter_obj = Event_Presenter_Base(**event_presenter_data_sql) + # except ValidationError as e: + # log.error(e.json()) + # return False + # log.debug(event_presenter_obj) - event_presenter_id = None - if event_presenter_result := sql_select(sql=sql_select_event_presenter, data=event_presenter_qry): + # event_presenter_id = None + # event_presenter_id_primary = None # This is the primary presenter and who will be linked to the presentation files. + # if event_presenter_result := sql_select(sql=sql_select_event_presenter, data=event_presenter_qry): - if isinstance(event_presenter_result, list): - log.error(f'Found more than one Event Presenter with the same External ID. Count: {len(event_presenter_result)}') - break - # return False - else: - event_presenter_id = event_presenter_result.get('event_presenter_id') - log.info(f'Found Event Presenter. Updating existing... Event Presenter ID: {event_presenter_id}') - if create_event_presenter_obj_result := create_update_event_presenter_obj_v4( - event_presenter_dict_obj = event_presenter_obj, - event_presenter_id = event_presenter_id, - event_id = event_id, - event_session_id = event_session_id, - event_presentation_id = event_presentation_id, - ): - event_presenter_id = create_event_presenter_obj_result - log.warning(f'Event Presenter updated. Event Presenter ID: {event_presenter_id}') - else: - log.warning(f'Event Presenter not updated. Event Presenter ID: {event_presenter_id}') - log.debug(create_event_presenter_obj_result) - break - # return False - else: - log.info('No Event Presenter found. Creating new...') + # if isinstance(event_presenter_result, list): + # log.error(f'Found more than one Event Presenter with the same External ID. Count: {len(event_presenter_result)}') + # break + # # return False + # else: + # event_presenter_id = event_presenter_result.get('event_presenter_id') + # log.info(f'Found Event Presenter. Updating existing... Event Presenter ID: {event_presenter_id}') + # if create_event_presenter_obj_result := create_update_event_presenter_obj_v4( + # event_presenter_dict_obj = event_presenter_obj, + # event_presenter_id = event_presenter_id, + # event_id = event_id, + # event_session_id = event_session_id, + # event_presentation_id = event_presentation_id, + # ): + # event_presenter_id = create_event_presenter_obj_result + # log.warning(f'Event Presenter updated. Event Presenter ID: {event_presenter_id}') + # else: + # log.warning(f'Event Presenter not updated. Event Presenter ID: {event_presenter_id}') + # log.debug(create_event_presenter_obj_result) + # break + # # return False + # else: + # log.info('No Event Presenter found. Creating new...') - if create_event_presenter_obj_result := create_update_event_presenter_obj_v4( - event_presenter_dict_obj = event_presenter_obj, - event_id = event_id, - event_session_id = event_session_id, - event_presentation_id = event_presentation_id, - ): - event_presenter_id = create_event_presenter_obj_result - log.warning(f'Event Presenter created. Event Presenter ID: {event_presenter_id}') - else: - log.warning(f'Event Presenter not created.') - log.debug(create_event_presenter_obj_result) - break - # return False + # if create_event_presenter_obj_result := create_update_event_presenter_obj_v4( + # event_presenter_dict_obj = event_presenter_obj, + # event_id = event_id, + # event_session_id = event_session_id, + # event_presentation_id = event_presentation_id, + # ): + # event_presenter_id = create_event_presenter_obj_result + # log.warning(f'Event Presenter created. Event Presenter ID: {event_presenter_id}') + # else: + # log.warning(f'Event Presenter not created.') + # log.debug(create_event_presenter_obj_result) + # break + # # return False # Presentation File List for Presenter # NOTE: Only the files under ChildList_VendorFiles where used for AAPOR 2023. @@ -541,15 +649,15 @@ async def import_event_session_list( confex_file_info = event_file_data, account_id = account_id, link_to_type = 'event_presenter', - link_to_id = event_presenter_id, + link_to_id = event_presenter_id_primary, ) event_presentation_data['confex_file_list'].append(event_file_data) event_presentation_data['event_file_list'].append(file_info) # event_presenter_data['event_presenter_id'] = event_presenter_id # _random - if len(event_presentation_data['event_presenter_list']): - event_presentation_data['event_presenter_list'][0]['event_presenter_id'] = event_presenter_id # _random + # if len(event_presentation_data['event_presenter_list']): + # event_presentation_data['event_presenter_list'][0]['event_presenter_id'] = event_presenter_id_primary # _random event_session_summary['event_presentation_list'].append(event_presentation_data)