New link and sync function. It is mostly good to go, but could probably use more testing and improvements.
This commit is contained in:
@@ -1053,6 +1053,104 @@ async def pre_program_data_import(
|
||||
# ### END ### Event Importing ### pre_program_person_data_import() ###
|
||||
|
||||
|
||||
# ### BEGIN ### Event Presenter Person Link ### presenter_person_link() ###
|
||||
# This is the new import endpoint to run through the presenters for an event, check if they have a person_id, and if not then try to find a person to link to based on their full_name. Currently this is intended for use with LCI to link their presenters with their iMIS IDs.
|
||||
# Required fields: account_id (from commons header), event_id, begin_at, end_at, link_person, sync_person, sync_external_id
|
||||
# Updated 2025-06-24
|
||||
@router.get('/event/{event_id}/presenter/link_sync_person', response_model=Resp_Body_Base)
|
||||
async def presenter_person_link(
|
||||
event_id: str = Path(min_length=11, max_length=22),
|
||||
|
||||
begin_at: int = 0,
|
||||
end_at: int = 20000,
|
||||
|
||||
link_person: bool = True, # At least one of these should be True
|
||||
sync_person: bool = True, # At least one of these should be True
|
||||
sync_external_id: bool = False, # Changing the external_id can break future imports
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.INFO)
|
||||
log.debug(locals())
|
||||
|
||||
account_id = commons.x_account_id
|
||||
|
||||
if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response)
|
||||
|
||||
if not link_person and not sync_person:
|
||||
log.error('At least one of link_person or sync_person must be True.')
|
||||
return mk_resp(data=None, status_code=400, response=commons.response)
|
||||
|
||||
# Get the event presenter list
|
||||
event_presenter_li_data = sql_select(table_name='v_event_presenter', field_name='event_id', field_value=event_id)
|
||||
if not isinstance(event_presenter_li_data, list):
|
||||
log.error('Something unexpected may have happened while getting the event presenter list.')
|
||||
log.error(event_presenter_li_data)
|
||||
return mk_resp(data=None, status_code=500, response=commons.response)
|
||||
if not event_presenter_li_data:
|
||||
log.info('No event presenters found for this event.')
|
||||
return mk_resp(data=None, status_code=404, response=commons.response)
|
||||
log.info(f'Found {len(event_presenter_li_data)} event presenters for this event.')
|
||||
log.debug(event_presenter_li_data)
|
||||
|
||||
loop_count = 0
|
||||
event_presenter_summary_data_li = []
|
||||
|
||||
for event_presenter_data in event_presenter_li_data:
|
||||
log.info(f'Loop Count: {loop_count}')
|
||||
loop_count = loop_count + 1
|
||||
if loop_count <= begin_at: continue
|
||||
if loop_count > end_at: break
|
||||
|
||||
log.debug(event_presenter_data)
|
||||
|
||||
event_presenter_id = event_presenter_data.get('event_presenter_id', None)
|
||||
event_session_id = event_presenter_data.get('event_session_id', None)
|
||||
event_presentation_id = event_presenter_data.get('event_presentation_id', None)
|
||||
presenter_full_name = event_presenter_data.get('full_name', None)
|
||||
|
||||
person_id = event_presenter_data.get('person_id', None)
|
||||
# Check if the event presenter has a person_id
|
||||
if not person_id and link_person:
|
||||
log.warning(f'Event Presenter ID: {event_presenter_id} does not have a person_id. Attempting to link person.')
|
||||
else:
|
||||
log.info(f'Event Presenter ID: {event_presenter_id} already has a person_id: {person_id}. Skipping.')
|
||||
continue
|
||||
|
||||
if not presenter_full_name:
|
||||
log.warning(f'No presenter full name found for event presenter ID: {event_presenter_id}. Skipping.')
|
||||
continue
|
||||
|
||||
log.info(f'Processing Event Presenter ID: {event_presenter_id} | Full Name: {presenter_full_name}')
|
||||
|
||||
# Process the event presenter with the full name
|
||||
event_presenter_record_results = process_event_presenter_w_full_name(
|
||||
account_id = account_id,
|
||||
event_id = event_id,
|
||||
event_session_id = event_session_id,
|
||||
event_presentation_id = event_presentation_id,
|
||||
presenter_full_name = presenter_full_name,
|
||||
event_presenter_id = event_presenter_id,
|
||||
link_person = link_person,
|
||||
sync_person = sync_person,
|
||||
sync_external_id = sync_external_id,
|
||||
)
|
||||
|
||||
if not isinstance(event_presenter_record_results, dict):
|
||||
# log.error('Something unexpected may have happened while processing the event presenter with the full name.')
|
||||
# log.error(event_presenter_record_results)
|
||||
# return mk_resp(data=None, status_code=500, response=commons.response)
|
||||
log.warning(f'A matching person full_name was not found.')
|
||||
|
||||
# Append the summary data to the list
|
||||
event_presenter_summary_data_li.append(event_presenter_record_results)
|
||||
log.info(f'Processed {len(event_presenter_summary_data_li)} event presenters.')
|
||||
|
||||
return mk_resp(data=event_presenter_summary_data_li, response=commons.response)
|
||||
# ### END ### Event Presenter Person Link ### presenter_person_link() ###
|
||||
|
||||
|
||||
# ### BEGIN ### Event Importing ### process_person_data() ###
|
||||
# Updated 2025-06-13
|
||||
def process_person_data(account_id, source_code, record):
|
||||
|
||||
Reference in New Issue
Block a user