import datetime, json, os, pathlib, pytz, secrets, shutil, time import pandas, xlrd # qrcode from fastapi import APIRouter, Body, Depends, File, Header, HTTPException, Query, Response, status, UploadFile from pydantic import BaseModel, EmailStr, Field from typing import Dict, List, Optional, Set, Union from app.lib_general import log, logging, secure_hash_string, common_route_params, Common_Route_Params from app.config import settings from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, redis_lookup_id_random from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template # from app.methods.event_session_methods import create_update_event_session_obj_v4, get_event_session_rec_list, load_event_session_obj, update_event_session_obj # from app.methods.event_presentation_methods import create_update_event_presentation_obj_v4, get_event_presentation_rec_list, load_event_presentation_obj # from app.methods.event_presenter_methods import create_update_event_presenter_obj_v4, get_event_presenter_rec_list, load_event_presenter_obj from app.methods.hosted_file_methods import load_hosted_file_obj, save_file from app.models.event_models import Event_Base from app.models.event_location_models import Event_Location_Base from app.models.event_person_models import Event_Person_Base from app.models.event_presentation_models import Event_Presentation_Base from app.models.event_presenter_models import Event_Presenter_Base from app.models.event_session_models import Event_Session_Base from app.models.response_models import Resp_Body_Base, mk_resp router = APIRouter() # Based on the program import template the clients are given. # Ideally the import file should only contain records with new External IDs. Old records will be checked and only updated if needed. # Updated 2021-10-19 @router.get('/event/importing/create_update_w_external_id', response_model=Resp_Body_Base) async def event_importing_create_update_w_external_id( response: Response = Response, x_account_id: str = Header(...), ): log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) allow_inserts = False allow_updates = False account_id = 2 # CMSC 2 8Gfxbxr19Nw event_id = 1438 # CMSC 2021 1438 8nMUlA93Ybw full_file_path = 'admin/temp/import_event_program_external_id.csv' df = pandas.read_csv(full_file_path, na_filter=False, dtype={'external_id': str, 'External ID': str, 'event_presentation_external_id': str, 'event_presentation_code': str, 'event_presentation_sort': int, 'event_presenter_external_id': str, 'event_presenter_code': str, 'event_presenter_designations': str, 'event_presenter_sort': int, 'event_session_external_id': str, 'event_session_code': str, 'event_session_sort': int, 'source_id': str, 'Source ID': str, 'email': str, 'Email Address': str}) log.debug(df) df_dict = df.to_dict(orient='records') event_session_data_li = [] for record in df_dict: if event_location_external_id := record.get('event_location_external_id', None): pass elif event_location_external_id := record.get('event_location_code', None): log.info('No event location external ID was found. Creating one with the location code...') else: log.info('No event location external ID was found. Creating one with the name...') event_location_name = record.get('event_location_name', '') event_location_external_id = (str(event_id) + ':' + event_location_name).strip() log.debug(f'Event Location External ID: {event_location_external_id}') if event_session_external_id := record.get('event_session_external_id', None): pass else: log.error('No event session external ID was found.') continue if event_presentation_external_id := record.get('event_presentation_external_id', None): pass else: log.error('No event presentation external ID was found.') continue if event_presenter_external_id := record.get('event_presenter_external_id', None): pass else: log.info('No event presenter external ID was found. Creating one...') last_first_name = ', '.join( [record.get('event_presenter_family_name', ''), record.get('event_presenter_given_name', '')] ) event_presenter_external_id = (event_presentation_external_id + ':' + last_first_name).strip() log.debug(f'Event Presenter External ID: {event_presenter_external_id}') data = {} data['account_id'] = account_id data['event_id'] = event_id # INSERT or UPDATE event_location data['event_location_external_id'] = event_location_external_id sql = f""" SELECT * FROM `v_event_location` AS `event_location` WHERE /*event_location.account_id = :account_id AND*/ event_location.event_id = :event_id AND event_location.external_id = :event_location_external_id LIMIT 1; """ event_location_data = {} event_location_data['code'] = record.get('event_location_code', '') event_location_data['event_id'] = event_id # INSERT and UPDATE the event_id just in case event_location_data['name'] = record.get('event_location_name', '') event_location_id = None if event_location_rec_result := sql_select(data=data, sql=sql): # Pull out IDs and UPDATE existing event_location record event_location_rec = event_location_rec_result event_location_id = event_location_rec.get('event_location_id', None) event_location_id_random = event_location_rec.get('event_location_id_random', None) event_location_name = event_location_rec.get('name', None) log.info(f'Found one record. Event Location ID: {event_location_id_random} Event Location Name: {event_location_name}') event_location_data['id'] = event_location_id log.debug(event_location_data) if allow_updates: if event_location_obj_up_result := sql_update(data=event_location_data, table_name='event_location'): log.debug(event_location_obj_up_result) else: log.warning(event_location_obj_up_result) pass # Probably nothing to update else: log.info(f'No record found that needs to be updated. Creating a new event location. Event Location External ID: {event_location_external_id}') event_location_data['external_id'] = event_location_external_id # NOTE: This should not change log.debug(event_location_data) if allow_inserts: if event_location_obj_in_result := sql_insert(data=event_location_data, table_name='event_location'): log.debug(event_location_obj_in_result) event_location_id = event_location_obj_in_result else: log.warning(event_location_obj_in_result) continue # Something unexpected may have happened # INSERT or UPDATE event_session data['event_session_external_id'] = event_session_external_id sql = f""" SELECT * FROM `v_event_session` AS `event_session` WHERE event_session.account_id = :account_id AND event_session.event_id = :event_id AND event_session.external_id = :event_session_external_id LIMIT 1; """ event_session_data = {} event_session_data['code'] = record.get('event_session_code', '') 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 event_session_data['name'] = record.get('event_session_name', '') event_session_start_datetime = record.get('event_session_start_date', '') + ' ' + record.get('event_session_start_time', '') event_session_data['start_datetime'] = event_session_start_datetime event_session_end_datetime = record.get('event_session_end_date', '') + ' ' + record.get('event_session_end_time', '') event_session_data['end_datetime'] = event_session_end_datetime if event_session_rec_result := sql_select(data=data, sql=sql): # Pull out IDs and UPDATE existing event_session record event_session_rec = event_session_rec_result event_session_id = event_session_rec.get('event_session_id', None) event_session_id_random = event_session_rec.get('event_session_id_random', None) event_session_name = event_session_rec.get('name', None) log.info(f'Found one record. Event Session ID: {event_session_id_random} Event Session Name: {event_session_name}') event_session_data['id'] = event_session_id log.debug(event_session_data) if allow_updates: if event_session_obj_up_result := sql_update(data=event_session_data, table_name='event_session'): log.debug(event_session_obj_up_result) else: log.warning(event_session_obj_up_result) pass # Probably nothing to update else: log.info(f'No record found that needs to be updated. Creating a new event session. Event Session External ID: {event_session_external_id}') event_session_data['external_id'] = event_session_external_id # NOTE: This should not change log.debug(event_session_data) if allow_insert: if event_session_obj_in_result := sql_insert(data=event_session_data, table_name='event_session'): log.debug(event_session_obj_in_result) event_session_id = event_session_obj_in_result else: log.warning(event_session_obj_in_result) continue # Something unexpected may have happened # INSERT or UPDATE event_presentation data['event_presentation_external_id'] = event_presentation_external_id sql = f""" SELECT * FROM `v_event_presentation` AS `event_presentation` WHERE event_presentation.event_id = :event_id AND event_presentation.external_id = :event_presentation_external_id LIMIT 1; """ event_presentation_data = {} event_presentation_data['code'] = record.get('event_presentation_code', '') 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 event_presentation_data['name'] = record.get('event_presentation_name', '') event_presentation_start_datetime = record.get('event_presentation_start_date', '') + ' ' + record.get('event_presentation_start_time', '') event_presentation_data['start_datetime'] = event_presentation_start_datetime event_presentation_end_datetime = record.get('event_presentation_end_date', '') + ' ' + record.get('event_presentation_end_time', '') event_presentation_data['end_datetime'] = event_presentation_end_datetime event_presentation_data['sort'] = record.get('event_presentation_sort', '') event_presentation_data['notes'] = record.get('event_presentation_notes', '') 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 event_presentation_id = event_presentation_rec.get('event_presentation_id', None) event_presentation_id_random = event_presentation_rec.get('event_presentation_id_random', None) event_presentation_name = event_presentation_rec.get('name', None) log.info(f'Found one record. Event Presentation ID: {event_presentation_id_random} Event Presentation Name: {event_presentation_name}') event_presentation_data['id'] = event_presentation_id log.debug(event_presentation_data) if allow_updates: if event_presentation_obj_up_result := sql_update(data=event_presentation_data, table_name='event_presentation'): log.debug(event_presentation_obj_up_result) else: log.warning(event_presentation_obj_up_result) pass # Probably nothing to update else: 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 not change log.debug(event_presentation_data) if allow_inserts: if event_presentation_obj_in_result := sql_insert(data=event_presentation_data, table_name='event_presentation'): log.debug(event_presentation_obj_in_result) event_presentation_id = event_presentation_obj_in_result else: log.warning(event_presentation_obj_in_result) continue # Something unexpected may have happened # INSERT or UPDATE event_presenter data['event_presenter_external_id'] = event_presenter_external_id sql = f""" SELECT * FROM `v_event_presenter` AS `event_presenter` WHERE event_presenter.event_id = :event_id AND event_presenter.external_id = :event_presenter_external_id LIMIT 1; """ event_presenter_data = {} event_presenter_data['event_id'] = event_id # INSERT and UPDATE the event_id just in case event_presenter_data['event_session_id'] = event_session_id # UPDATE the event_session_id in case the presentation was moved event_presenter_data['event_presentation_id'] = event_presentation_id # UPDATE the event_presentation_id in case the presenter was moved event_presenter_data['given_name'] = record.get('event_presenter_given_name', '') event_presenter_data['family_name'] = record.get('event_presenter_family_name', '') event_presenter_full_name = (event_presenter_data['given_name'] + ' ' + event_presenter_data['family_name']).strip() event_presenter_data['designations'] = record.get('event_presenter_designations', '') event_presenter_data['email'] = record.get('event_presenter_email', '') event_presenter_data['notes'] = record.get('event_presenter_notes', '') 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 event_presenter_id = event_presenter_rec.get('event_presenter_id', None) event_presenter_id_random = event_presenter_rec.get('event_presenter_id_random', None) event_presenter_given_name = event_presenter_rec.get('given_name', None) log.info(f'Found one record. Event Presenter ID: {event_presenter_id_random} Event Presenter Given Name: {event_presenter_given_name}') event_presenter_data['id'] = event_presenter_id log.debug(event_presenter_data) if allow_updates: if event_presenter_obj_up_result := sql_update(data=event_presenter_data, table_name='event_presenter'): log.debug(event_presenter_obj_up_result) else: log.warning(event_presenter_obj_up_result) pass # Probably nothing to update else: 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 not change log.debug(event_presenter_data) if allow_inserts: if event_presenter_obj_in_result := sql_insert(data=event_presenter_data, table_name='event_presenter'): log.debug(event_presenter_obj_in_result) event_presenter_id = event_presenter_obj_in_result else: log.warning(event_presenter_obj_in_result) continue # Something unexpected may have happened event_session_data_li.append(data) log.debug(f'Record processed: {event_session_id} {event_presentation_id} {event_presenter_full_name}') # End of loop return mk_resp(data=event_session_data_li, response=response) # ### BEGIN ### Event Importing ### event_importing_program_data() ### # Based on the program import template the clients are given. # Create and update locations, sessions, presentations, and presenters as needed. # Updated 2023-05-01 @router.post('/event/{event_id}/importing/program_data', response_model=Resp_Body_Base) async def event_importing_program_data( event_id: str = Query(..., min_length=11, max_length=22), file: UploadFile = File(...), begin_at: int = 0, end_at: int = 20000, commons: Common_Route_Params = Depends(common_route_params), ): log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) allow_inserts = True allow_updates = True account_id = commons.x_account_id event_location_id = None event_session_id = None event_presentation_id = None event_presenter_id = None 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) link_to_type = 'event' link_to_id = event_id file_info = await save_file( file = file, account_id = account_id, # account_id_random = account_id_random, link_to_type = link_to_type, link_to_id = link_to_id, # link_to_id_random = link_to_id_random, # check_allowed_extension = check_allowed_extension, ) if file_info['saved']: log.info('File saved') log.debug(file_info) else: log.error('Something may have gone wrong while saving the uploaded file?') return mk_resp(data=None, status_code=500, response=commons.response) # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL hosted_files_path = settings.FILES_PATH['hosted_files_root'] # hosted_files_path = '/home/scott/tmp/hosted_files_dev/' log.info(f'Hosted Files Path: {hosted_files_path}') log.debug(shutil.disk_usage(hosted_files_path)) # full_file_path = 'admin/temp/import_event_program_external_id.csv' subdirectory_dest = os.path.join(hosted_files_path, file_info.get('subdirectory_path')) log.debug(subdirectory_dest) hash_filename = file_info.get('hash_sha256')+'.file' full_file_path = pathlib.Path( os.path.join(subdirectory_dest, hash_filename) ) # NOTE: Must use pathlib.Path to use .exists() log.debug(full_file_path) if full_file_path.exists(): log.info(f'Full File Path: {full_file_path}') else: log.warning(f'Not found at full File Path: {full_file_path}') return mk_resp(data=None, status_code=500, response=commons.response) # return mk_resp(data=file_info, response=commons.response) df = pandas.read_csv( full_file_path, na_filter=False, dtype={ 'external_id': str, 'External ID': str, 'event_location_external_id': str, 'event_location_code': str, 'event_location_sort': int, 'event_presentation_external_id': str, 'event_presentation_code': str, 'event_presentation_sort': int, 'event_presenter_external_id': str, 'event_presenter_code': str, 'event_presenter_number': int, 'event_presenter_designations': str, 'event_presenter_sort': int, 'event_session_external_id': str, 'event_session_code': str, 'event_session_sort': int, 'location_external_id': str, 'location_code': str, 'location_sort': int, 'presentation_external_id': str, 'presentation_code': str, 'presentation_sort': int, 'presenter_external_id': str, 'presenter_code': str, 'presenter_number': int, 'presenter_designations': str, 'presenter_sort': int, 'presenter_given_name': str, 'session_external_id': str, 'session_code': str, 'session_sort': int, 'source_id': str, 'Source ID': str, 'email': str, 'Email Address': str } ) df.rename(columns={ 'Source ID': 'source_id', 'External ID': 'external_id', 'Title': 'presenter_title_names', 'Title Names': 'presenter_title_names', 'Prefix': 'presenter_title_names', 'Informal_name': 'presenter_informal_name', 'Nickname': 'presenter_informal_name', 'given_name': 'presenter_given_name', 'given_name (first)': 'presenter_given_name', 'Given Name': 'presenter_given_name', 'First Name': 'presenter_given_name', 'Middle Name': 'presenter_middle_name', 'family_name': 'presenter_family_name', 'family_name (last)': 'presenter_family_name', 'Family Name': 'presenter_family_name', 'Last Name': 'presenter_family_name', 'Designations': 'presenter_designations', 'Suffix': 'presenter_designations', 'Professional Title': 'presenter_professional_title', 'affiliations': 'presenter_presenter_affiliations', 'Affiliations': 'presenter_presenter_affiliations', 'Company': 'presenter_presenter_affiliations', 'email': 'presenter_email', 'Email': 'presenter_email', 'Email Address': 'presenter_email', 'CC Email Address': 'presenter_cc_email', 'Location Code': 'location_code', 'session_location': 'location_code', 'Session Location': 'location_code', 'location_title': 'location_name', 'Location Name': 'location_name', # 'session_location': 'location_name', 'session_title': 'session_name', 'Session Code': 'session_code', 'Session Name': 'session_name', 'Session Hide': 'hide_session', 'presentation_title': 'presentation_name', 'Presentation Code': 'presentation_code', 'Presentation Name': 'presentation_name', 'Presenter Code': 'presenter_code', 'Presenter Number': 'presenter_number', # for sorting 'Presenter Name': 'presenter_name', 'Presenter Notes': 'presenter_notes', 'Notes': 'presenter_notes', }, inplace = True) # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(df) df_dict = df.to_dict(orient='records') loop_count = 0 event_program_data_li = [] # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL for record in df_dict: # ### Figure out the external IDs log.info(f'Loop Count: {loop_count}') loop_count = loop_count + 1 if loop_count <= begin_at: continue if loop_count > end_at: break if event_location_external_id := record.get('location_external_id'): log.info('Using location_external_id for event_location_external_id') elif event_location_external_id := record.get('location_code'): log.info('Using location_code for event_location_external_id') else: log.warning('No location external ID or code was found. Creating one with the name...') event_location_name = record.get('location_name', '').strip() # event_location_code = event_location_name event_location_external_id = f'{event_location_name}' # .strip() log.debug(f'Event Location External ID: {event_location_external_id}') if event_session_external_id := record.get('session_external_id'): log.info('Using session_external_id for event_session_external_id') elif event_session_external_id := record.get('session_code'): log.info('Using session_code for event_session_external_id') else: log.warning('No session external ID or code was found. Creating one with the name...') event_session_name = record.get('session_name', '').strip() event_session_external_id = f'{event_session_name}' # .strip() log.debug(f'Event Session External ID: {event_session_external_id}') if event_presentation_external_id := record.get('presentation_external_id'): log.info('Using presentation_external_id for event_presentation_external_id') elif event_presentation_external_id := record.get('presentation_code'): log.info('Using presentation_code for event_presentation_external_id') else: log.warning('No presentation external ID or code was found. Creating one with the name...') event_presentation_name = record.get('presentation_name', '').strip() event_presentation_external_id = f'{event_session_external_id}:{event_presentation_name}' # .strip() log.debug(f'Event Presentation External ID: {event_presentation_external_id}') if event_presenter_external_id := record.get('presenter_external_id'): log.info('Using presenter_external_id for event_presenter_external_id') elif event_presenter_external_id := record.get('presenter_code'): log.info('Using presenter_code for event_presenter_external_id') elif event_presenter_external_id := record.get('presenter_number'): log.info('Using presenter_number for event_presenter_external_id') else: log.warning('No presenter external ID or code was found. Creating one with their family and given names...') event_presenter_last_first_name = ', '.join( [record.get('presenter_family_name', ''), record.get('presenter_given_name', '')] ) # event_presenter_name = record.get('presenter_name', '').strip() event_presenter_external_id = f'{event_presentation_external_id}:{event_presenter_last_first_name}' # .strip() log.debug(f'Event Presenter External ID: {event_presenter_external_id}') log.info(f'Event Location External ID: {event_location_external_id} | Event Session External ID: {event_session_external_id} | Event Presentation External ID: {event_presentation_external_id} | Event Presenter External ID: {event_presenter_external_id}') # continue data = {} data['account_id'] = account_id data['event_id'] = event_id # ### INSERT or UPDATE event_location # NOTE: In the future it may make more sense to pull this location part out and or add a checked ID array so we can avoid SQL queries. data['event_location_external_id'] = event_location_external_id sql = f""" SELECT * FROM `v_event_location` AS `event_location` WHERE event_location.event_id = :event_id AND event_location.external_id = :event_location_external_id LIMIT 1; """ event_location_data = {} event_location_data['code'] = record.get('location_code') event_location_data['event_id'] = event_id # INSERT and UPDATE the event_id just in case if record.get('location_name'): event_location_data['name'] = record.get('location_name') elif record.get('location_code'): event_location_data['name'] = record.get('location_code') event_location_data['enable'] = True event_location_id = None if event_location_rec_result := sql_select(data=data, sql=sql): # Pull out IDs and UPDATE existing event_location record event_location_rec = event_location_rec_result event_location_id = event_location_rec.get('event_location_id') event_location_id_random = event_location_rec.get('event_location_id_random') event_location_name = event_location_data.get('name') log.info(f'Found one record. Event Location ID: {event_location_id_random} Event Location Name: {event_location_name}') event_location_data['id'] = event_location_id log.debug(event_location_data) if allow_updates: if event_location_obj_up_result := sql_update(data=event_location_data, table_name='event_location'): log.debug(event_location_obj_up_result) else: log.warning(event_location_obj_up_result) pass # Probably nothing to update else: log.info(f'No record found that needs to be updated. Creating a new event location. Event Location External ID: {event_location_external_id}') event_location_data['external_id'] = event_location_external_id # NOTE: This should never change log.debug(event_location_data) if allow_inserts: if event_location_obj_in_result := sql_insert(data=event_location_data, table_name='event_location'): log.debug(event_location_obj_in_result) event_location_id = event_location_obj_in_result else: log.warning(event_location_obj_in_result) continue # Something unexpected may have happened data['event_location_id'] = event_location_id # ### INSERT or UPDATE event_session data['event_session_external_id'] = event_session_external_id sql = f""" SELECT * FROM `v_event_session` AS `event_session` WHERE event_session.event_id = :event_id AND event_session.external_id = :event_session_external_id LIMIT 1; """ event_session_data = {} event_session_data['code'] = record.get('session_code') 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 event_session_data['name'] = record.get('session_name') event_session_data['description'] = record.get('session_description') event_session_data['start_datetime'] = record.get('session_start_datetime') # event_session_start_datetime = record.get('event_session_start_date', '') + ' ' + record.get('event_session_start_time', '') # event_session_data['start_datetime'] = event_session_start_datetime event_session_data['end_datetime'] = record.get('session_end_datetime') # event_session_end_datetime = record.get('event_session_end_date', '') + ' ' + record.get('event_session_end_time', '') # event_session_data['end_datetime'] = event_session_end_datetime event_session_data['sort'] = record.get('session_sort') if record.get('hide_session') in (True, 1, 'yes', 'Yes', 'YES'): event_session_data['hide'] = True event_session_data['enable'] = True event_session_data['notes'] = record.get('session_notes') event_session_id = None if event_session_rec_result := sql_select(data=data, sql=sql): # Pull out IDs and UPDATE existing event_session record event_session_rec = event_session_rec_result event_session_id = event_session_rec.get('event_session_id') event_session_id_random = event_session_rec.get('event_session_id_random') event_session_name = event_session_rec.get('name') log.info(f'Found one record. Event Session ID: {event_session_id_random} Event Session Name: {event_session_name}') event_session_data['id'] = event_session_id log.debug(event_session_data) if allow_updates: if event_session_obj_up_result := sql_update(data=event_session_data, table_name='event_session'): log.debug(event_session_obj_up_result) else: log.warning(event_session_obj_up_result) pass # Probably nothing to update else: log.info(f'No record found that needs to be updated. Creating a new event session. Event Session External ID: {event_session_external_id}') event_session_data['external_id'] = event_session_external_id # NOTE: This should never change log.debug(event_session_data) if allow_inserts: if event_session_obj_in_result := sql_insert(data=event_session_data, table_name='event_session'): log.debug(event_session_obj_in_result) event_session_id = event_session_obj_in_result else: log.warning(event_session_obj_in_result) continue # Something unexpected may have happened data['event_session_id'] = event_session_id # INSERT or UPDATE event_presentation data['event_presentation_external_id'] = event_presentation_external_id sql = f""" SELECT * FROM `v_event_presentation` AS `event_presentation` WHERE event_presentation.event_session_id = :event_session_id AND event_presentation.external_id = :event_presentation_external_id LIMIT 1; """ event_presentation_data = {} event_presentation_data['code'] = record.get('presentation_code') 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 event_presentation_data['name'] = record.get('presentation_name') event_presentation_data['description'] = record.get('presentation_description') if record.get('presentation_start_datetime'): event_presentation_data['start_datetime'] = record.get('presentation_start_datetime') data['presentation_start_datetime'] = event_presentation_data['start_datetime'] else: event_presentation_data['start_datetime'] = None data['presentation_start_datetime'] = None if record.get('presentation_end_datetime'): event_presentation_data['end_datetime'] = record.get('presentation_end_datetime') data['presentation_end_datetime'] = event_presentation_data['end_datetime'] else: event_presentation_data['end_datetime'] = None data['presentation_end_datetime'] = None event_presentation_data['sort'] = record.get('presentation_sort') event_presentation_data['enable'] = True event_presentation_data['notes'] = record.get('presentation_notes') event_presentation_id = None 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 event_presentation_id = event_presentation_rec.get('event_presentation_id', None) event_presentation_id_random = event_presentation_rec.get('event_presentation_id_random', None) event_presentation_name = event_presentation_rec.get('name', None) log.info(f'Found one record. Event Presentation ID: {event_presentation_id_random} Event Presentation Name: {event_presentation_name}') event_presentation_data['id'] = event_presentation_id log.debug(event_presentation_data) if allow_updates: if event_presentation_obj_up_result := sql_update(data=event_presentation_data, table_name='event_presentation'): log.debug(event_presentation_obj_up_result) else: log.warning(event_presentation_obj_up_result) pass # Probably nothing to update else: 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 log.debug(event_presentation_data) if allow_inserts: if event_presentation_obj_in_result := sql_insert(data=event_presentation_data, table_name='event_presentation'): log.debug(event_presentation_obj_in_result) event_presentation_id = event_presentation_obj_in_result else: log.warning(event_presentation_obj_in_result) continue # Something unexpected may have happened data['event_presentation_id'] = event_presentation_id # INSERT or UPDATE event_presenter data['event_presenter_external_id'] = event_presenter_external_id sql = f""" SELECT * FROM `v_event_presenter` AS `event_presenter` WHERE event_presenter.event_presentation_id = :event_presentation_id AND event_presenter.external_id = :event_presenter_external_id LIMIT 1; """ event_presenter_data = {} event_presenter_data['event_id'] = event_id # INSERT and UPDATE the event_id just in case event_presenter_data['event_session_id'] = event_session_id # UPDATE the event_session_id in case the presentation was moved event_presenter_data['event_presentation_id'] = event_presentation_id # UPDATE the event_presentation_id in case the presenter was moved if event_presenter_code := record.get('presenter_code'): event_presenter_data['code'] = event_presenter_code elif event_presenter_code := record.get('presenter_number'): event_presenter_data['code'] = event_presenter_code if event_presenter_number := record.get('presenter_number'): event_presenter_data['sort'] = event_presenter_number elif event_presenter_number := isinstance(record.get('presenter_code'), int): event_presenter_data['sort'] = event_presenter_number event_presenter_data['title_names'] = record.get('presenter_title_names', '') event_presenter_data['informal_name'] = record.get('presenter_informal_name', '') event_presenter_data['given_name'] = record.get('presenter_given_name', '') event_presenter_data['middle_name'] = record.get('presenter_middle_name', '') event_presenter_data['family_name'] = record.get('presenter_family_name', '') event_presenter_full_name = (event_presenter_data['given_name'] + ' ' + event_presenter_data['family_name']).strip() event_presenter_data['designations'] = record.get('presenter_designations', '') event_presenter_data['professional_title'] = record.get('presenter_professional_title', '') event_presenter_data['affiliations'] = record.get('presenter_affiliations', '') event_presenter_data['email'] = record.get('presenter_email', '') event_presenter_data['enable'] = True event_presenter_data['notes'] = record.get('presenter_notes', '') event_presenter_id = None 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 event_presenter_id = event_presenter_rec.get('event_presenter_id') event_presenter_id_random = event_presenter_rec.get('event_presenter_id_random') event_presenter_given_name = event_presenter_rec.get('given_name') log.info(f'Found one record. Event Presenter ID: {event_presenter_id_random} Event Presenter Given Name: {event_presenter_given_name}') event_presenter_data['id'] = event_presenter_id log.debug(event_presenter_data) if allow_updates: if event_presenter_obj_up_result := sql_update(data=event_presenter_data, table_name='event_presenter'): log.debug(event_presenter_obj_up_result) else: log.warning(event_presenter_obj_up_result) pass # Probably nothing to update else: 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 log.debug(event_presenter_data) if allow_inserts: if event_presenter_obj_in_result := sql_insert(data=event_presenter_data, table_name='event_presenter'): log.debug(event_presenter_obj_in_result) event_presenter_id = event_presenter_obj_in_result else: log.warning(event_presenter_obj_in_result) continue # Something unexpected may have happened data['event_presenter_id'] = event_presenter_id data['event_presenter_code'] = event_presenter_code data['event_presenter_number'] = event_presenter_number data['event_presenter_full_name'] = event_presenter_full_name # End of the loop. Append to program list data results. event_program_data_li.append(data) log.info(f'Record processed: Session: {event_session_id} Presentation: {event_presentation_id} Presenter: {event_presenter_full_name}') return mk_resp(data=event_program_data_li, response=commons.response) # ### END ### Event Importing ### event_importing_program_data() ###