Work on event program data importing.
This commit is contained in:
20
app/log.py
20
app/log.py
@@ -1,18 +1,24 @@
|
|||||||
import functools, logging
|
import functools, logging
|
||||||
|
|
||||||
|
# stream options: 'ext://sys.stderr' or 'ext://sys.stdout'
|
||||||
|
|
||||||
|
# NOTE: This log config is confusing and may need work... 2022-10-07
|
||||||
|
# 'uvicorn' under 'loggers' creates an output to the 'console' handler
|
||||||
|
# Do not also add 'console' handler to the 'root' 'handlers' list
|
||||||
|
# For now just using that to add or remove file logging options.
|
||||||
logging.config.dictConfig({
|
logging.config.dictConfig({
|
||||||
'version': 1,
|
'version': 1,
|
||||||
'formatters': {
|
'formatters': {
|
||||||
'default': {'format': '[%(asctime)s] %(levelname)s @ %(module)s.%(funcName)s()#%(lineno)d: %(message)s'},
|
'default': {'format': '[%(asctime)s] %(levelname)s @ %(module)s.%(funcName)s()#%(lineno)d: %(message)s'},
|
||||||
'long': {'format': '[%(asctime)s] %(levelname)s @ %(module)s.%(funcName)s()#%(lineno)d: %(message)s', 'datefmt': '%Y-%m-%d %H:%M:%S'},
|
'long': {'format': '[%(asctime)s] %(levelname)s @ %(module)s.%(funcName)s()#%(lineno)d: %(message)s', 'datefmt': '%Y-%m-%d %H:%M:%S'},
|
||||||
'short': {'format': '[%(asctime)s] %(levelname)s @ %(module)s.%(funcName)s()#%(lineno)d: %(message)s', 'datefmt': '%H:%M:%S'},
|
'short': {'format': '[%(asctime)s] %(levelname)s @ %(module)s.%(funcName)s()#%(lineno)d: %(message)s', 'datefmt': '%H:%M:%S', 'use_colors': True},
|
||||||
},
|
},
|
||||||
#'filename': 'example.log',
|
#'filename': 'example.log',
|
||||||
# 'level': logging.ERROR,
|
# 'level': logging.ERROR,
|
||||||
'handlers': {
|
'handlers': {
|
||||||
'console': {
|
'console': {
|
||||||
'class': 'logging.StreamHandler',
|
'class': 'logging.StreamHandler',
|
||||||
|
'stream': 'ext://sys.stderr',
|
||||||
'formatter': 'short',
|
'formatter': 'short',
|
||||||
},
|
},
|
||||||
'log_file_all': {
|
'log_file_all': {
|
||||||
@@ -37,15 +43,23 @@ logging.config.dictConfig({
|
|||||||
'formatter': 'short',
|
'formatter': 'short',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
'loggers': {
|
||||||
|
# 'uvicorn': {'handlers': ['default'], 'level': 'INFO'},
|
||||||
|
'uvicorn': {'handlers': ['console'], 'level': 'INFO'},
|
||||||
|
# 'uvicorn.error': {'level': 'INFO', 'handlers': ['default'], 'propagate': True},
|
||||||
|
# 'uvicorn.error': {'level': 'INFO', 'handlers': ['console'], 'propagate': True},
|
||||||
|
# 'uvicorn.access': {'handlers': ['access'], 'level': 'INFO', 'propagate': False},
|
||||||
|
},
|
||||||
'root': {
|
'root': {
|
||||||
'handlers': ['console'], #, 'log_file_all', 'log_file_warning'],
|
'handlers': ['log_file_all'], #, 'log_file_all', 'log_file_warning'],
|
||||||
|
# 'handlers': ['console', 'log_file_all'], #, 'log_file_all', 'log_file_warning'],
|
||||||
'level': 'WARNING', # WARNING
|
'level': 'WARNING', # WARNING
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
log = logging.getLogger('root')
|
log = logging.getLogger('root')
|
||||||
log.setLevel(logging.ERROR) # DEBUG > INFO > WARNING > ERROR > CRITICAL
|
# log.setLevel(logging.INFO) # DEBUG > INFO > WARNING > ERROR > CRITICAL
|
||||||
# logging.basicConfig(
|
# logging.basicConfig(
|
||||||
# format='[%(asctime)s] %(levelname)s @ %(module)s.%(funcName)s()#%(lineno)d: %(message)s'
|
# format='[%(asctime)s] %(levelname)s @ %(module)s.%(funcName)s()#%(lineno)d: %(message)s'
|
||||||
# )
|
# )
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ print('### **** *** ** * The Aether FastAPI API is loading... * ** *** **** ###'
|
|||||||
|
|
||||||
|
|
||||||
app = FastAPI(
|
app = FastAPI(
|
||||||
|
# debug = True,
|
||||||
title = 'Aether API',
|
title = 'Aether API',
|
||||||
description = 'One Sky IT\'s Aether API using FastAPI.',
|
description = 'One Sky IT\'s Aether API using FastAPI.',
|
||||||
version = '5.8.0',
|
version = '5.8.0',
|
||||||
|
|||||||
@@ -161,10 +161,10 @@ def allowed_file_extension(extension: str, extension_list: list):
|
|||||||
async def save_file(
|
async def save_file(
|
||||||
file: UploadFile,
|
file: UploadFile,
|
||||||
account_id: int,
|
account_id: int,
|
||||||
account_id_random: str,
|
|
||||||
link_to_type: str,
|
link_to_type: str,
|
||||||
link_to_id: int,
|
link_to_id: int,
|
||||||
link_to_id_random: str,
|
account_id_random: str = None,
|
||||||
|
link_to_id_random: str = None,
|
||||||
check_allowed_extension: bool = False,
|
check_allowed_extension: bool = False,
|
||||||
):
|
):
|
||||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||||
@@ -173,7 +173,6 @@ async def save_file(
|
|||||||
hosted_files_path = settings.FILES_PATH['hosted_files_root']
|
hosted_files_path = settings.FILES_PATH['hosted_files_root']
|
||||||
# hosted_files_path = '/home/scott/tmp/hosted_files_dev/'
|
# hosted_files_path = '/home/scott/tmp/hosted_files_dev/'
|
||||||
log.info(f'Hosted Files Path: {hosted_files_path}')
|
log.info(f'Hosted Files Path: {hosted_files_path}')
|
||||||
|
|
||||||
log.debug(shutil.disk_usage(hosted_files_path))
|
log.debug(shutil.disk_usage(hosted_files_path))
|
||||||
|
|
||||||
log.debug(dir(file))
|
log.debug(dir(file))
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import datetime, json, pytz, secrets, time
|
import datetime, json, os, pathlib, pytz, secrets, shutil, time
|
||||||
import pandas, xlrd # qrcode
|
import pandas, xlrd # qrcode
|
||||||
from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, Response, status
|
from fastapi import APIRouter, Body, Depends, File, Header, HTTPException, Query, Response, status, UploadFile
|
||||||
from pydantic import BaseModel, EmailStr, Field
|
from pydantic import BaseModel, EmailStr, Field
|
||||||
from typing import Dict, List, Optional, Set, Union
|
from typing import Dict, List, Optional, Set, Union
|
||||||
|
|
||||||
from app.lib_general import log, logging, secure_hash_string
|
from app.lib_general import log, logging, secure_hash_string, common_route_params, Common_Route_Params
|
||||||
from app.config import settings
|
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.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, redis_lookup_id_random
|
||||||
|
|
||||||
@@ -13,6 +13,7 @@ from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_
|
|||||||
# 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_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_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.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_models import Event_Base
|
||||||
from app.models.event_location_models import Event_Location_Base
|
from app.models.event_location_models import Event_Location_Base
|
||||||
@@ -38,6 +39,9 @@ async def event_importing_create_update_w_external_id(
|
|||||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||||
log.debug(locals())
|
log.debug(locals())
|
||||||
|
|
||||||
|
allow_inserts = False
|
||||||
|
allow_updates = False
|
||||||
|
|
||||||
account_id = 2 # CMSC 2 8Gfxbxr19Nw
|
account_id = 2 # CMSC 2 8Gfxbxr19Nw
|
||||||
event_id = 1438 # CMSC 2021 1438 8nMUlA93Ybw
|
event_id = 1438 # CMSC 2021 1438 8nMUlA93Ybw
|
||||||
full_file_path = 'admin/temp/import_event_program_external_id.csv'
|
full_file_path = 'admin/temp/import_event_program_external_id.csv'
|
||||||
@@ -117,6 +121,7 @@ async def event_importing_create_update_w_external_id(
|
|||||||
|
|
||||||
log.debug(event_location_data)
|
log.debug(event_location_data)
|
||||||
|
|
||||||
|
if allow_updates:
|
||||||
if event_location_obj_up_result := sql_update(data=event_location_data, table_name='event_location'):
|
if event_location_obj_up_result := sql_update(data=event_location_data, table_name='event_location'):
|
||||||
log.debug(event_location_obj_up_result)
|
log.debug(event_location_obj_up_result)
|
||||||
else:
|
else:
|
||||||
@@ -129,6 +134,7 @@ async def event_importing_create_update_w_external_id(
|
|||||||
|
|
||||||
log.debug(event_location_data)
|
log.debug(event_location_data)
|
||||||
|
|
||||||
|
if allow_inserts:
|
||||||
if event_location_obj_in_result := sql_insert(data=event_location_data, table_name='event_location'):
|
if event_location_obj_in_result := sql_insert(data=event_location_data, table_name='event_location'):
|
||||||
log.debug(event_location_obj_in_result)
|
log.debug(event_location_obj_in_result)
|
||||||
event_location_id = event_location_obj_in_result
|
event_location_id = event_location_obj_in_result
|
||||||
@@ -174,6 +180,7 @@ async def event_importing_create_update_w_external_id(
|
|||||||
|
|
||||||
log.debug(event_session_data)
|
log.debug(event_session_data)
|
||||||
|
|
||||||
|
if allow_updates:
|
||||||
if event_session_obj_up_result := sql_update(data=event_session_data, table_name='event_session'):
|
if event_session_obj_up_result := sql_update(data=event_session_data, table_name='event_session'):
|
||||||
log.debug(event_session_obj_up_result)
|
log.debug(event_session_obj_up_result)
|
||||||
else:
|
else:
|
||||||
@@ -186,6 +193,7 @@ async def event_importing_create_update_w_external_id(
|
|||||||
|
|
||||||
log.debug(event_session_data)
|
log.debug(event_session_data)
|
||||||
|
|
||||||
|
if allow_insert:
|
||||||
if event_session_obj_in_result := sql_insert(data=event_session_data, table_name='event_session'):
|
if event_session_obj_in_result := sql_insert(data=event_session_data, table_name='event_session'):
|
||||||
log.debug(event_session_obj_in_result)
|
log.debug(event_session_obj_in_result)
|
||||||
event_session_id = event_session_obj_in_result
|
event_session_id = event_session_obj_in_result
|
||||||
@@ -234,6 +242,7 @@ async def event_importing_create_update_w_external_id(
|
|||||||
|
|
||||||
log.debug(event_presentation_data)
|
log.debug(event_presentation_data)
|
||||||
|
|
||||||
|
if allow_updates:
|
||||||
if event_presentation_obj_up_result := sql_update(data=event_presentation_data, table_name='event_presentation'):
|
if event_presentation_obj_up_result := sql_update(data=event_presentation_data, table_name='event_presentation'):
|
||||||
log.debug(event_presentation_obj_up_result)
|
log.debug(event_presentation_obj_up_result)
|
||||||
else:
|
else:
|
||||||
@@ -246,6 +255,7 @@ async def event_importing_create_update_w_external_id(
|
|||||||
|
|
||||||
log.debug(event_presentation_data)
|
log.debug(event_presentation_data)
|
||||||
|
|
||||||
|
if allow_inserts:
|
||||||
if event_presentation_obj_in_result := sql_insert(data=event_presentation_data, table_name='event_presentation'):
|
if event_presentation_obj_in_result := sql_insert(data=event_presentation_data, table_name='event_presentation'):
|
||||||
log.debug(event_presentation_obj_in_result)
|
log.debug(event_presentation_obj_in_result)
|
||||||
event_presentation_id = event_presentation_obj_in_result
|
event_presentation_id = event_presentation_obj_in_result
|
||||||
@@ -290,6 +300,7 @@ async def event_importing_create_update_w_external_id(
|
|||||||
|
|
||||||
log.debug(event_presenter_data)
|
log.debug(event_presenter_data)
|
||||||
|
|
||||||
|
if allow_updates:
|
||||||
if event_presenter_obj_up_result := sql_update(data=event_presenter_data, table_name='event_presenter'):
|
if event_presenter_obj_up_result := sql_update(data=event_presenter_data, table_name='event_presenter'):
|
||||||
log.debug(event_presenter_obj_up_result)
|
log.debug(event_presenter_obj_up_result)
|
||||||
else:
|
else:
|
||||||
@@ -302,6 +313,7 @@ async def event_importing_create_update_w_external_id(
|
|||||||
|
|
||||||
log.debug(event_presenter_data)
|
log.debug(event_presenter_data)
|
||||||
|
|
||||||
|
if allow_inserts:
|
||||||
if event_presenter_obj_in_result := sql_insert(data=event_presenter_data, table_name='event_presenter'):
|
if event_presenter_obj_in_result := sql_insert(data=event_presenter_data, table_name='event_presenter'):
|
||||||
log.debug(event_presenter_obj_in_result)
|
log.debug(event_presenter_obj_in_result)
|
||||||
event_presenter_id = event_presenter_obj_in_result
|
event_presenter_id = event_presenter_obj_in_result
|
||||||
@@ -309,10 +321,448 @@ async def event_importing_create_update_w_external_id(
|
|||||||
log.warning(event_presenter_obj_in_result)
|
log.warning(event_presenter_obj_in_result)
|
||||||
continue # Something unexpected may have happened
|
continue # Something unexpected may have happened
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
event_session_data_li.append(data)
|
event_session_data_li.append(data)
|
||||||
log.debug(f'Record processed: {event_session_id} {event_presentation_id} {event_presenter_full_name}')
|
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)
|
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 2022-10-07
|
||||||
|
@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(...),
|
||||||
|
|
||||||
|
commons: Common_Route_Params = Depends(common_route_params),
|
||||||
|
):
|
||||||
|
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||||
|
log.debug(locals())
|
||||||
|
|
||||||
|
allow_inserts = False
|
||||||
|
allow_updates = False
|
||||||
|
|
||||||
|
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,
|
||||||
|
'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': 'title_names',
|
||||||
|
'Title Names': 'title_names',
|
||||||
|
'Prefix': 'title_names',
|
||||||
|
'Informal_name': 'informal_name',
|
||||||
|
'Nickname': 'informal_name',
|
||||||
|
'given_name (first)': 'given_name',
|
||||||
|
'Given Name': 'given_name',
|
||||||
|
'First Name': 'given_name',
|
||||||
|
'Middle Name': 'middle_name',
|
||||||
|
'family_name (last)': 'family_name',
|
||||||
|
'Family Name': 'family_name',
|
||||||
|
'Last Name': 'family_name',
|
||||||
|
'Designations': 'designations',
|
||||||
|
'Suffix': 'designations',
|
||||||
|
|
||||||
|
'Professional Title': 'professional_title',
|
||||||
|
|
||||||
|
'Affiliations': 'affiliations',
|
||||||
|
'Company': 'affiliations',
|
||||||
|
|
||||||
|
'Email': 'email',
|
||||||
|
'Email Address': 'email',
|
||||||
|
'CC Email Address': 'cc_email',
|
||||||
|
|
||||||
|
'location_title': 'location_name',
|
||||||
|
'Location Code': 'location_code',
|
||||||
|
'Location Name': 'location_name',
|
||||||
|
|
||||||
|
'session_title': 'session_name',
|
||||||
|
'Session Code': 'session_code',
|
||||||
|
'Session Name': 'session_name',
|
||||||
|
|
||||||
|
'presentation_title': 'presentation_name',
|
||||||
|
'Presentation Code': 'presentation_code',
|
||||||
|
'Presentation Name': 'presentation_name',
|
||||||
|
},
|
||||||
|
inplace = True)
|
||||||
|
# log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||||
|
log.debug(df)
|
||||||
|
|
||||||
|
df_dict = df.to_dict(orient='records')
|
||||||
|
|
||||||
|
event_program_data_li = []
|
||||||
|
|
||||||
|
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||||
|
for record in df_dict:
|
||||||
|
# ### Figure out the external IDs
|
||||||
|
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.info('No location external ID or code was found. Creating one with the name...')
|
||||||
|
event_location_name = record.get('location_name', '').strip()
|
||||||
|
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.info('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.info('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')
|
||||||
|
else:
|
||||||
|
log.info('No presenter external ID or code was found. Creating one with the name...')
|
||||||
|
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}')
|
||||||
|
|
||||||
|
# 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
|
||||||
|
event_location_data['name'] = record.get('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')
|
||||||
|
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')
|
||||||
|
|
||||||
|
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')
|
||||||
|
|
||||||
|
event_presentation_data['start_datetime'] = record.get('presentation_start_datetime')
|
||||||
|
# event_presentation_start_datetime = record.get('presentation_start_date', '') + ' ' + record.get('presentation_start_time', '')
|
||||||
|
# event_presentation_data['start_datetime'] = event_presentation_start_datetime
|
||||||
|
|
||||||
|
event_presentation_data['end_datetime'] = record.get('presentation_end_datetime')
|
||||||
|
# event_presentation_end_datetime = record.get('presentation_end_date', '') + ' ' + record.get('presentation_end_time', '')
|
||||||
|
# event_presentation_data['end_datetime'] = event_presentation_end_datetime
|
||||||
|
|
||||||
|
event_presentation_data['sort'] = record.get('presentation_sort')
|
||||||
|
|
||||||
|
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_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['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['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
|
||||||
|
|
||||||
|
# End of the loop. Append to program list data results.
|
||||||
|
|
||||||
|
event_program_data_li.append(data)
|
||||||
|
log.debug(f'Record processed: {event_session_id} {event_presentation_id} {event_presenter_full_name}')
|
||||||
|
|
||||||
|
return mk_resp(data=event_program_data_li, response=commons.response)
|
||||||
|
# ### END ### Event Importing ### event_importing_program_data() ###
|
||||||
|
|||||||
Reference in New Issue
Block a user