From 18d8b73eb39201f26a8b9b08edb8137566262ffa Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Wed, 23 Feb 2022 18:34:21 -0500 Subject: [PATCH] Work on Impexium, exhibit, and badge related --- app/methods/e_impexium_methods.py | 189 ++++++++++++-------- app/methods/event_badge_methods.py | 86 +++++++++ app/methods/event_person_methods.py | 115 +++++++----- app/methods/event_person_profile_methods.py | 43 +++-- app/models/event_badge_models.py | 38 ++-- app/models/event_badge_template_models.py | 18 +- app/models/event_person_models.py | 124 +++++-------- app/models/event_person_profile_models.py | 39 ++-- app/models/response_models.py | 7 +- app/routers/e_impexium.py | 176 +++++++++++------- 10 files changed, 489 insertions(+), 346 deletions(-) diff --git a/app/methods/e_impexium_methods.py b/app/methods/e_impexium_methods.py index c27d3e3..a9dbb33 100644 --- a/app/methods/e_impexium_methods.py +++ b/app/methods/e_impexium_methods.py @@ -27,10 +27,11 @@ api['headers'] = { 'Content-Type': 'application/json;charset=UTF-8' } # ### BEGIN ### API External Impexium Methods ### get_access_token() ### # Updated 2022-02-18 @logger_reset -def get_access_token(api, app): - log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL +def get_access_token(): + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) + log.debug(f'App data:\n{app}') log.debug(f'API data:\n{api}') endpoint = '/WebApiUrl' @@ -40,10 +41,10 @@ def get_access_token(api, app): resp = requests.post(url=uri, json=data, headers=api['headers']) - log.debug('Status Code:', resp.status_code) - log.debug('Headers:', resp.headers) - # log.debug('Encoding:', resp.encoding) - log.debug('JSON:', resp.json()) + log.debug(f'Status Code: {resp.status_code}') + log.debug(f'Headers: {resp.headers}') + # log.debug(f'Encoding: {resp.encoding}') + log.debug(f'JSON: {resp.json()}') # log.debug('Text:', resp.text) response_data = resp.json() @@ -62,29 +63,40 @@ def get_access_token(api, app): # ### BEGIN ### API External Impexium Methods ### authenticate() ### # Updated 2022-02-18 @logger_reset -def authenticate(api, app): - log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL +def authenticate(): + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) + result = get_access_token() + log.debug(result) + + log.debug(f'App data:\n{app}') + log.debug(f'API data:\n{api}') + data = { 'AppId': app['id'], 'AppPassword': app['password'], 'AppUserEmail': app['user_email'], 'AppUserPassword': app['user_password'] } - resp = requests.post(url=api['auth_uri'], json=data, headers=api['headers']) + try_request = True + limit = 0 + while try_request and limit < 3: + limit = limit + 1 - log.debug('Status Code:', resp.status_code) - log.debug('Headers:', resp.headers) - # log.debug('Encoding:', resp.encoding) - log.debug('JSON:', resp.json()) - # log.debug('Text:', resp.text) + resp = requests.post(url=api['auth_uri'], json=data, headers=api['headers']) - response_data = resp.json() + log.debug(f'Status Code: {resp.status_code}') + log.debug(f'Headers: {resp.headers}') + # log.debug(f'Encoding: {resp.encoding}') + log.debug(f'JSON: {resp.json()}') + # log.debug('Text:', resp.text) - api['headers']['AppToken'] = response_data['appToken'] - api['headers']['UserToken'] = response_data['userToken'] - api['base_url'] = response_data['uri'] - - # app['user_id'] = response_data['userId'] - # app['sso_token'] = response_data['ssoToken'] - # app['app_configuration'] = response_data['appConfiguration'] # allowGoogleLogin=False, allowLinkedInLogin=False + if resp: + try_request = False + response_data = resp.json() + api['headers']['AppToken'] = response_data['appToken'] + api['headers']['UserToken'] = response_data['userToken'] + api['base_url'] = response_data['uri'] + else: + log.warning('Hit rate limit? Sleeping for .5 seconds...') + time.sleep(.5) log.debug(api) @@ -92,11 +104,11 @@ def authenticate(api, app): # ### END ### API External Impexium Methods ### authenticate() ### -api = get_access_token(api=api, app=app) -log.debug(api) +# api = get_access_token(api=api, app=app) +# log.debug(api) -api = authenticate(api=api, app=app) -log.debug(api) +# api = authenticate(api=api, app=app) +# log.debug(api) # ### BEGIN ### API External Impexium Methods ### get_custom_fields() ### @@ -115,10 +127,10 @@ def get_custom_fields(api, name=None, page=1): resp = requests.get(url=uri, params=params, headers=api['headers']) - log.debug('Status Code:', resp.status_code) - log.debug('Headers:', resp.headers) - # log.debug('Encoding:', resp.encoding) - log.debug('JSON:', resp.json()) + log.debug(f'Status Code: {resp.status_code}') + log.debug(f'Headers: {resp.headers}') + # log.debug(f'Encoding: {resp.encoding}') + log.debug(f'JSON: {resp.json()}') # log.debug('Text:', resp.text) response_data = resp.json() @@ -145,10 +157,10 @@ def get_events(page=1): resp = requests.get(url=uri, params=params, headers=api['headers']) - log.debug('Status Code:', resp.status_code) - log.debug('Headers:', resp.headers) - # log.debug('Encoding:', resp.encoding) - log.debug('JSON:', resp.json()) + log.debug(f'Status Code: {resp.status_code}') + log.debug(f'Headers: {resp.headers}') + # log.debug(f'Encoding: {resp.encoding}') + log.debug(f'JSON: {resp.json()}') # log.debug('Text:', resp.text) response_data = resp.json() @@ -167,37 +179,64 @@ def get_events(page=1): # Updated 2021-10-07 def get_event_registrants( event_code: str, - page: int = 1, - return_all: bool = False + page: int = 0, + # return_all: bool = False ): - log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) - endpoint = f'/Events/{event_code}/Registrations/{page}' - uri = api['base_url']+endpoint + result = authenticate() + log.debug(result) - params = {} + try_request = True - resp = requests.get(url=uri, params=params, headers=api['headers']) - - log.debug('Status Code:', resp.status_code) - log.debug('Headers:', resp.headers) - # log.debug('Encoding:', resp.encoding) - log.debug('JSON:', resp.json()) - # log.debug('Text:', resp.text) - - response_data = resp.json() - - # pp = pprint.PrettyPrinter(indent=2) - # pp.pprint(response_data) - # print(response_data) - # print('**************************') - - event_registrant_li = response_data - if return_all: - return event_registrant_li + if page > 0: + loop_count = page + loop_limit = page + 1 else: - return event_registrant_li['dataList'] + page = 1 + loop_count = 0 + loop_limit = 15 + # current_page = 0 + impexium_event_registration_list = [] + while try_request and loop_count < loop_limit: + # if page == 0: + # page = 1 + # # loop_limit = 10 + # try_request = True + # else: + # # page = loop_count + # pass + endpoint = f'/Events/{event_code}/Registrations/{page}' + uri = api['base_url']+endpoint + params = {} + + if resp := requests.get(url=uri, params=params, headers=api['headers']): pass + else: break + + log.debug(f'Status Code: {resp.status_code}') + log.debug(f'Headers: {resp.headers}') + # log.debug(f'Encoding: {resp.encoding}') + # log.debug(f'JSON: {resp.json()}') + # log.debug('Text:', resp.text) + + response_data = resp.json() + current_page = response_data.get('pageNumber') + log.info(f'Current Page: {current_page}') + + if current_page >= 1: + impexium_event_registration_list = impexium_event_registration_list + response_data.get('dataList') + + page = current_page + 1 + + log.warning('Avoiding rate limit. Sleeping for .1 seconds...') + time.sleep(.1) + else: + try_request = False + + loop_count = loop_count + 1 + + return impexium_event_registration_list # ### END ### API Impexium Methods ### get_event_registrants() ### @@ -214,10 +253,10 @@ def get_individual_registrations(api, record_number, event_code=None, page=1): resp = requests.get(url=uri, params=params, headers=api['headers']) - log.debug('Status Code:', resp.status_code) - log.debug('Headers:', resp.headers) - # log.debug('Encoding:', resp.encoding) - log.debug('JSON:', resp.json()) + log.debug(f'Status Code: {resp.status_code}') + log.debug(f'Headers: {resp.headers}') + # log.debug(f'Encoding: {resp.encoding}') + log.debug(f'JSON: {resp.json()}') # log.debug('Text:', resp.text) response_data = resp.json() @@ -245,10 +284,10 @@ def get_individual_purchases(api, record_number, product_code=None, purchased_si resp = requests.get(url=uri, params=params, headers=api['headers']) - log.debug('Status Code:', resp.status_code) - log.debug('Headers:', resp.headers) - # log.debug('Encoding:', resp.encoding) - log.debug('JSON:', resp.json()) + log.debug(f'Status Code: {resp.status_code}') + log.debug(f'Headers: {resp.headers}') + # log.debug(f'Encoding: {resp.encoding}') + log.debug(f'JSON: {resp.json()}') # log.debug('Text:', resp.text) response_data = resp.json() @@ -276,10 +315,10 @@ def get_individual_custom_fields(api, individual_id): resp = requests.get(url=uri, params=params, headers=api['headers']) - log.debug('Status Code:', resp.status_code) - log.debug('Headers:', resp.headers) - # log.debug('Encoding:', resp.encoding) - log.debug('JSON:', resp.json()) + log.debug(f'Status Code: {resp.status_code}') + log.debug(f'Headers: {resp.headers}') + # log.debug(f'Encoding: {resp.encoding}') + log.debug(f'JSON: {resp.json()}') # log.debug('Text:', resp.text) response_data = resp.json() @@ -308,10 +347,10 @@ def get_individual_orders_open(api, record_number, include_line_items=False, fro resp = requests.get(url=uri, params=params, headers=api['headers']) - log.debug('Status Code:', resp.status_code) - log.debug('Headers:', resp.headers) - # log.debug('Encoding:', resp.encoding) - log.debug('JSON:', resp.json()) + log.debug(f'Status Code: {resp.status_code}') + log.debug(f'Headers: {resp.headers}') + # log.debug(f'Encoding: {resp.encoding}') + log.debug(f'JSON: {resp.json()}') # log.debug('Text:', resp.text) response_data = resp.json() diff --git a/app/methods/event_badge_methods.py b/app/methods/event_badge_methods.py index f3499d2..db19db3 100644 --- a/app/methods/event_badge_methods.py +++ b/app/methods/event_badge_methods.py @@ -91,3 +91,89 @@ def get_event_badge_template_id_w_event_id( else: return False else: return None # ### END ### API Event Badge Methods ### get_event_badge_template_id_w_event_id() ### + + +# ### BEGIN ### API Event Badge Methods ### create_update_event_badge_obj_v4() ### +# Updated 2022-02-23 +def create_update_event_badge_obj_v4( + event_badge_dict_obj: Event_Badge_Base|dict, + event_badge_id: int|str = None, + # account_id: int|str = None, + # event_id: int|str = None, + event_person_id: int|str = None, + create_sub_obj: bool = False, + fail_any: bool = False, # Fail if any thing goes wrong for sub objects + return_outline: bool = False, + ) -> int|bool: + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + # ### SECTION ### Secondary data validation + log.info('Checking requirements...') + if event_badge_id: + log.info(f'Event Badge ID passed. Update existing Event Badge. Event Badge ID: {event_badge_id}') + + if event_badge_id := redis_lookup_id_random(record_id_random=event_badge_id, table_name='event_badge'): pass + else: + log.error('Event Badge ID passed but is invalid. Failed requirement.') + return False + else: + log.info('No Event Badge ID passed. Create new Event Badge. Required: Event Person ID') + + if event_person_id := redis_lookup_id_random(record_id_random=event_person_id, table_name='event_person'): pass + else: + log.error('Missing or invalid Event Person ID passed. Failed requirement.') + log.info(f'Event Person ID: {event_person_id}') + return False + + log.info('Create dictionary or Pydantic object') + log.debug(type(event_badge_dict_obj)) + if isinstance(event_badge_dict_obj, dict): + event_badge_dict = event_badge_dict_obj + if event_badge_id: + event_badge_dict['event_badge_id'] = event_badge_id + try: + event_badge_obj = Event_Badge_Base(**event_badge_dict) + except ValidationError as e: + log.error(e.json()) + return False + else: + event_badge_obj = event_badge_dict_obj + if event_badge_id: + # NOTE: Can't update the ID alias if it was never set. + event_badge_obj.id = event_badge_id + log.debug(event_badge_obj) + + event_badge_dict = event_badge_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_badge_template', 'event_id', 'event_id_random', 'created_on', 'updated_on'}) + + # ### SECTION ### Process data + if event_person_id: pass + elif event_person_id := event_badge_obj.event_person_id: pass + + if event_badge_id: + if event_badge_dict_up_result := sql_update(data=event_badge_dict, table_name='event_badge', rm_id_random=True): pass + else: + log.warning(f'Event Badge not updated. Event Badge ID: {event_badge_id}') + log.debug(event_badge_dict_up_result) + return False + log.debug(event_badge_dict_up_result) + else: + if event_badge_dict_in_result := sql_insert(data=event_badge_dict, table_name='event_badge', rm_id_random=True, id_random_length=8): pass + else: + log.warning(f'Event Badge not created.') + log.debug(event_badge_dict_in_result) + return False + log.debug(event_badge_dict_in_result) + + event_badge_id = event_badge_dict_in_result + + event_badge_outline = {} + event_badge_outline['event_badge_id'] = event_badge_id + + if return_outline: + log.debug(f'Returning the Event Badge Outline: {event_badge_outline}') + return event_badge_outline + else: + log.debug(f'Returning the Event Badge ID: {event_badge_id}') + return event_badge_id +# ### END ### API Event Badge Methods ### create_update_event_badge_obj_v4() ### \ No newline at end of file diff --git a/app/methods/event_person_methods.py b/app/methods/event_person_methods.py index 74633f2..731be0d 100644 --- a/app/methods/event_person_methods.py +++ b/app/methods/event_person_methods.py @@ -8,10 +8,10 @@ from app.db_sql import get_account_id_w_for_type_id, redis_lookup_id_random, sql from app.lib_general import log, logging # from app.methods.event_abstract_methods import load_event_abstract_obj -from app.methods.event_badge_methods import load_event_badge_obj +from app.methods.event_badge_methods import create_update_event_badge_obj_v4, load_event_badge_obj # from app.methods.event_exhibit_methods import load_event_exhibit_obj # from app.methods.event_file_methods import load_event_file_obj -from app.methods.event_person_profile_methods import load_event_person_profile_obj +from app.methods.event_person_profile_methods import create_update_event_person_profile_obj_v4, load_event_person_profile_obj # from app.methods.event_presentation_methods import load_event_presentation_obj # from app.methods.event_presenter_methods import get_event_presenter_rec_list, load_event_presenter_obj # from app.methods.event_registration_methods import create_event_registration_obj, load_event_registration_obj, update_event_registration_obj_v3 @@ -308,16 +308,15 @@ def get_event_id_w_event_person_id( - - # ### BEGIN ### API Event Person Methods ### create_update_event_person_obj_v4() ### -# NOTE: This will create or update a event_person. -# Rewrite and updated 2021-08-25 +# Updated 2022-02-23 def create_update_event_person_obj_v4( event_person_dict_obj: Event_Person_Base|dict, event_person_id: int|str|None = None, account_id: int|str|None = None, event_id: int|str|None = None, + event_badge_id: int|None = None, + event_person_profile_id: int|None = None, create_sub_obj: bool = False, fail_any: bool = False, # Fail if any thing goes wrong for sub objects return_outline: bool = False, @@ -325,6 +324,7 @@ def create_update_event_person_obj_v4( log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) + # ### SECTION ### Secondary data validation log.info('Checking requirements...') if event_person_id: log.info(f'Event Person ID passed. Update existing Event Person. Event Person ID: {event_person_id}') @@ -377,6 +377,7 @@ def create_update_event_person_obj_v4( log.error('Unable to get Account ID from related object.') return False + log.info('Create dictionary or Pydantic object') log.debug(type(event_person_dict_obj)) if isinstance(event_person_dict_obj, dict): event_person_dict = event_person_dict_obj @@ -388,8 +389,6 @@ def create_update_event_person_obj_v4( event_person_dict['event_id'] = event_id try: event_person_obj = Event_Person_Base(**event_person_dict) - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(event_person_obj) except ValidationError as e: log.error(e.json()) return False @@ -402,8 +401,22 @@ def create_update_event_person_obj_v4( event_person_obj.account_id = account_id if event_id: event_person_obj.event_id = event_id + log.debug(event_person_obj) - event_person_dict = event_person_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_badge', 'event_registration', 'created_on', 'updated_on'}) + event_person_dict = event_person_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_badge', 'event_person_profile', 'event_registration', 'created_on', 'updated_on'}) + + # ### SECTION ### Process data + if not event_badge_id: + if event_person_obj.event_badge and event_person_obj.event_badge.id: + event_badge_id = event_person_obj.event_badge.id + elif event_person_obj.event_badge and event_person_obj.event_badge_id: + event_badge_id = event_person_obj.event_badge_id + + if not event_person_profile_id: + if event_person_obj.event_person_profile and event_person_obj.event_person_profile.id: + event_person_profile_id = event_person_obj.event_person_profile.id + elif event_person_obj.event_person_profile and event_person_obj.event_person_profile_id: + event_person_profile_id = event_person_obj.event_person_profile_id if event_person_id: if event_person_dict_up_result := sql_update(data=event_person_dict, table_name='event_person', rm_id_random=True): pass @@ -425,49 +438,54 @@ def create_update_event_person_obj_v4( event_person_outline = {} event_person_outline['event_person_id'] = event_person_id - # NOTE: WARNING: This has not been fully tested yet. 2021-08-25 - # NOTE: Use object model version because of better type checking and validations - # if event_person_obj.event_badge: - # event_person_outline['event_badge_id'] = None - # event_badge_obj = event_person_obj.event_badge - # if event_badge_id := event_person_obj.event_badge_id: pass - # elif event_badge_id := event_badge_obj.id: pass - # else: event_badge_id = None - # # event_badge_obj.id - # event_badge_obj.event_person_id = event_person_id - # create_update_event_badge_obj_result = create_update_event_badge_obj_v4( - # event_badge_dict_obj = event_badge_obj, - # event_badge_id = event_badge_id, - # # account_id = account_id, - # event_id = event_id, - # event_person_id = event_person_id, - # fail_any = fail_any, - # return_outline = return_outline, - # ) - # if isinstance(create_update_event_badge_obj_result, int): - # event_badge_id = create_update_event_badge_obj_result - # elif create_update_event_badge_obj_result == True: pass - # else: - # log.warning(f'Create or Update failed while trying create_update_event_badge_obj_v4(): {create_update_event_badge_obj_result}') - # event_badge_id = None + # Updated 2022-02-23 + if event_person_obj.event_badge: + if event_badge_id: new_record = False + else: new_record = True + event_person_outline['event_badge_id'] = None + event_badge_obj = event_person_obj.event_badge + event_badge_obj.event_person_id = event_person_id + create_update_event_badge_obj_result = create_update_event_badge_obj_v4( + event_badge_dict_obj = event_badge_obj, + event_badge_id = event_badge_id, + # account_id = account_id, + # event_id = event_id, + event_person_id = event_person_id, + fail_any = fail_any, + return_outline = return_outline, + ) + if isinstance(create_update_event_badge_obj_result, int): + event_badge_id = create_update_event_badge_obj_result + elif create_update_event_badge_obj_result == True: pass + else: + log.warning(f'Create or Update failed while trying create_update_event_badge_obj_v4(): {create_update_event_badge_obj_result}') + event_badge_id = None - # event_person_outline['event_badge_id'] = event_badge_id + # NOTE: Because this is a new record and this is a 1 to 1 link, we need to update the event_person record with the new event_person_profile_id. + if new_record: + event_person_data = {} + event_person_data['event_badge_id'] = event_badge_id + if event_person_data_up_result := sql_update(data=event_person_data, table_name='event_person', record_id=event_person_id): pass + else: + log.warning(f'Event Person not updated with new Event Badge ID. Event Person ID: {event_person_id}; Event Badge ID: {event_badge_id}') + log.debug(event_person_data_up_result) + return False + log.debug(event_person_data_up_result) - # NOTE: WARNING: This has not been fully tested yet. 2021-09-07 - # NOTE: Use object model version because of better type checking and validations + event_person_outline['event_badge_id'] = event_badge_id + + # Updated 2022-02-23 if event_person_obj.event_person_profile: + if event_person_profile_id: new_record = False + else: new_record = True event_person_outline['event_person_profile_id'] = None event_person_profile_obj = event_person_obj.event_person_profile - if event_person_profile_id := event_person_obj.event_person_profile_id: pass - elif event_person_profile_id := event_person_profile_obj.id: pass - else: event_person_profile_id = None - # event_person_profile_obj.id event_person_profile_obj.event_person_id = event_person_id create_update_event_person_profile_obj_result = create_update_event_person_profile_obj_v4( event_person_profile_dict_obj = event_person_profile_obj, event_person_profile_id = event_person_profile_id, - account_id = account_id, - event_id = event_id, + # account_id = account_id, + # event_id = event_id, event_person_id = event_person_id, fail_any = fail_any, return_outline = return_outline, @@ -479,6 +497,17 @@ def create_update_event_person_obj_v4( log.warning(f'Create or Update failed while trying create_update_event_person_profile_obj_v4(): {create_update_event_person_profile_obj_result}') event_person_profile_id = None + # NOTE: Because this is a new record and this is a 1 to 1 link, we need to update the event_person record with the new event_person_profile_id. + if new_record: + event_person_data = {} + event_person_data['event_person_profile_id'] = event_person_profile_id + if event_person_data_up_result := sql_update(data=event_person_data, table_name='event_person', record_id=event_person_id): pass + else: + log.warning(f'Event Person not updated with new Event Person Profile ID. Event Person ID: {event_person_id}; Event Person Profile ID: {event_person_profile_id}') + log.debug(event_person_data_up_result) + return False + log.debug(event_person_data_up_result) + event_person_outline['event_person_profile_id'] = event_person_profile_id if return_outline: diff --git a/app/methods/event_person_profile_methods.py b/app/methods/event_person_profile_methods.py index 7585319..ccf8f44 100644 --- a/app/methods/event_person_profile_methods.py +++ b/app/methods/event_person_profile_methods.py @@ -94,13 +94,12 @@ def get_event_person_id_w_event_person_profile_id( # ### BEGIN ### API Event Person Profile Methods ### create_update_event_person_profile_obj_v4() ### -# NOTE: This will create or update a event_person_profile. -# Rewrite and updated 2021-09-07 +# Updated 2022-02-23 def create_update_event_person_profile_obj_v4( event_person_profile_dict_obj: Event_Person_Profile_Base|dict, event_person_profile_id: int|str = None, - account_id: int|str = None, - event_id: int|str = None, + # account_id: int|str = None, + # event_id: int|str = None, event_person_id: int|str = None, create_sub_obj: bool = False, fail_any: bool = False, # Fail if any thing goes wrong for sub objects @@ -109,12 +108,8 @@ def create_update_event_person_profile_obj_v4( log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) + # ### SECTION ### Secondary data validation log.info('Checking requirements...') - if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass - else: - log.error('Missing or invalid Account ID passed. Not required. Ignoring for now.') - log.info(f'Account ID: {account_id}') - if event_person_profile_id: log.info(f'Event Person Profile ID passed. Update existing Event Person Profile. Event Person Profile ID: {event_person_profile_id}') @@ -131,6 +126,7 @@ def create_update_event_person_profile_obj_v4( log.info(f'Event Person ID: {event_person_id}') return False + log.info('Create dictionary or Pydantic object') log.debug(type(event_person_profile_dict_obj)) if isinstance(event_person_profile_dict_obj, dict): event_person_profile_dict = event_person_profile_dict_obj @@ -138,8 +134,6 @@ def create_update_event_person_profile_obj_v4( event_person_profile_dict['event_person_profile_id'] = event_person_profile_id try: event_person_profile_obj = Event_Person_Profile_Base(**event_person_profile_dict) - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(event_person_profile_obj) except ValidationError as e: log.error(e.json()) return False @@ -148,8 +142,16 @@ def create_update_event_person_profile_obj_v4( if event_person_profile_id: # NOTE: Can't update the ID alias if it was never set. event_person_profile_obj.id = event_person_profile_id + log.debug(event_person_profile_obj) - event_person_profile_dict = event_person_profile_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'account_id', 'account_id_random', 'contact', 'event_cfg', 'event_id', 'event_id_random', 'organization', 'created_on', 'updated_on'}) + event_person_profile_dict = event_person_profile_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'account_id', 'account_id_random', 'contact', 'event_cfg', 'event_id', 'event_id_random', 'event_person_id', 'event_person_id_random', 'organization', 'created_on', 'updated_on'}) + + # ### SECTION ### Process data + contact_id = None + if event_person_profile_obj.contact and event_person_profile_obj.contact.id: + contact_id = event_person_profile_obj.contact.id + elif event_person_profile_obj.contact and event_person_profile_obj.contact_id: + contact_id = event_person_profile_obj.contact_id if event_person_profile_id: if event_person_profile_dict_up_result := sql_update(data=event_person_profile_dict, table_name='event_person_profile', rm_id_random=True): pass @@ -169,13 +171,14 @@ def create_update_event_person_profile_obj_v4( event_person_profile_id = event_person_profile_dict_in_result # NOTE: This is really only needed if a new contact is being created - if not account_id: - log.info('Attempting to get Account ID from related object.') - if account_id := event_person_profile_obj.account_id: pass - elif account_id := event_person_profile_obj.account_id_random: pass - elif event_person_id: pass + + log.info('Attempting to get Account ID from related object.') + if account_id := event_person_profile_obj.account_id: pass + # elif account_id := event_person_profile_obj.account_id_random: pass + else: + if event_person_id: pass elif event_person_id := event_person_profile_obj.event_person_id: pass - elif event_person_id := event_person_profile_obj.event_person_id_random: pass + # elif event_person_id := event_person_profile_obj.event_person_id_random: pass if event_person_id: if account_id := get_account_id_w_for_type_id(for_type='event_person', for_id=event_person_id): pass @@ -190,10 +193,6 @@ def create_update_event_person_profile_obj_v4( if event_person_profile_obj.contact: event_person_profile_outline['contact_id'] = None contact_obj = event_person_profile_obj.contact - if contact_id := event_person_profile_obj.contact_id: pass - elif contact_id := contact_obj.id: pass - else: contact_id = None - contact_obj.id contact_obj.for_type = 'event_person_profile' contact_obj.for_id = event_person_profile_id create_update_contact_obj_result = create_update_contact_obj_v4( diff --git a/app/models/event_badge_models.py b/app/models/event_badge_models.py index 8b2860a..774fc73 100644 --- a/app/models/event_badge_models.py +++ b/app/models/event_badge_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 @@ -37,6 +36,8 @@ class Event_Badge_Base(BaseModel): person_id_random: Optional[str] person_id: Optional[int] + external_id: Optional[str] + pronouns: Optional[str] # Preferred pronouns informal_name: Optional[str] @@ -119,44 +120,33 @@ class Event_Badge_Base(BaseModel): @validator('id', always=True) def event_badge_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_badge') + 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_badge') 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('person_id', always=True) def person_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['person_id_random']: - return redis_lookup_id_random(record_id_random=values['person_id_random'], table_name='person') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('person_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='person') return None class Config: underscore_attrs_are_private = True allow_population_by_field_name = True fields = base_fields - -Event_Badge_Base.update_forward_refs() diff --git a/app/models/event_badge_template_models.py b/app/models/event_badge_template_models.py index dc4eec7..90c58a3 100644 --- a/app/models/event_badge_template_models.py +++ b/app/models/event_badge_template_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 @@ -81,21 +80,16 @@ class Event_Badge_Template_Base(BaseModel): @validator('id', always=True) def event_badge_template_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_badge_template') + 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_badge_template') 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 class Config: diff --git a/app/models/event_person_models.py b/app/models/event_person_models.py index 3416ad8..99c3645 100644 --- a/app/models/event_person_models.py +++ b/app/models/event_person_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 @@ -56,6 +55,8 @@ class Event_Person_Base(BaseModel): user_id_random: Optional[str] user_id: Optional[int] + external_id: Optional[str] + file_count: Optional[int] priority: Optional[bool] @@ -121,102 +122,78 @@ class Event_Person_Base(BaseModel): #@validator('event_person_id_random', always=True) def event_person_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_person_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_person') + 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_person') 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_badge_id', always=True) def event_badge_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['event_badge_id_random']: - return redis_lookup_id_random(record_id_random=values['event_badge_id_random'], table_name='event_badge') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('event_badge_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event_badge') return None @validator('event_badge_vendor_id', always=True) def event_badge_vendor_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['event_badge_vendor_id_random']: - return redis_lookup_id_random(record_id_random=values['event_badge_vendor_id_random'], table_name='event_badge') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('event_badge_vendor_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event_badge') return None @validator('event_badge_vip_id', always=True) def event_badge_vip_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['event_badge_vip_id_random']: - return redis_lookup_id_random(record_id_random=values['event_badge_vip_id_random'], table_name='event_badge') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('event_badge_vip_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event_badge') return None @validator('event_person_profile_id', always=True) def event_person_profile_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['event_person_profile_id_random']: - return redis_lookup_id_random(record_id_random=values['event_person_profile_id_random'], table_name='event_person_profile') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('event_person_profile_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event_person_profile') return None @validator('event_registration_id', always=True) def event_registration_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['event_registration_id_random']: - return redis_lookup_id_random(record_id_random=values['event_registration_id_random'], table_name='event_registration') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('event_registration_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='event_registration') return None @validator('person_id', always=True) def person_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['person_id_random']: - return redis_lookup_id_random(record_id_random=values['person_id_random'], table_name='person') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('person_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='person') return None @validator('user_id', always=True) def user_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['user_id_random']: - return redis_lookup_id_random(record_id_random=values['user_id_random'], table_name='user') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('user_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='user') return None class Config: @@ -263,50 +240,31 @@ class Event_Person_New_Base(BaseModel): #@validator('event_person_id_random', always=True) def event_person_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_person_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_person') + 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_person') 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('password', always=True) - # def hash_new_password(cls, v, values, **kwargs): - # log.setLevel(logging.WARNING) - # log.debug(locals()) - - # if values['new_password']: - # return secure_hash_string(string=values['new_password']) - # return None - class Config: underscore_attrs_are_private = True allow_population_by_field_name = True diff --git a/app/models/event_person_profile_models.py b/app/models/event_person_profile_models.py index 5e97709..fb0c77d 100644 --- a/app/models/event_person_profile_models.py +++ b/app/models/event_person_profile_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 @@ -14,7 +13,7 @@ from app.models.organization_models import Organization_Base class Event_Person_Profile_Base(BaseModel): - log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) id_random: Optional[str] = Field( @@ -112,48 +111,36 @@ class Event_Person_Profile_Base(BaseModel): #@validator('event_person_profile_id_random', always=True) def event_person_profile_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_person_profile_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_person_profile') + 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_person_profile') 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('contact_id', always=True) def contact_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['contact_id_random']: - return redis_lookup_id_random(record_id_random=values['contact_id_random'], table_name='contact') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('contact_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='contact') return None @validator('organization_id', always=True) def organization_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['organization_id_random']: - return redis_lookup_id_random(record_id_random=values['organization_id_random'], table_name='organization') + if isinstance(v, int) and v > 0: return v + elif id_random := values.get('organization_id_random'): + return redis_lookup_id_random(record_id_random=id_random, table_name='organization') return None @validator('thumbnail_hosted_file_id', always=True) diff --git a/app/models/response_models.py b/app/models/response_models.py index 6a596cc..4d9ca3d 100644 --- a/app/models/response_models.py +++ b/app/models/response_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 @@ -56,6 +55,12 @@ def mk_resp( elif isinstance(data, list): log.info('Data type is a list') data_out = data + elif isinstance(data, int): + log.info('Data type is an int') + data_out = { 'result': data } + elif isinstance(data, str): + log.info('Data type is a str') + data_out = { 'result': data } else: # Assuming it is still and object. This should be improved. Example model type: "" log.info('Data type is other') data_out = data.dict(by_alias=by_alias, exclude_unset=exclude_unset) diff --git a/app/routers/e_impexium.py b/app/routers/e_impexium.py index a57cf74..6889cc4 100644 --- a/app/routers/e_impexium.py +++ b/app/routers/e_impexium.py @@ -12,6 +12,8 @@ from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_ from app.methods.e_impexium_methods import get_custom_fields, get_events, get_event_registrants +from app.methods.event_person_methods import create_event_person_obj, create_update_event_person_obj_v4, get_event_person_rec_list, load_event_person_obj, update_event_person_obj, update_event_person_obj_v3 + from app.models.event_badge_models import Event_Badge_Base from app.models.response_models import Resp_Body_Base, mk_resp @@ -23,94 +25,147 @@ router = APIRouter() # Updated 2021-10-07 @router.get('/event/{e_impexium_event_id}/import_reg', response_model=Resp_Body_Base) async def event_import_reg( - e_impexium_event_id: str = Query(..., min_length=11, max_length=22), # For ISHLT: 41V_2 (2021-04) - page: int = 1, # 250 per page from Impexium + e_impexium_event_id: str = Query(..., min_length=11, max_length=22), # For ISHLT: 42_AM (2022-04); EX22_AM (2022-04); 41V_2 (2021-04) + page: int = 0, # 250 per page from Impexium event_id: str = Query(..., min_length=11, max_length=22), # For ISHLT: ZDzTBlevhZs (2022-04) - x_account_id: str = Header(...), # For ISHLT: d8TqXqf1EOg - response: Response = Response, + # Account ID For ISHLT: d8TqXqf1EOg + commons: Common_Route_Params = Depends(common_route_params), ): - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) log.info('Starting Impexium event registration import...') - if account_id := redis_lookup_id_random(record_id_random=x_account_id, table_name='account'): pass - else: return mk_resp(data=None, status_code=404, status_message=f'The Account ID was not found. Account ID: {account_id}', response=response) + account_id = commons.x_account_id if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass - else: return mk_resp(data=None, status_code=404, status_message=f'The Event ID was not found. Event ID: {event_id}', response=response) + else: return mk_resp(data=None, status_code=404, status_message=f'The Event ID was not found. Event ID: {event_id}', response=commons.response) event_registrant_li = get_event_registrants(event_code=e_impexium_event_id, page=page) log.debug(type(event_registrant_li)) - event_badge_li = [] + # return mk_resp(data=len(event_registrant_li), status_code=501, response=commons.response) # Not Implemented + + loop_count = 0 + loop_limit = 2500 # 200 + event_person_li = [] for event_registrant in event_registrant_li: + if loop_count > loop_limit: break log.info(f"Record Num: {event_registrant.get('recordNumber')}, Registration Num: {event_registrant.get('registrationNumber')}, Registrant Type Code: {event_registrant.get('registrantTypeCode')}") log.debug(event_registrant) - event_badge_data = {} - # event_badge_data['account_id'] = account_id - event_badge_data['event_id'] = event_id # Creating an external ID from the Impexium record number and registration number. Very explicitly converting each number to a string before joining, just in case. external_id = str(event_registrant.get('recordNumber'))+':'+str(event_registrant.get('registrationNumber')) + + event_person_data = {} + event_person_data['account_id'] = account_id + event_person_data['event_id'] = event_id + event_person_data['external_id'] = external_id + + event_person_profile_data = {} + event_person_profile_data['pronouns'] = event_registrant.get('gender') + event_person_profile_data['informal_name'] = event_registrant.get('preferredFirstName') + + event_person_profile_data['title_names'] = event_registrant.get('prefix') + event_person_profile_data['given_name'] = event_registrant.get('firstName') + event_person_profile_data['middle_name'] = event_registrant.get('middleName') + event_person_profile_data['family_name'] = event_registrant.get('lastName') + event_person_profile_data['designations'] = event_registrant.get('suffix') + + event_person_profile_data['professional_title'] = event_registrant.get('title') + + event_person_profile_data['display_name'] = event_registrant.get('badgeName') + + event_person_profile_data['affiliations'] = event_registrant.get('badgeOrganization') + + event_person_data['event_person_profile'] = {} + event_person_data['event_person_profile'] = event_person_profile_data + + event_badge_data = {} + event_badge_data['event_id'] = event_id event_badge_data['external_id'] = external_id - sql_select_event_badge = f""" - SELECT id AS event_badge_id, id_random AS event_badge_id_random, external_id AS event_badge_external_id - FROM `event_badge` AS `event_badge` - WHERE event_badge.event_id = :event_id - AND event_badge.external_id = :external_id + event_badge_data['badge_type_code'] = event_registrant.get('registrantTypeCode') # Using this as the badge_type + event_badge_data['badge_type'] = event_registrant.get('registrantTypeName') + event_badge_data['member_type_code'] = event_registrant.get('customerType') # Using this as the member_type + event_badge_data['registration_type_code'] = event_registrant.get('registrantTypeCode') + event_badge_data['registration_type'] = event_registrant.get('registrantTypeName') + + event_badge_data['pronouns'] = event_registrant.get('gender') + event_badge_data['informal_name'] = event_registrant.get('preferredFirstName') + + event_badge_data['title_names'] = event_registrant.get('prefix') + event_badge_data['given_name'] = event_registrant.get('firstName') + event_badge_data['middle_name'] = event_registrant.get('middleName') + event_badge_data['family_name'] = event_registrant.get('lastName') + event_badge_data['designations'] = event_registrant.get('suffix') + + event_badge_data['professional_title'] = event_registrant.get('title') + + event_badge_data['display_name'] = event_registrant.get('badgeName') + + event_badge_data['affiliations'] = event_registrant.get('badgeOrganization') + + event_badge_data['city'] = event_registrant.get('badgeCity') + event_badge_data['state_province'] = event_registrant.get('badgeState') + + event_person_data['event_badge'] = {} + event_person_data['event_badge'] = event_badge_data + + sql_select_event_person = f""" + SELECT id AS event_person_id, id_random AS event_person_id_random, external_id AS event_person_external_id, event_badge_id AS event_badge_id, event_person_profile_id AS event_person_profile_id + FROM `event_person` AS `event_person` + WHERE event_person.event_id = :event_id + AND event_person.external_id = :external_id /*LIMIT 1*/; """ - if event_badge_result := sql_select(sql=sql_select_event_badge, data=event_badge_data): - log.info('Found Event Badge') - if isinstance(event_badge_result, list): - log.error(f'Found more than one Event Badge with the same External ID. Count: {len(event_badge_result)}') + if event_person_result := sql_select(sql=sql_select_event_person, data=event_person_data): + if isinstance(event_person_result, list): + log.error(f'Found more than one Event Person with the same External ID. Count: {len(event_person_result)}') break - return False + # return False else: - log.info('Update record?') + event_person_id = event_person_result.get('event_person_id') + event_badge_id = event_person_result.get('event_badge_id') + event_person_profile_id = event_person_result.get('event_person_profile_id') + log.info(f'Found Event Person. Updating existing... Event Person ID: {event_person_id}') + if create_event_person_obj_result := create_update_event_person_obj_v4( + event_person_dict_obj = event_person_data, + event_person_id = event_person_id, + account_id = account_id, + event_id = event_id, + event_badge_id = event_badge_id, + event_person_profile_id = event_person_profile_id, + # create_sub_obj = create_sub_obj, + # fail_any = fail_any, + # return_outline = False, + ): + event_person_id = create_event_person_obj_result + log.warning(f'Event Person updated. Event Person ID: {event_person_id}') + else: + log.warning(f'Event Person not updated. Event Person ID: {event_person_id}') + log.debug(event_badge_obj_in_result) + break + # return False else: - log.info('No Event Badge found') - log.info('Insert record') + log.info('No Event Person found. Creating new...') - event_badge_data['badge_type_code'] = event_registrant.get('registrantTypeCode') # Using this as the badge_type - event_badge_data['badge_type'] = event_registrant.get('registrantTypeName') - event_badge_data['member_type_code'] = event_registrant.get('customerType') # Using this as the member_type - event_badge_data['registration_type_code'] = event_registrant.get('registrantTypeCode') - event_badge_data['registration_type'] = event_registrant.get('registrantTypeName') - - event_badge_data['pronouns'] = event_registrant.get('gender') - - event_badge_data['informal_name'] = event_registrant.get('preferredFirstName') - event_badge_data['title_names'] = event_registrant.get('prefix') - event_badge_data['given_name'] = event_registrant.get('firstName') - event_badge_data['middle_name'] = event_registrant.get('middleName') - event_badge_data['family_name'] = event_registrant.get('lastName') - - event_badge_data['designations'] = event_registrant.get('suffix') - - event_badge_data['professional_title'] = event_registrant.get('title') - - event_badge_data['display_name'] = event_registrant.get('badgeName') - - event_badge_data['affiliations'] = event_registrant.get('badgeOrganization') - - event_badge_data['city'] = event_registrant.get('badgeCity') - event_badge_data['state_province'] = event_registrant.get('badgeState') - - if event_badge_obj_in_result := sql_insert(data=event_badge_data, table_name='event_badge', rm_id_random=True, id_random_length=8): - event_badge_id = event_badge_obj_in_result - # event_badge_id = event_badge_obj.get('id') # event_badge_id_random - log.info('Event Badge added. Event Badge ID: {event_badge_id}') - event_badge_data['event_badge_id'] = event_badge_id + if create_event_person_obj_result := create_update_event_person_obj_v4( + event_person_dict_obj = event_person_data, + account_id = account_id, + event_id = event_id, + # create_sub_obj = create_sub_obj, + # fail_any = fail_any, + # return_outline = False, + ): + event_person_id = create_event_person_obj_result + log.warning(f'Event Person created. Event Person ID: {event_person_id}') else: - log.warning(f'Event Badge not created.') + log.warning(f'Event Person not created.') log.debug(event_badge_obj_in_result) break - return False - + # return False # event_badge_data = {} # external_id = event_registrant.get('recordNumber')+':'+event_registrant.get('registrationNumber') @@ -144,7 +199,8 @@ async def event_import_reg( # id, attendedDate, sessions, itemizedCustomFields, guestOfRecordNumber, registrantTypeName, boughtTogetherWith, primaryOrganization, customerType, showInDirectory, addresses, emails, phones - event_badge_li.append(event_badge_data) + event_person_li.append(event_person_data) + loop_count = loop_count + 1 - return mk_resp(data=event_badge_li, response=response) + return mk_resp(data=event_person_li, response=commons.response) # ### END ### API Impexium ### event_import_reg() ### \ No newline at end of file