From 16fca4b2f05cdd4ff1c08a9bf64d0aa4baa136ff Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Tue, 12 Apr 2022 04:08:52 -0400 Subject: [PATCH] General clean up. Work on importing AAPOR. Work on sessions, presentations, and presenters. --- app/main.py | 1 + app/methods/event_presentation_methods.py | 77 +++-- app/methods/event_presenter_methods.py | 67 +++-- app/methods/event_session_methods.py | 64 +++-- app/models/event_presentation_models.py | 37 +-- app/models/event_presenter_models.py | 52 ++-- app/models/event_session_models.py | 39 +-- app/routers/importing.py | 326 ++++++++++++++++++++-- 8 files changed, 485 insertions(+), 178 deletions(-) diff --git a/app/main.py b/app/main.py index 0687a65..2516286 100644 --- a/app/main.py +++ b/app/main.py @@ -388,6 +388,7 @@ origins = [ 'http://idaa.oneskyit.local:5000', 'http://ishlt.oneskyit.local:5000', 'http://businessgroup.oneskyit.local:5000', + 'http://aapor.oneskyit.local:5000', 'http://dev-ishlt.localhost:5000', # Using localhost 'http://ishlt.localhost:5000', # Using localhost diff --git a/app/methods/event_presentation_methods.py b/app/methods/event_presentation_methods.py index 72682af..b63940d 100644 --- a/app/methods/event_presentation_methods.py +++ b/app/methods/event_presentation_methods.py @@ -1,11 +1,10 @@ -from __future__ import annotations import datetime from typing import Dict, List, Optional, Set, Union from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator from app.db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_update -from app.lib_general import log, logging +from app.lib_general import log, logging, logger_reset # from app.methods.event_methods import load_event_obj # from app.methods.event_file_methods import load_event_file_obj @@ -20,6 +19,7 @@ from app.models.event_presentation_models import Event_Presentation_Base # ### BEGIN ### API Event Presentation Methods ### load_event_presentation_obj() ### +@logger_reset def load_event_presentation_obj( event_presentation_id: int|str, enabled: str = 'enabled', # enabled, disabled, all @@ -229,6 +229,7 @@ def load_event_presentation_obj( # ### BEGIN ### API Event Presenter Methods ### get_event_presentation_rec_list() ### +@logger_reset def get_event_presentation_rec_list( event_person_id: str = None, event_session_id: str = None, @@ -315,6 +316,7 @@ def get_event_presentation_rec_list( # ### BEGIN ### API Event Presentation Methods ### get_event_id_w_event_session_id() ### # Updated 2021-08-23 +@logger_reset def get_event_id_w_event_session_id( event_session_id: int|str, ) -> bool|int|None: @@ -347,6 +349,7 @@ def get_event_id_w_event_session_id( # ### BEGIN ### API Event Presentation Methods ### create_update_event_presentation_obj_v4() ### # NOTE: This will create or update a event_presentation. # Rewrite and updated 2021-08-25 +@logger_reset def create_update_event_presentation_obj_v4( event_presentation_dict_obj: Event_Presentation_Base|dict, event_presentation_id: int|str = None, @@ -485,7 +488,8 @@ def create_update_event_presentation_obj_v4( # ### BEGIN ### API Event Presentation Methods ### create_event_presentation_obj() ### -# Updated 2021-08-25 +# Updated 2022-04-12 +@logger_reset def create_event_presentation_obj( event_session_id: int|str, event_presentation_obj_new: Event_Presentation_Base, @@ -493,7 +497,7 @@ def create_event_presentation_obj( create_sub_obj: bool = False, fail_any: bool = False, # Fail if any thing goes wrong for sub objects ) -> bool: - log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass @@ -517,21 +521,25 @@ def create_event_presentation_obj( log.debug(type(event_presentation_obj_new)) if isinstance(event_presentation_obj_new, dict): + event_presentation_dict = event_presentation_obj_new try: - event_presentation_obj_new = Event_Presentation_Base(**event_presentation_obj_new) - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(event_presentation_obj_new) + event_presentation_obj = Event_Presentation_Base(**event_presentation_dict) except ValidationError as e: log.error(e.json()) return False + log.debug(event_presentation_obj) + else: + event_presentation_dict = event_presentation_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_presenter', 'event_presenter_list', 'created_on', 'updated_on'}) - event_presentation_obj_new.event_id = event_id - event_presentation_obj_new.event_session_id = event_session_id + event_presentation_dict['for_type'] = 'event_session' + event_presentation_dict['for_id'] = event_session_id - event_presentation_obj_data = event_presentation_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_presenter', 'event_presenter_list', 'created_on', 'updated_on'}) - log.debug(event_presentation_obj_data) + event_presentation_dict['event_id'] = event_id + event_presentation_dict['event_session_id'] = event_session_id - if event_presentation_obj_in_result := sql_insert(data=event_presentation_obj_data, table_name='event_presentation', rm_id_random=True, id_random_length=8): pass + log.debug(event_presentation_dict) + + if event_presentation_obj_in_result := sql_insert(data=event_presentation_dict, table_name='event_presentation', rm_id_random=True, id_random_length=8): pass else: log.warning(f'Event Presentation not created.') log.debug(event_presentation_obj_in_result) @@ -543,12 +551,12 @@ def create_event_presentation_obj( return_dict['event_presentation_id'] = None return_dict['event_presenter_list'] = [] - if event_presentation_obj_new.event_presenter_list and isinstance(event_presentation_obj_new.event_presenter_list, list): - for event_presenter_obj_new in event_presentation_obj_new.event_presenter_list: + if event_presentation_obj.event_presenter_list and isinstance(event_presentation_obj.event_presenter_list, list): + for event_presenter_obj in event_presentation_obj.event_presenter_list: # NOTE: This does not account for an edge case where the presenter already exists. Possibly as part of another presentation. if create_event_presenter_obj_result := create_event_presenter_obj( event_presentation_id = event_presentation_id, - event_presenter_obj_new = event_presenter_obj_new, + event_presenter_obj_new = event_presenter_obj, create_sub_obj = create_sub_obj, fail_any = fail_any, ): @@ -576,14 +584,16 @@ def create_event_presentation_obj( # ### BEGIN ### API Event Presentation Methods ### update_event_presentation_obj_v3() ### -# Updated 2021-08-25 +# Updated 2022-04-12 +@logger_reset def update_event_presentation_obj_v3( event_presentation_id: int|str, event_presentation_obj_exist: Event_Presentation_Base, + event_session_id: int = None, create_sub_obj: bool = False, fail_any: bool = False, # Fail if any thing goes wrong for sub objects ) -> bool: - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) if event_presentation_id := redis_lookup_id_random(record_id_random=event_presentation_id, table_name='event_presentation'): pass @@ -591,23 +601,32 @@ def update_event_presentation_obj_v3( log.debug(type(event_presentation_obj_exist)) if isinstance(event_presentation_obj_exist, dict): + event_presentation_dict = event_presentation_obj_exist try: - event_presentation_obj_exist = Event_Presentation_Base(**event_presentation_obj_exist) - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(event_presentation_obj_exist) + event_presentation_obj = Event_Presentation_Base(**event_presentation_obj_exist) except ValidationError as e: log.error(e.json()) return False + log.debug(event_presentation_obj) + else: + event_presentation_dict = event_presentation_obj_exist.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_presenter', 'event_presenter_list', 'created_on', 'updated_on'}) # Can't update the event_presentation_id alias if the .id was never set. - # event_presentation_obj_exist.event_presentation_id = event_presentation_id - if not event_presentation_obj_exist.id: - event_presentation_obj_exist.id = event_presentation_id + # event_presentation_obj.event_presentation_id = event_presentation_id + if not event_presentation_obj.id: + event_presentation_obj.id = event_presentation_id - event_presentation_obj_data = event_presentation_obj_exist.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_presenter', 'event_presenter_list', 'created_on', 'updated_on'}) - log.debug(event_presentation_obj_data) + log.debug(event_presentation_dict) - if event_presentation_obj_up_result := sql_update(data=event_presentation_obj_data, table_name='event_presentation', rm_id_random=True): pass + # event_presentation_dict['event_id'] = event_id + if event_session_id: + event_presentation_dict['for_type'] = 'event_session' + event_presentation_dict['for_id'] = event_session_id + event_presentation_dict['event_session_id'] = event_session_id + + log.debug(event_presentation_dict) + + if event_presentation_obj_up_result := sql_update(data=event_presentation_dict, table_name='event_presentation', record_id=event_presentation_id, rm_id_random=True): pass else: log.warning(f'Event Presentation not updated.') log.debug(event_presentation_obj_up_result) @@ -617,8 +636,8 @@ def update_event_presentation_obj_v3( return_dict['event_presentation_id'] = event_presentation_id return_dict['event_presenter_list'] = [] - if event_presentation_obj_exist.event_presenter_list and isinstance(event_presentation_obj_exist.event_presenter_list, list): - for event_presenter_obj_unknown in event_presentation_obj_exist.event_presenter_list: + if event_presentation_obj.event_presenter_list and isinstance(event_presentation_obj.event_presenter_list, list): + for event_presenter_obj_unknown in event_presentation_obj.event_presenter_list: log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(event_presenter_obj_unknown) if event_presenter_id := event_presenter_obj_unknown.get('event_presenter_id_random', None): @@ -679,6 +698,8 @@ def update_event_presentation_obj_v3( # ### BEGIN ### API Event Presentation Methods ### update_event_presentation_obj() ### # This will be taken over by _exist version +# Updated 2022-04-12 +@logger_reset def update_event_presentation_obj( event_presentation_id: int|str, # Ideally the int ID should be passed. This allows for updating of the id_random value. event_presentation_obj_up: Event_Presentation_Base, diff --git a/app/methods/event_presenter_methods.py b/app/methods/event_presenter_methods.py index 811cf52..b3bb617 100644 --- a/app/methods/event_presenter_methods.py +++ b/app/methods/event_presenter_methods.py @@ -1,11 +1,10 @@ -from __future__ import annotations import datetime from typing import Dict, List, Optional, Set, Union from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator from app.db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_update -from app.lib_general import log, logging +from app.lib_general import log, logging, logger_reset from app.methods.event_cfg_methods import load_event_cfg_obj from app.methods.event_person_methods import create_event_person_obj, load_event_person_obj, update_event_person_obj @@ -16,6 +15,7 @@ from app.models.event_presenter_models import Event_Presenter_Base # ### BEGIN ### API Event Presenter Methods ### load_event_presenter_obj() ### +@logger_reset def load_event_presenter_obj( event_presenter_id: int|str, enabled: str = 'enabled', # enabled, disabled, all @@ -201,6 +201,7 @@ def load_event_presenter_obj( # ### BEGIN ### API Event Presenter Methods ### get_event_presenter_rec_list() ### +@logger_reset def get_event_presenter_rec_list( event_person_id: str = None, event_presentation_id: str = None, @@ -281,6 +282,7 @@ def get_event_presenter_rec_list( # ### BEGIN ### API Event Presenter Methods ### get_event_session_id_w_event_presentation_id() ### # Updated 2021-08-23 +@logger_reset def get_event_session_id_w_event_presentation_id( event_presentation_id: int|str, ) -> bool|int|None: @@ -315,6 +317,7 @@ def get_event_session_id_w_event_presentation_id( # ### BEGIN ### API Event Presenter Methods ### create_update_event_presenter_obj_v4() ### # NOTE: This will create or update a event_presenter. # Rewrite and updated 2021-08-25 +@logger_reset def create_update_event_presenter_obj_v4( event_presenter_dict_obj: Event_Presenter_Base|dict, event_presenter_id: int|str = None, @@ -433,7 +436,8 @@ def create_update_event_presenter_obj_v4( # ### BEGIN ### API Event Presenter Methods ### create_event_presenter_obj() ### -# Updated 2021-08-25 +# Updated 2022-04-12 +@logger_reset def create_event_presenter_obj( event_presentation_id: int|str, event_presenter_obj_new: Event_Presenter_Base, @@ -442,7 +446,7 @@ def create_event_presenter_obj( create_sub_obj: bool = False, fail_any: bool = False, # Fail if any thing goes wrong for sub objects ) -> bool: - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass @@ -466,22 +470,26 @@ def create_event_presenter_obj( log.debug(type(event_presenter_obj_new)) if isinstance(event_presenter_obj_new, dict): + event_presenter_dict = event_presenter_obj_new try: - event_presenter_obj_new = Event_Presenter_Base(**event_presenter_obj_new) - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(event_presenter_obj_new) + event_presenter_obj = Event_Presenter_Base(**event_presenter_obj_new) except ValidationError as e: log.error(e.json()) return False + log.debug(event_presenter_obj) + else: + event_presenter_dict = event_presenter_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'created_on', 'updated_on'}) - event_presenter_obj_new.event_id = event_id - event_presenter_obj_new.event_session_id = event_session_id - event_presenter_obj_new.event_presentation_id = event_presentation_id + event_presenter_dict['for_type'] = 'event_presentation' + event_presenter_dict['for_id'] = event_presentation_id - event_presenter_obj_data = event_presenter_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'created_on', 'updated_on'}) - log.debug(event_presenter_obj_data) + event_presenter_dict['event_id'] = event_id + event_presenter_dict['event_session_id'] = event_session_id + event_presenter_dict['event_presentation_id'] = event_presentation_id - if event_presenter_obj_in_result := sql_insert(data=event_presenter_obj_data, table_name='event_presenter', rm_id_random=True, id_random_length=8): pass + log.debug(event_presenter_dict) + + if event_presenter_obj_in_result := sql_insert(data=event_presenter_dict, table_name='event_presenter', rm_id_random=True, id_random_length=8): pass else: log.warning(f'Event Presenter not created.') log.debug(event_presenter_obj_in_result) @@ -498,14 +506,16 @@ def create_event_presenter_obj( # ### BEGIN ### API Event Presenter Methods ### update_event_presenter_obj_v3() ### -# Updated 2021-08-21 +# Updated 2022-04-12 +@logger_reset def update_event_presenter_obj_v3( event_presenter_id: int|str, event_presenter_obj_exist: Event_Presenter_Base, + event_presentation_id: int = None, create_sub_obj: bool = False, fail_any: bool = False, # Fail if any thing goes wrong for sub objects ) -> bool: - log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) if event_presenter_id := redis_lookup_id_random(record_id_random=event_presenter_id, table_name='event_presenter'): pass @@ -513,23 +523,31 @@ def update_event_presenter_obj_v3( log.debug(type(event_presenter_obj_exist)) if isinstance(event_presenter_obj_exist, dict): + event_presenter_dict = event_presenter_obj_exist try: - event_presenter_obj_exist = Event_Presenter_Base(**event_presenter_obj_exist) - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(event_presenter_obj_exist) + event_presenter_obj = Event_Presenter_Base(**event_presenter_obj_exist) except ValidationError as e: log.error(e.json()) return False + log.debug(event_presenter_obj) + else: + event_presenter_dict = event_presenter_obj_exist.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_presenter', 'event_presenter_list', 'created_on', 'updated_on'}) # Can't update the event_presenter_id alias if the .id was never set. - # event_presenter_obj_exist.event_presenter_id = event_presenter_id - if not event_presenter_obj_exist.id: - event_presenter_obj_exist.id = event_presenter_id + # event_presenter_obj.event_presenter_id = event_presenter_id + if not event_presenter_obj.id: + event_presenter_obj.id = event_presenter_id - event_presenter_obj_data = event_presenter_obj_exist.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_presenter', 'event_presenter_list', 'created_on', 'updated_on'}) - log.debug(event_presenter_obj_data) + # event_presenter_dict['event_id'] = event_id + # event_presenter_dict['event_session_id'] = event_session_id + if event_presentation_id: + event_presenter_dict['for_type'] = 'event_presentation' + event_presenter_dict['for_id'] = event_presentation_id + event_presenter_dict['event_presentation_id'] = event_presentation_id - if event_presenter_obj_up_result := sql_update(data=event_presenter_obj_data, table_name='event_presenter', rm_id_random=True): pass + log.debug(event_presenter_dict) + + if event_presenter_obj_up_result := sql_update(data=event_presenter_dict, table_name='event_presenter', record_id=event_presenter_id, rm_id_random=True): pass else: log.warning(f'Event Presenter not updated.') log.debug(event_presenter_obj_up_result) @@ -547,6 +565,7 @@ def update_event_presenter_obj_v3( # ### BEGIN ### API Event Presenter Methods ### update_event_presenter_obj() ### # This will be taken over by _exist version +@logger_reset def update_event_presenter_obj( event_presenter_id: int|str, # Ideally the int ID should be passed. This allows for updating of the id_random value. event_presenter_obj_up: Event_Presenter_Base, diff --git a/app/methods/event_session_methods.py b/app/methods/event_session_methods.py index 8fa82bf..29248e3 100644 --- a/app/methods/event_session_methods.py +++ b/app/methods/event_session_methods.py @@ -264,6 +264,7 @@ def load_event_session_obj( # ### BEGIN ### API Event Session Methods ### get_event_session_rec_list() ### # Updated 2021-12-13 +@logger_reset def get_event_session_rec_list( event_id: str = None, event_location_id: str = None, @@ -373,6 +374,7 @@ def get_event_session_rec_list( # ### BEGIN ### API Event Session Methods ### create_update_event_session_obj_v4() ### # NOTE: This will create or update a event_session. # Rewrite and updated 2021-08-25 +@logger_reset def create_update_event_session_obj_v4( event_session_dict_obj: Event_Session_Base|dict, event_session_id: int|str = None, @@ -502,14 +504,15 @@ def create_update_event_session_obj_v4( # ### BEGIN ### API Event Session Methods ### create_event_session_obj() ### -# Updated 2021-08-25 +# Updated 2022-04-12 +@logger_reset def create_event_session_obj( event_id: int|str, event_session_obj_new: Event_Session_Base, create_sub_obj: bool = False, fail_any: bool = False, # Fail if any thing goes wrong for sub objects ) -> bool: - log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass @@ -517,18 +520,21 @@ def create_event_session_obj( log.debug(type(event_session_obj_new)) if isinstance(event_session_obj_new, dict): + event_session_dict = event_session_obj_new try: - event_session_obj_new = Event_Session_Base(**event_session_obj_new) - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(event_session_obj_new) + event_session_obj = Event_Session_Base(**event_session_dict) except ValidationError as e: log.error(e.json()) return False + log.debug(event_session_obj) + else: + event_session_dict = event_session_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_presentation', 'event_presentation_list', 'event_presenter', 'event_presenter_list', 'created_on', 'updated_on'}) - event_session_obj_data = event_session_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_presentation', 'event_presentation_list', 'event_presenter', 'event_presenter_list', 'created_on', 'updated_on'}) - log.debug(event_session_obj_data) + event_session_dict['event_id'] = event_id - if event_session_obj_in_result := sql_insert(data=event_session_obj_data, table_name='event_session', rm_id_random=True, id_random_length=8): pass + log.debug(event_session_dict) + + if event_session_obj_in_result := sql_insert(data=event_session_dict, table_name='event_session', rm_id_random=True, id_random_length=8): pass else: log.warning(f'Event Session not created.') log.debug(event_session_obj_in_result) @@ -540,13 +546,13 @@ def create_event_session_obj( return_dict['event_session_id'] = None return_dict['event_presentation_list'] = [] - if event_session_obj_new.event_presentation_list and isinstance(event_session_obj_new.event_presentation_list, list): + if event_session_dict.get('event_presentation_list') and isinstance(event_session_dict.get('event_presentation_list'), list): log.info(f'Event Presentation List was found. Loop through and create a new Event Presentation for each and link them to the new Event Session. Event Session ID: {event_session_id}') - for event_presentation_obj_new in event_session_obj_new.event_presentation_list: + for event_presentation_obj in event_session_dict.get('event_presentation_list'): # NOTE: This does not account for an edge case where the presentation already exists. Possibly as part of another session. if create_event_presentation_obj_result := create_event_presentation_obj( event_session_id = event_session_id, - event_presentation_obj_new = event_presentation_obj_new, + event_presentation_obj_new = event_presentation_obj, create_sub_obj = create_sub_obj, fail_any = fail_any, ): @@ -574,14 +580,15 @@ def create_event_session_obj( # ### BEGIN ### API Event Session Methods ### update_event_session_obj_v3() ### -# Updated 2021-08-25 +# Updated 2022-04-12 +@logger_reset def update_event_session_obj_v3( event_session_id: int|str, event_session_obj_exist: Event_Session_Base, create_sub_obj: bool = False, fail_any: bool = False, # Fail if any thing goes wrong for sub objects ) -> bool: - log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass @@ -589,23 +596,30 @@ def update_event_session_obj_v3( log.debug(type(event_session_obj_exist)) if isinstance(event_session_obj_exist, dict): + event_session_dict = event_session_obj_exist try: - event_session_obj_exist = Event_Session_Base(**event_session_obj_exist) - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(event_session_obj_exist) + event_session_obj = Event_Session_Base(**event_session_obj_exist) except ValidationError as e: log.error(e.json()) return False + log.debug(event_session_obj) + else: + event_session_dict = event_session_obj_exist.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_presentation', 'event_presentation_list', 'event_presenter', 'event_presenter_list', 'created_on', 'updated_on'}) # Can't update the event_session_id alias if the .id was never set. - # event_session_obj_exist.event_session_id = event_session_id - if not event_session_obj_exist.id: - event_session_obj_exist.id = event_session_id + # event_session_obj.event_session_id = event_session_id + if not event_session_obj.id: + event_session_obj.id = event_session_id - event_session_obj_data = event_session_obj_exist.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_presentation', 'event_presentation_list', 'event_presenter', 'event_presenter_list', 'created_on', 'updated_on'}) - log.debug(event_session_obj_data) + # event_presenter_dict['event_id'] = event_id + # if event_track_id: + # event_presenter_dict['for_type'] = 'event_track' + # event_presenter_dict['for_id'] = event_track_id + # event_presenter_dict['event_track_id'] = event_track_id - if event_session_obj_up_result := sql_update(data=event_session_obj_data, table_name='event_session', rm_id_random=True): pass + log.debug(event_session_dict) + + if event_session_obj_up_result := sql_update(data=event_session_dict, table_name='event_session', record_id=event_session_id, rm_id_random=True): pass else: log.warning(f'Event Session not updated.') log.debug(event_session_obj_up_result) @@ -615,8 +629,8 @@ def update_event_session_obj_v3( return_dict['event_session_id'] = event_session_id return_dict['event_presentation_list'] = [] - if event_session_obj_exist.event_presentation_list and isinstance(event_session_obj_exist.event_presentation_list, list): - for event_presentation_obj_unknown in event_session_obj_exist.event_presentation_list: + if event_session_obj.event_presentation_list and isinstance(event_session_obj.event_presentation_list, list): + for event_presentation_obj_unknown in event_session_obj.event_presentation_list: log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(event_presentation_obj_unknown) if event_presentation_id := event_presentation_obj_unknown.get('event_presentation_id_random', None): @@ -677,6 +691,8 @@ def update_event_session_obj_v3( # ### BEGIN ### API Event Session Methods ### update_event_session_obj() ### # This will be taken over by _exist version +# Updated 2022-04-12 +@logger_reset def update_event_session_obj( event_session_id: int|str, # Ideally the int ID should be passed. This allows for updating of the id_random value. event_session_obj_up: Event_Session_Base, diff --git a/app/models/event_presentation_models.py b/app/models/event_presentation_models.py index cba1c31..7750b11 100644 --- a/app/models/event_presentation_models.py +++ b/app/models/event_presentation_models.py @@ -1,4 +1,3 @@ -from __future__ import annotations import datetime, hashlib, logging, os, pytz, redis, secrets from typing import Dict, List, Optional, Set, Union @@ -110,48 +109,36 @@ class Event_Presentation_Base(BaseModel): #@validator('event_presentation_id_random', always=True) def event_presentation_id_random_copy(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - if values['id_random']: return values['id_random'] return None @validator('id', always=True) def event_presentation_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['id_random']: - log.debug(values['id_random']) - return redis_lookup_id_random(record_id_random=values['id_random'], table_name='event_presentation') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event_presentation') return None @validator('event_id', always=True) def event_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['event_id_random']: - return redis_lookup_id_random(record_id_random=values['event_id_random'], table_name='event') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('event_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event') return None @validator('event_abstract_id', always=True) def event_abstract_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['event_abstract_id_random']: - return redis_lookup_id_random(record_id_random=values['event_abstract_id_random'], table_name='event_abstract') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('event_abstract_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event_abstract') return None @validator('event_session_id', always=True) def event_session_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['event_session_id_random']: - return redis_lookup_id_random(record_id_random=values['event_session_id_random'], table_name='event_session') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('event_session_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event_session') return None class Config: diff --git a/app/models/event_presenter_models.py b/app/models/event_presenter_models.py index 8c4b40e..c216ecc 100644 --- a/app/models/event_presenter_models.py +++ b/app/models/event_presenter_models.py @@ -164,66 +164,50 @@ class Event_Presenter_Base(BaseModel): #@validator('event_presenter_id_random', always=True) def event_presenter_id_random_copy(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - if values['id_random']: return values['id_random'] return None @validator('id', always=True) def event_presenter_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['id_random']: - log.debug(values['id_random']) - return redis_lookup_id_random(record_id_random=values['id_random'], table_name='event_presenter') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event_presenter') return None @validator('account_id', always=True) def account_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['account_id_random']: - return redis_lookup_id_random(record_id_random=values['account_id_random'], table_name='account') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('account_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='account') return None @validator('event_id', always=True) def event_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['event_id_random']: - return redis_lookup_id_random(record_id_random=values['event_id_random'], table_name='event') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('event_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event') return None @validator('event_person_id', always=True) def event_person_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['event_person_id_random']: - return redis_lookup_id_random(record_id_random=values['event_person_id_random'], table_name='event_person') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('event_person_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event_person') return None @validator('event_presentation_id', always=True) def event_presentation_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['event_presentation_id_random']: - return redis_lookup_id_random(record_id_random=values['event_presentation_id_random'], table_name='event_presentation') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('event_presentation_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event_presentation') return None @validator('event_session_id', always=True) def event_session_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['event_session_id_random']: - return redis_lookup_id_random(record_id_random=values['event_session_id_random'], table_name='event_session') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('event_session_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event_session') return None class Config: diff --git a/app/models/event_session_models.py b/app/models/event_session_models.py index 32a5aa4..57af5f2 100644 --- a/app/models/event_session_models.py +++ b/app/models/event_session_models.py @@ -1,4 +1,3 @@ -from __future__ import annotations import datetime, hashlib, logging, os, pytz, redis, secrets from typing import Dict, List, Optional, Set, Union @@ -141,53 +140,39 @@ class Event_Session_Base(BaseModel): #@validator('event_session_id_random', always=True) def event_session_id_random_copy(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - if values['id_random']: return values['id_random'] return None @validator('id', always=True) def event_session_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['id_random']: - log.debug(values['id_random']) - return redis_lookup_id_random(record_id_random=values['id_random'], table_name='event_session') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event_session') return None @validator('event_id', always=True) def event_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['event_id_random']: - return redis_lookup_id_random(record_id_random=values['event_id_random'], table_name='event') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('event_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event') return None @validator('event_location_id', always=True) def event_location_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values.get('event_location_id_random', None): - return redis_lookup_id_random(record_id_random=values['event_location_id_random'], table_name='event_location') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('event_location_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event_location') return None @validator('event_track_id', always=True) def event_track_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['event_track_id_random']: - return redis_lookup_id_random(record_id_random=values['event_track_id_random'], table_name='event_track') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('event_track_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event_track') return None class Config: underscore_attrs_are_private = True allow_population_by_field_name = True fields = base_fields - -#Event_Session_Base.update_forward_refs() diff --git a/app/routers/importing.py b/app/routers/importing.py index 41f7f38..0cd8dec 100644 --- a/app/routers/importing.py +++ b/app/routers/importing.py @@ -1708,21 +1708,315 @@ async def bgh_program_import( log.debug(create_update_event_session_obj_v4_result) session_dict_li.append(session_dict) - - # try: - # event_session_obj = Event_Session_Base(**session_dict) - # log.debug(event_session_obj) - # except ValidationError as e: - # log.error(e.json()) - # break - # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - - # if event_session_dict_in_result := sql_insert(data=event_session_dict, table_name='event_session', rm_id_random=True, id_random_length=8): pass - # else: - # log.warning(f'Event Session not created.') - # log.debug(event_session_dict_in_result) - # return False - # log.debug(event_session_dict_in_result) + return mk_resp(data=session_dict_li, response=commons.response) - return mk_resp(data=session_dict_li, response=commons.response) \ No newline at end of file +# AAPOR program import +# Updated 2022-04-11 +@router.get('/aapor_program_import', response_model=Resp_Body_Base) +async def aapor_program_import( + event_id: str = Query(..., min_length=11, max_length=22), + begin_at: int = 0, + end_at: int = 50, + + commons: Common_Route_Params = Depends(common_route_params), + ): + log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + account_id = commons.x_account_id # 20 j5EBhRDqPuw + # AAPOR 2022: 1447 x2H2P2MYlXU + + if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass + # elif event_exhibit_id is None: pass + else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event ID was invalid or not found.') + + # PART 0: Load the data + full_file_path = 'admin/temp/import_aapor_2022-04_program_data.csv' + + df = pandas.read_csv( + full_file_path, + na_filter = False, + dtype = { + 'presentation_code': str, + 'presentation_title': str, + 'presentation_code': str, + 'presentation_start_datetime': str, + 'presentation_end_datetime': str, + 'presenter_number': str, + 'presenter_given_name': str, + 'presenter_family_name': str, + 'session_code': str, + 'Session Code': str, + 'session_title': str, + 'session_description': str, + 'session_start_datetime': str, + 'session_end_datetime': str, + 'session_location': str, + 'session_location_code': str, + }, + parse_dates = ['session_start_datetime', 'session_end_datetime'] + ) + #df = df.fillna('') # replace NaN with '' + # df = df.fillna(None) + # df = df.fillna('', inplace=True) + #return str(df.info()) + + df.rename(columns={ + 'presenter_number': 'presenter_code', + 'Presenter Number': 'presenter_code', + 'Presenter Code': 'presenter_code', + 'Presentation Code': 'presentation_code', + 'presentation_title': 'presentation_name', + 'given_name (first)': 'presenter_given_name', + 'family_name (last)': 'presenter_family_name', + 'Session Code': 'session_code', + 'session_title': 'session_name', + 'Session Title': 'session_name', + 'session_location_code': 'location_code', + 'session_location': 'location_name', + }, + inplace = True) + log.debug(df) + + # datetime.datetime.strptime(updated_on, '%d-%b-%Y') + + df_dict = df.to_dict(orient='records') + # log.debug(df_dict) + + from app.methods.event_session_methods import create_event_session_obj, create_update_event_session_obj_v4, load_event_session_obj, get_event_session_rec_list, update_event_session_obj_v3, update_event_session_obj + + from app.methods.event_presentation_methods import create_event_presentation_obj, create_update_event_presentation_obj_v4, load_event_presentation_obj, get_event_presentation_rec_list, update_event_presentation_obj_v3, update_event_presentation_obj + + from app.methods.event_presenter_methods import create_event_presenter_obj, create_update_event_presenter_obj_v4, load_event_presenter_obj, get_event_presenter_rec_list, update_event_presenter_obj_v3, update_event_presenter_obj + + from app.models.event_session_models import Event_Session_Base + + session_dict_li = [] + # NOTE: I think I really like the way I did this loop counter and logging. -2022-04-14 + loop_count = 0 + for record in df_dict: + loop_count = loop_count + 1 + if loop_count <= begin_at: + log.info(f'Skipping loop #{loop_count}') + continue + if loop_count > end_at: + log.info(f'Stopping at loop #{loop_count}') + break + else: + log.info(f'Starting loop #{loop_count}') + + log.info('# PART 1: Process the session data') + session_data = {} + session_data['event_id'] = event_id + session_data['code'] = record.get('session_code') + session_data['name'] = record.get('session_name') + session_data['description'] = record.get('session_description') + session_data['start_datetime'] = record.get('session_start_datetime') + session_data['end_datetime'] = record.get('session_end_datetime') + location_name = record.get('location_name') + if location_name == 'Arkansas': session_data['event_location_id'] = 306 + elif location_name == 'Colorado': session_data['event_location_id'] = 307 + elif location_name == 'Erie': session_data['event_location_id'] = 308 + elif location_name == 'Huron': session_data['event_location_id'] = 309 + elif location_name == 'Michigan A': session_data['event_location_id'] = 310 + elif location_name == 'Michigan B': session_data['event_location_id'] = 311 + elif location_name == 'Mississippi': session_data['event_location_id'] = 312 + elif location_name == 'Missouri': session_data['event_location_id'] = 313 + elif location_name == 'Ontario': session_data['event_location_id'] = 314 + elif location_name == 'Streeterville': session_data['event_location_id'] = 315 + elif location_name == 'Superior A': session_data['event_location_id'] = 316 + elif location_name == 'Superior B': session_data['event_location_id'] = 317 + elif location_name == 'Wrigleyville': session_data['event_location_id'] = 318 + session_data['enable'] = True + session_data['hide'] = False + + log.debug(session_data) + + data = {} + data['event_id'] = event_id + data['code'] = session_data['code'] + sql = f""" + SELECT `event_session`.id AS 'event_session_id', `event_session`.id_random AS 'event_session_id_random' + FROM `event_session` AS `event_session` + WHERE + event_session.event_id = :event_id + AND event_session.code = :code + LIMIT 1; + """ + # log.debug(sql) + if event_session_rec_li_result := sql_select(data=data, sql=sql, as_list=True): + log.info('Got a list result') + event_session_rec = event_session_rec_li_result[0] + log.debug(event_session_rec) + else: # [] or False + log.info('No results or something went wrong') + event_session_rec = None + log.debug(event_session_rec_li_result) + + # log.error('Hit break point') + # break + + event_session_id = None + if event_session_rec: + log.info('Found a record. Updating...') + event_session_id = event_session_rec.get('event_session_id') + if update_event_session_obj_result := update_event_session_obj_v3( + event_session_id = event_session_id, + event_session_obj_exist = session_data + ): pass + else: + log.error('Something went wrong while trying to update an event session.') + # event_session_id = update_event_session_obj_result + break + log.debug(update_event_session_obj_result) + else: + log.info('No record found. Inserting...') + if create_event_session_obj_result := create_event_session_obj( + event_id = event_id, + event_session_obj_new = session_data + ): + event_session_id = create_event_session_obj_result + else: + log.error('Something went wrong while trying to create a new event session.') + # event_session_id = create_event_session_obj_result + break + log.debug(create_event_session_obj_result) + + # log.error('Hit continue to next loop point') + # continue + + # log.error('Hit break point') + # break + + log.info('# PART 2: Process the presentation data') + presentation_data = {} + presentation_data['for_type'] = 'event_session' + presentation_data['for_id'] = event_session_id + presentation_data['event_session_id'] = event_session_id + presentation_data['code'] = record.get('presentation_code') + presentation_data['name'] = record.get('presentation_name') + presentation_data['description'] = record.get('presentation_description') + presentation_data['start_datetime'] = record.get('presentation_start_datetime') + presentation_data['end_datetime'] = record.get('presentation_end_datetime') + presentation_data['enable'] = True + session_data['hide'] = False + log.debug(presentation_data) + + data = {} + data['event_session_id'] = event_session_id + data['code'] = presentation_data['code'] + sql = f""" + SELECT `event_presentation`.id AS 'event_presentation_id', `event_presentation`.id_random AS 'event_presentation_id_random' + FROM `event_presentation` AS `event_presentation` + WHERE + event_presentation.event_session_id = :event_session_id + AND event_presentation.code = :code + LIMIT 1; + """ + log.debug(sql) + if event_presentation_rec_li_result := sql_select(data=data, sql=sql, as_list=True): + log.info('Got a list result') + event_presentation_rec = event_presentation_rec_li_result[0] + else: # [] or False + log.info('No results or something went wrong') + event_presentation_rec = None + log.debug(event_presentation_rec_li_result) + + event_presentation_id = None + if event_presentation_rec: + log.info('Found a record. Updating...') + event_presentation_id = event_presentation_rec.get('event_presentation_id') + if update_event_presentation_obj_result := update_event_presentation_obj_v3( + event_presentation_id = event_presentation_id, + event_presentation_obj_exist = presentation_data, + event_session_id = event_session_id, + ): pass + else: + log.error('Something went wrong while trying to update an event presentation.') + # event_presentation_id = update_event_presentation_obj_result + break + log.debug(update_event_presentation_obj_result) + else: + log.info('No record found. Inserting...') + if create_event_presentation_obj_result := create_event_presentation_obj( + event_session_id = event_session_id, + event_presentation_obj_new = presentation_data + ): + event_presentation_id = create_event_presentation_obj_result + else: + log.error('Something went wrong while trying to create a new event presentation.') + # event_presentation_id = create_event_presentation_obj_result + break + log.debug(create_event_presentation_obj_result) + + # log.error('Hit continue to next loop point') + # continue + + # log.error('Hit break point') + # break + + log.info('# PART 3: Process the presenter data') + presenter_data = {} + presenter_data['for_type'] = 'event_presentation' + presenter_data['for_id'] = event_presentation_id + presenter_data['event_session_id'] = event_session_id + presenter_data['event_presentation_id'] = event_presentation_id + presenter_data['code'] = record.get('presenter_code') + presenter_data['given_name'] = record.get('presenter_given_name') + presenter_data['family_name'] = record.get('presenter_family_name') + presenter_data['sort'] = record.get('presenter_code') # Using the code as the sort as well + presenter_data['enable'] = True + presenter_data['hide'] = False + log.debug(presenter_data) + + data = {} + data['event_presentation_id'] = event_presentation_id + data['code'] = presenter_data['code'] + sql = f""" + SELECT `event_presenter`.id AS 'event_presenter_id', `event_presenter`.id_random AS 'event_presenter_id_random' + FROM `event_presenter` AS `event_presenter` + WHERE + event_presenter.event_presentation_id = :event_presentation_id + AND event_presenter.code = :code + LIMIT 1; + """ + log.debug(sql) + if event_presenter_rec_li_result := sql_select(data=data, sql=sql, as_list=True): + log.info('Got a list result') + event_presenter_rec = event_presenter_rec_li_result[0] + else: # [] or False + log.info('No results or something went wrong') + event_presenter_rec = None + log.debug(event_presenter_rec_li_result) + + event_presenter_id = None + if event_presenter_rec: + log.info('Found a record. Updating...') + event_presenter_id = event_presenter_rec.get('event_presenter_id') + if update_event_presenter_obj_result := update_event_presenter_obj_v3( + event_presenter_id = event_presenter_id, + event_presenter_obj_exist = presenter_data, + event_presentation_id = event_presentation_id, + ): pass + else: + log.error('Something went wrong while trying to update an event presenter.') + # event_presenter_id = update_event_presenter_obj_result + break + log.debug(update_event_presenter_obj_result) + else: + log.info('No record found. Inserting...') + if create_event_presenter_obj_result := create_event_presenter_obj( + event_presentation_id = event_presentation_id, + event_presenter_obj_new = presenter_data + ): + event_presenter_id = create_event_presenter_obj_result + else: + log.error('Something went wrong while trying to create a new event presenter.') + # event_presenter_id = create_event_presenter_obj_result + break + log.debug(create_event_presenter_obj_result) + + # log.error('Hit break point') + # break + return mk_resp(data=session_dict_li, response=commons.response)