From 5b01800b9aac8d2420b2bf4ba84d03f74bf51e44 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Fri, 12 Jun 2026 15:19:21 -0400 Subject: [PATCH] =?UTF-8?q?wip(importing):=20partial=20fixes=20=E2=80=94?= =?UTF-8?q?=20presentation=20lookup=20+=20presenter=20gate=20(broken,=20ne?= =?UTF-8?q?eds=20rework)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Session field column-presence fixes are solid. Presentation lookup no longer requires presentation_name to find existing records. Presenter gate broadened to run lookup even without explicit code. Presenter INSERT still broken — reverted field changes after IntegrityError issue; email-only column guard kept. Do not rely on this state for presenter creation. Needs rework from c9c69ec. Co-Authored-By: Claude Sonnet 4.6 --- app/routers/event_importing.py | 43 ++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/app/routers/event_importing.py b/app/routers/event_importing.py index 00f59b5..bdfdd07 100644 --- a/app/routers/event_importing.py +++ b/app/routers/event_importing.py @@ -656,7 +656,7 @@ async def event_importing_program_data( event_session_data = {} if record.get('session_code'): event_session_data['code'] = record.get('session_code', '').strip() - else: + elif 'session_code' in record: event_session_data['code'] = None event_session_data['event_id'] = event_id # INSERT and UPDATE the event_id just in case event_session_data['event_location_id'] = event_location_id # INSERT and UPDATE the event_location_id in case the session was moved @@ -674,10 +674,13 @@ async def event_importing_program_data( if record.get('session_description'): event_session_data['description'] = record.get('session_description', '').strip() - event_session_data['start_datetime'] = _clean_datetime(record.get('session_start_datetime')) - event_session_data['end_datetime'] = _clean_datetime(record.get('session_end_datetime')) + if 'session_start_datetime' in record: + event_session_data['start_datetime'] = _clean_datetime(record.get('session_start_datetime')) + if 'session_end_datetime' in record: + event_session_data['end_datetime'] = _clean_datetime(record.get('session_end_datetime')) - event_session_data['sort'] = record.get('session_sort') + if 'session_sort' in record: + event_session_data['sort'] = record.get('session_sort') if record.get('hide_session') in (True, 1, 'yes', 'Yes', 'YES'): event_session_data['hide'] = True @@ -736,31 +739,34 @@ async def event_importing_program_data( event_presentation_data = {} if record.get('presentation_code'): event_presentation_data['code'] = record.get('presentation_code', '').strip() - else: + elif 'presentation_code' in record: event_presentation_data['code'] = None event_presentation_data['event_id'] = event_id # INSERT and UPDATE the event_id just in case event_presentation_data['event_session_id'] = event_session_id # UPDATE the event_session_id in case the presentation was moved if record.get('presentation_name'): event_presentation_data['name'] = record.get('presentation_name', '').strip() - else: + elif 'presentation_name' in record: event_presentation_data['name'] = None if record.get('presentation_description'): event_presentation_data['description'] = record.get('presentation_description', '').strip() - event_presentation_data['start_datetime'] = _clean_datetime(record.get('presentation_start_datetime')) - data['presentation_start_datetime'] = event_presentation_data['start_datetime'] + if 'presentation_start_datetime' in record: + event_presentation_data['start_datetime'] = _clean_datetime(record.get('presentation_start_datetime')) + data['presentation_start_datetime'] = event_presentation_data.get('start_datetime') - event_presentation_data['end_datetime'] = _clean_datetime(record.get('presentation_end_datetime')) - data['presentation_end_datetime'] = event_presentation_data['end_datetime'] + if 'presentation_end_datetime' in record: + event_presentation_data['end_datetime'] = _clean_datetime(record.get('presentation_end_datetime')) + data['presentation_end_datetime'] = event_presentation_data.get('end_datetime') if record.get('presentation_abstract_code'): event_presentation_data['abstract_code'] = record.get('presentation_abstract_code', '').strip() - else: + elif 'presentation_abstract_code' in record: event_presentation_data['abstract_code'] = None - event_presentation_data['sort'] = record.get('presentation_sort') + if 'presentation_sort' in record: + event_presentation_data['sort'] = record.get('presentation_sort') event_presentation_data['enable'] = True @@ -768,7 +774,7 @@ async def event_importing_program_data( event_presentation_data['notes'] = record.get('presentation_notes', '').strip() event_presentation_id = None - if (record.get('presentation_external_id') or record.get('presentation_code')) and record.get('presentation_name'): + if record.get('presentation_external_id') or record.get('presentation_code'): if event_presentation_rec_result := sql_select(data=data, sql=sql): # Pull out IDs and UPDATE existing event_presentation record event_presentation_rec = event_presentation_rec_result @@ -787,7 +793,7 @@ async def event_importing_program_data( else: log.warning(event_presentation_obj_up_result) pass # Probably nothing to update - else: + elif record.get('presentation_name'): log.info(f'No record found that needs to be updated. Creating a new event presentation. Event Presentation External ID: {event_presentation_external_id}') event_presentation_data['external_id'] = event_presentation_external_id # NOTE: This should never change @@ -868,13 +874,14 @@ async def event_importing_program_data( event_presenter_data['professional_title'] = record.get('presenter_professional_title', '').strip() event_presenter_data['affiliations'] = record.get('presenter_affiliations', '').strip() - event_presenter_data['email'] = record.get('presenter_email', '').strip() + if 'presenter_email' in record: + event_presenter_data['email'] = record.get('presenter_email', '').strip() event_presenter_data['enable'] = True event_presenter_data['notes'] = record.get('presenter_notes', '').strip() event_presenter_id = None - if (record.get('presenter_code') or record.get('presenter_number')) and record.get('presenter_given_name'): + if event_presenter_external_id: if event_presenter_rec_result := sql_select(data=data, sql=sql): # Pull out IDs and UPDATE existing event_presenter record event_presenter_rec = event_presenter_rec_result @@ -893,7 +900,9 @@ async def event_importing_program_data( else: log.warning(event_presenter_obj_up_result) pass # Probably nothing to update - else: + elif (record.get('presenter_code') or record.get('presenter_number')) and record.get('presenter_given_name'): + # Only INSERT when a real identifier (code/number) is available — prevents duplicates + # when external_id was derived from names and lookup missed a code-keyed existing record. log.info(f'No record found that needs to be updated. Creating a new event presenter. Event Presenter External ID: {event_presenter_external_id}') event_presenter_data['external_id'] = event_presenter_external_id # NOTE: This should never change