diff --git a/app/methods/event_person_methods.py b/app/methods/event_person_methods.py index 7047153..76f82b5 100644 --- a/app/methods/event_person_methods.py +++ b/app/methods/event_person_methods.py @@ -13,13 +13,14 @@ from app.methods.event_badge_methods import load_event_badge_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_presentation_methods import load_event_presentation_obj -# from app.methods.event_presenter_methods import load_event_presenter_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 # from app.methods.event_session_methods import load_event_session_obj # from app.methods.event_track_methods import load_event_track_obj from app.methods.person_methods import create_person_obj_v3, load_person_obj, update_person_obj from app.methods.user_methods import create_user_obj, load_user_obj, update_user_obj +from app.models.common_field_schema import default_num_bytes from app.models.event_person_models import Event_Person_New_Base, Event_Person_Base @@ -108,7 +109,39 @@ def load_event_person_obj( event_person_obj.event_person_profile = None if inc_event_presentation_list: pass - if inc_event_presenter_list: pass + + if inc_event_presenter_list: + log.info('Need to include event presenter list...') + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + from app.methods.event_presenter_methods import get_event_presenter_rec_list, load_event_presenter_obj + if event_presenter_rec_list_result := get_event_presenter_rec_list( + event_person_id = event_person_id, + # event_presentation_id = event_presentation_id, + enabled = enabled, + limit = limit, + ): + event_presenter_result_list = [] + for event_presenter_rec in event_presenter_rec_list_result: + if load_event_presenter_result := load_event_presenter_obj( + event_presenter_id = event_presenter_rec.get('event_presenter_id', None), + enabled = enabled, + limit = limit, + inc_event_file_list = inc_event_file_list, + inc_event_person = False, + by_alias = by_alias, + exclude_unset = exclude_unset, + # model_as_dict = model_as_dict, + ): + event_presenter_result_list.append(load_event_presenter_result) + else: + event_presenter_result_list.append(None) + log.debug(event_presenter_result_list) + event_person_obj.event_presenter_list = event_presenter_result_list + elif isinstance(event_presenter_rec_list_result, list): + event_person_obj.event_presenter_list = [] + else: + event_person_obj.event_presenter_list = None + if inc_event_registration: pass if inc_event_session_list: pass if inc_event_track_list: pass @@ -270,9 +303,9 @@ def get_event_id_w_event_person_id( # Rewrite and updated 2021-08-25 def create_update_event_person_obj_v4( event_person_dict_obj: Event_Person_Base|dict, - event_person_id: int|str = None, - account_id: int|str = None, - event_id: int|str = None, + event_person_id: int|str|None = None, + account_id: int|str|None = None, + event_id: int|str|None = None, create_sub_obj: bool = False, fail_any: bool = False, # Fail if any thing goes wrong for sub objects return_outline: bool = False, @@ -299,7 +332,7 @@ def create_update_event_person_obj_v4( if event_id := get_event_id_w_for_type_id(for_type='event_person', for_id=event_person_id): pass else: log.error('Unable to get Event ID from related object.') - False + # return False if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass else: @@ -311,7 +344,7 @@ def create_update_event_person_obj_v4( elif account_id := get_account_id_w_for_type_id(for_type='event_person', for_id=event_person_id): pass else: log.error('Unable to get Account ID from related object.') - False + # return False else: log.info('No Event Person ID passed. Create new Event Person. Required: Account ID, Event ID') @@ -330,7 +363,7 @@ def create_update_event_person_obj_v4( if account_id := get_account_id_w_for_type_id(for_type='event', for_id=event_id): pass else: log.error('Unable to get Account ID from related object.') - False + return False log.debug(type(event_person_dict_obj)) if isinstance(event_person_dict_obj, dict): @@ -368,7 +401,7 @@ def create_update_event_person_obj_v4( return False log.debug(event_person_dict_up_result) else: - if event_person_dict_in_result := sql_insert(data=event_person_dict, table_name='event_person', rm_id_random=True, id_random_length=8): pass + if event_person_dict_in_result := sql_insert(data=event_person_dict, table_name='event_person', rm_id_random=True, id_random_length=default_num_bytes): pass else: log.warning(f'Event Person not created.') log.debug(event_person_dict_in_result) @@ -408,6 +441,34 @@ def create_update_event_person_obj_v4( # event_person_outline['event_badge_id'] = event_badge_id + # NOTE: WARNING: This has not been fully tested yet. 2021-09-07 + # NOTE: Use object model version because of better type checking and validations + if event_person_obj.event_person_profile: + 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, + event_person_id = event_person_id, + fail_any = fail_any, + return_outline = return_outline, + ) + if isinstance(create_update_event_person_profile_obj_result, int): + event_person_profile_id = create_update_event_person_profile_obj_result + elif create_update_event_person_profile_obj_result == True: pass + else: + 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 + + event_person_outline['event_person_profile_id'] = event_person_profile_id + if return_outline: log.debug(f'Returning the Event Person Outline: {event_person_outline}') return event_person_outline diff --git a/app/methods/event_person_profile_methods.py b/app/methods/event_person_profile_methods.py index 0a4c6e7..7585319 100644 --- a/app/methods/event_person_profile_methods.py +++ b/app/methods/event_person_profile_methods.py @@ -97,7 +97,7 @@ def get_event_person_id_w_event_person_profile_id( # NOTE: This will create or update a event_person_profile. # Rewrite and updated 2021-09-07 def create_update_event_person_profile_obj_v4( - event_person_profile_dict_obj: Event_Person_Profile|dict, + 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, @@ -137,7 +137,7 @@ def create_update_event_person_profile_obj_v4( if event_person_profile_id: event_person_profile_dict['event_person_profile_id'] = event_person_profile_id try: - event_person_profile_obj = Event_Person_Profile(**event_person_profile_dict) + 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: diff --git a/app/methods/event_presentation_methods.py b/app/methods/event_presentation_methods.py index 6b7f25f..b4449f1 100644 --- a/app/methods/event_presentation_methods.py +++ b/app/methods/event_presentation_methods.py @@ -32,6 +32,7 @@ def load_event_presentation_obj( inc_event_device_list: bool = False, inc_event_file_list: bool = False, inc_event_person: bool = False, + inc_event_person_profile: bool = False, inc_event_person_list: bool = False, inc_event_presenter_list: bool = False, inc_event_registration: bool = False, @@ -112,18 +113,19 @@ def load_event_presentation_obj( for event_presenter_obj in event_presenter_obj_li_result: event_presenter_id = event_presenter_obj.get('event_presenter_id', None) if event_presenter_obj := load_event_presenter_obj( - event_presenter_id=event_presenter_id, - enabled=enabled, - inc_address=inc_address, - inc_contact=inc_contact, - inc_event_abstract_list=inc_event_abstract_list, - inc_event_badge=inc_event_badge, - inc_event_device_list=inc_event_device_list, - inc_event_file_list=inc_event_file_list, - inc_event_person=inc_event_person, - inc_event_registration=inc_event_registration, - inc_person=inc_person, - inc_user=inc_user, + event_presenter_id = event_presenter_id, + enabled = enabled, + inc_address = inc_address, + inc_contact = inc_contact, + inc_event_abstract_list = inc_event_abstract_list, + inc_event_badge = inc_event_badge, + inc_event_device_list = inc_event_device_list, + inc_event_file_list = inc_event_file_list, + inc_event_person = inc_event_person, + inc_event_person_profile = inc_event_person_profile, + inc_event_registration = inc_event_registration, + inc_person = inc_person, + inc_user = inc_user, ): data = event_presenter_obj.dict(by_alias=True, exclude_unset=True) event_presenter_obj_li.append(data) diff --git a/app/methods/event_presenter_methods.py b/app/methods/event_presenter_methods.py index 1ae135e..f697018 100644 --- a/app/methods/event_presenter_methods.py +++ b/app/methods/event_presenter_methods.py @@ -20,6 +20,9 @@ def load_event_presenter_obj( event_presenter_id: int|str, enabled: str = 'enabled', # enabled, disabled, all limit: int = 1000, + by_alias: bool = True, + exclude_unset: bool = True, + model_as_dict: bool = False, inc_address: bool = False, inc_contact: bool = False, inc_event_abstract_list: bool = False, # For event_presenter and using load_event_person_obj @@ -27,6 +30,7 @@ def load_event_presenter_obj( inc_event_device_list: bool = False, # For event_presenter and using load_event_person_obj inc_event_file_list: bool = False, # For event_presenter and using load_event_person_obj inc_event_person: bool = False, # Using load_event_person_obj + inc_event_person_profile: bool = False, # Using load_event_person_obj # inc_event_presentation: bool = False, inc_event_registration: bool = False, # Using load_event_person_obj # inc_event_session: bool = False, @@ -39,76 +43,148 @@ def load_event_presenter_obj( if event_presenter_id := redis_lookup_id_random(record_id_random=event_presenter_id, table_name='event_presenter'): pass else: return False - if event_presenter_rec := sql_select(table_name='v_event_presenter', record_id=event_presenter_id): - log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(event_presenter_rec) + if event_presenter_rec := sql_select(table_name='v_event_presenter', record_id=event_presenter_id): pass + else: return False - try: - event_presenter_obj = Event_Presenter_Base(**event_presenter_rec) - log.debug(event_presenter_obj) - except ValidationError as e: - log.error(e.json()) - return False + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_presenter_rec) - # event_presenter_obj = Event_Presenter_Base(**event_presenter_rec) - # log.debug(event_presenter_obj) - - #account_id = event_presenter_rec.get('account_id', None) - event_id = event_presenter_rec.get('event_id', None) - event_abstract_id = event_presenter_rec.get('event_abstract_id', None) - event_person_id = event_presenter_rec.get('event_person_id', None) - event_presentation_id = event_presenter_rec.get('event_presentation_id', None) - event_session_id = event_presenter_rec.get('event_session_id', None) - person_id = event_presenter_rec.get('person_id', None) - user_id = event_presenter_rec.get('user_id', None) - - # if inc_event: pass - if inc_event_abstract_list: pass - if inc_event_device_list: pass - if inc_event_file_list: pass - - if inc_event_person: - log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - - if event_person_obj := load_event_person_obj( - event_person_id=event_person_id, - enabled=enabled, - inc_address=inc_address, - inc_contact=inc_contact, - inc_event_badge=inc_event_badge, - inc_event_registration=inc_event_registration, - inc_person=inc_person, - inc_user=inc_user, - ): - log.debug(event_person_obj) - event_presenter_obj.event_person = event_person_obj - else: - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(event_person_obj) - event_presenter_obj.event_person = None - log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - - # if inc_person: - # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - - # if person_obj := load_person_obj( - # person_id=person_id, - # enabled=enabled - # ): - # log.debug(person_obj) - # presenter_obj.person = person_obj - # else: - # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - # log.debug(person_obj) - # log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - # if inc_user: pass - else: + try: + log.info('Try to apply event presenter record data to Event_Presenter_Base...') + event_presenter_obj = Event_Presenter_Base(**event_presenter_rec) + log.debug(event_presenter_obj) + except ValidationError as e: + log.error(e.json()) return False - return event_presenter_obj + # event_presenter_obj = Event_Presenter_Base(**event_presenter_rec) + # log.debug(event_presenter_obj) + + # account_id = event_presenter_rec.get('account_id', None) + event_id = event_presenter_rec.get('event_id', None) + event_abstract_id = event_presenter_rec.get('event_abstract_id', None) + event_person_id = event_presenter_rec.get('event_person_id', None) + event_presentation_id = event_presenter_rec.get('event_presentation_id', None) + event_session_id = event_presenter_rec.get('event_session_id', None) + person_id = event_presenter_rec.get('person_id', None) + user_id = event_presenter_rec.get('user_id', None) + + # if inc_event: pass + if inc_event_abstract_list: pass + if inc_event_device_list: pass + if inc_event_file_list: pass + + if inc_event_person: + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + + if event_person_obj := load_event_person_obj( + event_person_id = event_person_id, + enabled = enabled, + inc_address = inc_address, + inc_contact = inc_contact, + inc_event_badge = inc_event_badge, + inc_event_person_profile = inc_event_person_profile, + inc_event_registration = inc_event_registration, + inc_person = inc_person, + inc_user = inc_user, + ): + log.debug(event_person_obj) + event_presenter_obj.event_person = event_person_obj + else: + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_person_obj) + event_presenter_obj.event_person = None + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + + # if inc_person: + # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + + # if person_obj := load_person_obj( + # person_id=person_id, + # enabled=enabled + # ): + # log.debug(person_obj) + # presenter_obj.person = person_obj + # else: + # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + # log.debug(person_obj) + # log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + # if inc_user: pass + + if model_as_dict: + return event_presenter_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member + else: + return event_presenter_obj # ### END ### API Event Presenter Methods ### load_event_presenter_obj() ### +# ### BEGIN ### API Event Presenter Methods ### get_event_presenter_rec_list() ### +def get_event_presenter_rec_list( + event_person_id: str = None, + event_presentation_id: str = None, + enabled: str = 'enabled', # enabled, disabled, all + limit: int = 100, + ) -> list|bool: + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + if event_person_id := redis_lookup_id_random(record_id_random=event_person_id, table_name='event_person'): pass + else: return False + + data = {} + data[f'event_person_id'] = event_person_id + data[f'event_presentation_id'] = event_presentation_id + + if event_person_id: + sql_where_event_person_id = f'`event_presenter`.event_person_id = :event_person_id' + else: sql_where_event_person_id = '' + if event_presentation_id: + sql_where_event_presentation_id = f'`event_presenter`.event_presentation_id = :event_presentation_id' + else: sql_where_event_presentation_id = '' + + if enabled in ['enabled', 'disabled', 'all']: + if enabled == 'enabled': + data['enable'] = True + sql_enabled = f'AND `event_presenter`.enable = :enable' + elif enabled == 'disabled': + data['enable'] = False + sql_enabled = f'AND `event_presenter`.enable = :enable' + elif enabled == 'all': + sql_enabled = '' + + if limit: + data['limit'] = limit + sql_limit = f'LIMIT :limit' + else: + sql_limit = '' + + 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 + {sql_where_event_person_id} + {sql_where_event_presentation_id} + {sql_enabled} + ORDER BY `event_presenter`.created_on DESC, `event_presenter`.updated_on DESC + {sql_limit}; + """ + + if event_presenter_rec_li_result := sql_select(data=data, sql=sql, as_list=True): + + event_presenter_rec_li = event_presenter_rec_li_result + else: + event_presenter_rec_li = [] + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_presenter_rec_li_result) + log.debug(type(event_presenter_rec_li)) + log.debug(len(event_presenter_rec_li)) + + return event_presenter_rec_li +# ### END ### API Event Presenter Methods ### get_event_presenter_rec_list() ### + + + + # ### BEGIN ### API Event Presenter Methods ### get_event_session_id_w_event_presentation_id() ### # Updated 2021-08-23 def get_event_session_id_w_event_presentation_id( diff --git a/app/methods/event_registration_methods.py b/app/methods/event_registration_methods.py index 96e0d29..286870a 100644 --- a/app/methods/event_registration_methods.py +++ b/app/methods/event_registration_methods.py @@ -42,8 +42,6 @@ def load_event_registration_obj( if event_registration_rec := sql_select(table_name='v_event_registration', record_id=event_registration_id): pass else: return False - print('******************************** HERE') - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(event_registration_rec) diff --git a/app/methods/event_session_methods.py b/app/methods/event_session_methods.py index 2ae9234..276f52b 100644 --- a/app/methods/event_session_methods.py +++ b/app/methods/event_session_methods.py @@ -35,6 +35,7 @@ def load_event_session_obj( inc_event_file_list: bool = False, inc_event_location: bool = False, inc_event_person: bool = False, + inc_event_person_profile: bool = False, inc_event_person_list: bool = False, inc_event_presentation_list: bool = False, inc_event_presenter_cat: bool = False, # Concantinate presenter names @@ -101,7 +102,8 @@ def load_event_session_obj( if inc_event_person_list: pass if inc_event_presentation_list: - log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.info('Need to include event presentation list...') data = {} data['event_session_id'] = event_session_id @@ -139,18 +141,19 @@ def load_event_session_obj( for event_presentation_rec in event_presentation_rec_li_result: event_presentation_id = event_presentation_rec.get('event_presentation_id', None) if event_presentation_obj := load_event_presentation_obj( - event_presentation_id=event_presentation_id, - enabled=enabled, - inc_address=inc_address, - inc_contact=inc_contact, - inc_event_abstract_list=inc_event_abstract_list, - inc_event_device_list=inc_event_device_list, - inc_event_file_list=inc_event_file_list, - inc_event_person=inc_event_person, - inc_event_person_list=inc_event_person_list, - inc_event_presenter_list=inc_event_presenter_list, - inc_person=inc_person, - inc_user=inc_user + event_presentation_id = event_presentation_id, + enabled = enabled, + inc_address = inc_address, + inc_contact = inc_contact, + inc_event_abstract_list = inc_event_abstract_list, + inc_event_device_list = inc_event_device_list, + inc_event_file_list = inc_event_file_list, + inc_event_person = inc_event_person, + inc_event_person_profile = inc_event_person_profile, + inc_event_person_list = inc_event_person_list, + inc_event_presenter_list = inc_event_presenter_list, + inc_person = inc_person, + inc_user = inc_user ): data = event_presentation_obj.dict(by_alias=True, exclude_unset=True) event_presentation_obj_li.append(data) diff --git a/app/methods/person_methods.py b/app/methods/person_methods.py index d79817e..967d9a7 100644 --- a/app/methods/person_methods.py +++ b/app/methods/person_methods.py @@ -448,87 +448,6 @@ def create_person_obj_v3( person_outline['contact_id'] = contact_id - # NOTE: This is the older pre v4 version - # if person_obj_new.contact and isinstance(person_obj_new.contact, dict): - # log.info(f'Contact was found. Create a new Contact and link it to the new Person or update existing Contact. Person ID: {person_id}') - # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - # contact_obj_unknown = person_obj_new.contact - # log.debug(contact_obj_unknown) - # if contact_id := contact_obj_unknown.get('contact_id_random', None): - # log.warning('Contact ID found. This is not expected, but should be ok.') - # # from app.methods.contact_methods import update_contact_obj_v3 - # if update_contact_obj_result := update_contact_obj( - # contact_id = contact_id, - # contact_obj_up = contact_obj_unknown, - # create_sub_obj = create_sub_obj, - # fail_any = fail_any, - # ): - # contact_id = update_contact_obj_result - # log.info(f'Contact updated. Contact ID: {contact_id}') - # else: - # log.warning(f'Contact not updated. Person ID: {person_id}') - # log.debug(update_contact_obj_result) - # contact_id = None - # if fail_any: return False - - # if isinstance(update_contact_obj_result, int): - # contact_id = update_contact_obj_result - # log.info(f'Contact updated. Contact ID: {contact_id}') - # else: - # log.warning(f'Contact not updated. Person ID: {person_id}') - # log.debug(update_contact_obj_result) - # contact_id = None - # if fail_any: return False - # else: - # log.info(f'No Contact ID found.') - # # from app.methods.contact_methods import create_contact_obj - - # contact_obj_unknown = person_obj_new.contact - # contact_obj_unknown.for_type = 'person' - # contact_obj_unknown.for_id = person_id - - # if create_contact_obj_result := create_contact_obj( - # account_id = account_id, - # for_type = 'person', - # for_id = person_id, - # contact_obj_new = contact_obj_unknown, - # create_sub_obj = create_sub_obj, - # fail_any = fail_any, - # ): - # if isinstance(create_contact_obj_result, int): - # contact_id = create_contact_obj_result - # log.info(f'Contact created. Contact ID: {contact_id}') - # else: - # log.warning(f'Contact not created. Person ID: {person_id}') - # log.debug(create_contact_obj_result) - # contact_id = None - # if fail_any: return False - # else: - # log.warning(f'Contact not created. Person ID: {person_id}') - # log.debug(create_contact_obj_result) - # contact_id = None - # if fail_any: return False - # person_outline['contact_id'] = contact_id - # else: - # log.info('Contact not found or not in a dict.') - # pass - - # NOTE: This is the older pre v3 version - # if person_obj_new.contact: - # log.info(f'Contact was found. Create a new Contact and link it to the new Person or update existing Contact. Person ID: {person_id}') - # contact_obj_new = person_obj_new.contact - # contact_obj_new.for_type = 'person' - # contact_obj_new.for_id = person_id - # create_contact_obj_result = create_contact_obj(contact_obj_new=contact_obj_new) - # if isinstance(create_contact_obj_result, int): - # contact_id = create_contact_obj_result - # log.info(f'Contact created. Contact ID: {contact_id}') - # else: - # log.warning(f'Contact not created. Person ID: {person_id}') - # log.debug(create_contact_obj_result) - # contact_id = None - # if fail_any: return False - if person_obj_new.organization and isinstance(person_obj_new.organization, dict): log.info(f'Organization was found. Create a new Organization and link it to the new Person or update existing Organization. Person ID: {person_id}') log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL @@ -806,77 +725,6 @@ def update_person_obj_v3( person_outline['contact_id'] = contact_id - # NOTE: This is the older pre v3 version - # if person_obj_exist.contact: - # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - # contact_obj_unknown = person_obj_exist.contact - # log.debug(contact_obj_unknown) - # if isinstance(person_obj_exist.contact, dict): - # contact_id = contact_obj_unknown.get('contact_id_random', None) - # # try: - # # contact_obj_new = Contact_Base(**contact_obj_new) - # # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - # # log.debug(contact_obj_new) - # # except ValidationError as e: - # # log.error(e.json()) - # # return False - # else: - # contact_id = contact_obj_unknown.id - - # # if contact_id := contact_obj_unknown.get('contact_id_random', None): - # if contact_id: - # # from app.methods.contact_methods import update_contact_obj_v3 - # if update_contact_obj_result := update_contact_obj( - # contact_id = contact_id, - # contact_obj_up = contact_obj_unknown, - # create_sub_obj = create_sub_obj, - # fail_any = fail_any, - # ): - # contact_id = update_contact_obj_result - # log.info(f'Contact updated. Contact ID: {contact_id}') - # else: - # log.warning(f'Contact not updated. Person ID: {person_id}') - # log.debug(update_contact_obj_result) - # contact_id = None - # if fail_any: return False - - # if isinstance(update_contact_obj_result, int): - # contact_id = update_contact_obj_result - # log.info(f'Contact updated. Contact ID: {contact_id}') - # else: - # log.warning(f'Contact not updated. Person ID: {person_id}') - # log.debug(update_contact_obj_result) - # contact_id = None - # if fail_any: return False - # else: - # log.info(f'No Contact ID found.') - # # from app.methods.contact_methods import create_contact_obj_v3 - # if create_contact_obj_result := create_contact_obj( - # account_id = account_id, - # for_type = 'person', - # for_id = person_id, - # contact_obj_new = contact_obj_unknown, - # create_sub_obj = create_sub_obj, - # fail_any = fail_any, - # ): - # if isinstance(create_contact_obj_result, int): - # contact_id = create_contact_obj_result - # log.info(f'Contact created. Contact ID: {contact_id}') - # else: - # log.warning(f'Contact not created. Person ID: {person_id}') - # log.debug(create_contact_obj_result) - # contact_id = None - # if fail_any: return False - # else: - # log.warning(f'Contact not created. Person ID: {person_id}') - # log.debug(create_contact_obj_result) - # contact_id = None - # if fail_any: return False - # person_outline['contact_id'] = contact_id - # else: - # log.info('Contact not found or not in a dict.') - # pass - if person_obj_exist.organization and isinstance(person_obj_exist.organization, dict): log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL organization_obj_unknown = person_obj_exist.organization @@ -1158,6 +1006,264 @@ def update_person_obj( # ### END ### API Person Methods ### update_person_obj() ### +# ### BEGIN ### API Person Methods ### create_update_person_obj_v4b() ### +def create_update_person_obj_v4b( + account_id: int|str, + person_dict_obj: Person_Base, + person_id: int|str|None = None, + process_contact: bool = True, # For future v5 + process_organization: bool = True, # For future v5 + process_user: bool = True, # For future v5 + create_sub_obj: bool = True, # For future v5 + fail_any: bool = False, # Fail if any thing goes wrong for sub objects + return_outline: bool = False, # For future v5 + ) -> bool: + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + log.info('Checking requirements...') + if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): log.info(f'Account ID: {account_id}') + else: + log.error('Missing or invalid Account ID passed. Failed requirement.') + log.error(f'Account ID: {account_id}') + return False + + if person_id: + log.info(f'Person ID passed. Update existing Person below. Person ID: {person_id}') + + if person_id := redis_lookup_id_random(record_id_random=person_id, table_name='person'): pass + else: + log.error('Person ID passed but is invalid. Failed requirement.') + return False + # person_obj.id = person_id + else: + log.info('No Person ID passed. Create new Person below. Required: Account ID') + + log.debug(type(person_dict_obj)) + log.info('Create dictionary or Pydantic object variables...') + if isinstance(person_dict_obj, dict): + person_dict = person_dict_obj + person_dict['account_id'] = account_id + if person_id: + person_dict['person_id'] = person_id + try: + person_obj = Person_Base(**person_dict) + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(person_obj) + except ValidationError as e: + log.error(e.json()) + return False + else: + person_obj = person_dict_obj + person_obj.account_id = account_id + if person_id: + # NOTE: Can't update the ID alias if it was never set. + person_obj.id = person_id + + person_dict = person_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'contact', 'organization', 'user', 'created_on', 'updated_on'}) + + log.info(f'SQL INSERT or UPDATE record... Person ID: {person_id}') + if person_id: + if person_dict_up_result := sql_update(data=person_dict, table_name='person', rm_id_random=True): pass + else: + log.warning(f'Person not updated. Person ID: {person_id}') + log.debug(person_dict_up_result) + return False + log.debug(person_dict_up_result) + else: + if person_dict_in_result := sql_insert(data=person_dict, table_name='person', rm_id_random=True, id_random_length=default_num_bytes): pass + else: + log.warning(f'Person not created.') + log.debug(person_dict_in_result) + return False + log.debug(person_dict_in_result) + + person_id = person_dict_in_result + + person_outline = {} + person_outline['person_id'] = person_id + + # Updated 2021-09-08 + log.info(f'Check if processing Contact data...') + # NOTE: Use object model version because of better type checking and validations + if process_contact and person_obj.contact: + person_outline['contact_id'] = None + contact_obj = person_obj.contact + if contact_id := person_obj.contact_id : pass + elif contact_id := contact_obj.id: pass + else: contact_id = None + contact_obj.id + contact_obj.for_type = 'person' + contact_obj.for_id = person_id + create_update_contact_obj_result = create_update_contact_obj_v4( + account_id = account_id, + contact_dict_obj = contact_obj, + contact_id = contact_id, + for_type = 'person', + for_id = person_id, + # process_address = process_address, + # create_sub_obj = create_sub_obj, + fail_any = fail_any, + return_outline = return_outline, + ) + if isinstance(create_update_contact_obj_result, int): + contact_id = create_update_contact_obj_result + elif create_update_contact_obj_result == True: pass + else: + log.warning(f'Create or Update failed while trying create_update_contact_obj_v4(): {create_update_contact_obj_result}') + contact_id = None + + person_outline['contact_id'] = contact_id + + # Updated 2021-09-08 + log.info(f'Check if processing Organization data...') + if process_organization and person_obj.organization: + organization_obj = person_obj.organization + organization_id = person_obj.organization_id_random + organization_result = create_update_organization_obj( + organization_id = organization_id, + organization_obj = organization_obj, + process_contact = True, # Setting to True under the assumption that if there is organization information then there is probably a contact (and address). + ) + log.debug(organization_result) + if isinstance(organization_result, bool) and organization_result is True: + pass # Do not need to update person object. + elif isinstance(organization_result, bool) and organization_result is False: + pass # Do not need to update person object. + elif isinstance(organization_result, int): + person_obj.organization_id = organization_result + organization_id = organization_result + else: + log.warning('Something may have gone wrong while trying to create or update a organization.') + + log.info(f'Check if need to update the Person with the Organization ID... Update Person Obj: {update_person_obj} Organization ID: {organization_id}') + if update_person_obj and isinstance(organization_id, int): + log.info(f'Updating the Person with the new/current Organization ID. Organization ID: {organization_id}') + person_data_up = {} + person_data_up['id'] = person_id + person_data_up['organization_id'] = organization_id + if person_data_up_result := sql_update(data=person_data_up, table_name='person'): + log.info(f'Person updated with Organization ID. Person ID: {person_id} Organization ID: {organization_id}') + else: + log.error(f'Person not updated with current Organization ID. Person ID: {person_id} Organization ID: {organization_id}') + if fail_any: return False + log.debug(person_dict_up_result) + + person_outline['organization_id'] = organization_id + + # Updated 2021-09-08 + log.info(f'Check if processing User data... Process User: {process_user}') + if process_user and person_obj.user: + log.info(f'User data was found. Create a new User and link it to the new Person or update existing User. Person ID: {person_id}') + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + user_obj = person_obj.user + user_id = person_obj.user_id + update_person_obj = False + log.debug(user_obj) + if user_id: + log.warning('User ID found. This is not expected, but should be ok.') + # from app.methods.user_methods import update_user_obj_v3 + from app.methods.user_methods import update_user_obj + if update_user_obj_result := update_user_obj( + user_id = user_id, + user_obj_up = user_obj, + # create_sub_obj = create_sub_obj, + # fail_any = fail_any, + ): + log.info(f'User updated. User ID: {user_id}') + log.debug(update_user_obj_result) + + # NOTE: This should not be needed. Updating person just in case! + update_person_obj = True + else: + log.warning(f'User not updated. Person ID: {person_id}') + log.debug(update_user_obj_result) + user_id = None + if fail_any: return False + + # if isinstance(update_user_obj_result, int): + # user_id = update_user_obj_result + # log.info(f'User updated. User ID: {user_id}') + # # Need to update the person with the current user_id + # log.debug(person_dict_up_result) + # else: + # log.warning(f'User not updated. Person ID: {person_id}') + # log.debug(update_user_obj_result) + # user_id = None + # if fail_any: return False + else: + log.info(f'No User ID found.') + # from app.methods.user_methods import create_user_obj_v3 + from app.methods.user_methods import create_user_obj + if create_user_obj_result := create_user_obj( + account_id = account_id, + user_obj_new = user_obj, + # create_sub_obj = create_sub_obj, + # fail_any = fail_any, + ): + if isinstance(create_user_obj_result, int): + log.info(f'User created. User ID: {user_id}') + log.debug(update_user_obj_result) + user_id = create_user_obj_result + # Need to update the person with the new user_id + update_person_obj = True + else: + log.warning(f'User not created. Updated? Person ID: {person_id}') + log.debug(create_user_obj_result) + user_id = None + if fail_any: return False + else: + log.warning(f'User not created. Person ID: {person_id}') + log.debug(create_user_obj_result) + user_id = None + if fail_any: return False + + log.info(f'Check if need to update the Person with the User ID... Update Person Obj: {update_person_obj} User ID: {user_id}') + if update_person_obj and isinstance(user_id, int): + log.info(f'Updating the Person with the new/current User ID. User ID: {user_id}') + person_data_up = {} + person_data_up['id'] = person_id + person_data_up['user_id'] = user_id + if person_data_up_result := sql_update(data=person_data_up, table_name='person'): + log.info(f'Person updated with User ID. Person ID: {person_id} User ID: {user_id}') + else: + log.error(f'Person not updated with current User ID. Person ID: {person_id} User ID: {user_id}') + if fail_any: return False + log.debug(person_dict_up_result) + + person_outline['user_id'] = user_id + else: + log.info('User data not found.') + pass + + return person_id + + # Process person data + person_dict_up = person_obj.dict(by_alias=False, exclude_unset=True, exclude={'contact_id', 'contact_id_random', 'contact', 'organization', 'user'}) + # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(person_obj) + log.debug(person_dict_up) + + # Update record + person_up_result = sql_update( + data = person_dict_up, + table_name = 'person', + rm_id_random = True, + ) + log.debug(person_up_result) + if isinstance(person_up_result, bool) and person_up_result is True: + return person_id + elif isinstance(person_up_result, bool) and person_up_result is False: + return False + elif isinstance(person_up_result, int): + return person_up_result + else: + return False +# ### END ### API Person Methods ### create_update_person_obj_v4b() ### + + + + # ### BEGIN ### API Person Methods ### create_update_person_obj() ### def create_update_person_obj( person_id: int|str|None, # Ideally the int ID should be passed. This allows for updating of the id_random value. @@ -1169,11 +1275,15 @@ def create_update_person_obj( log.debug(locals()) if person_id: + log.info(f'Person ID passed. Update existing Person. Person ID: {person_id}') + if person_id := redis_lookup_id_random(record_id_random=person_id, table_name='person'): pass else: return False person_obj.id = person_id else: # Insert record now and update later + log.info('No Person ID passed. Create new Person. Required: Account ID') + person_dict_in = person_obj.dict(by_alias=False, exclude_unset=True, exclude={'contact_id', 'contact_id_random', 'contact', 'organization', 'user'}) log.debug(person_dict_in) person_in_result = sql_insert( diff --git a/app/methods/user_methods.py b/app/methods/user_methods.py index 698606e..b37c9f4 100644 --- a/app/methods/user_methods.py +++ b/app/methods/user_methods.py @@ -126,7 +126,7 @@ def update_user_obj( create_sub_obj: bool = False, fail_any: bool = True, # Fail if any thing goes wrong for sub objects return_dict: bool = False, - ) -> bool: + ) -> bool|int: log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) @@ -231,6 +231,7 @@ def update_user_obj( if user_obj_up_result := sql_update(data=user_dict_up, table_name='user', rm_id_random=True): log.debug(user_obj_up_result) return True + # return user_id else: log.debug(user_obj_up_result) return False diff --git a/app/models/person_models.py b/app/models/person_models.py index e07b4f9..efaa40d 100644 --- a/app/models/person_models.py +++ b/app/models/person_models.py @@ -76,6 +76,8 @@ class Person_Base(BaseModel): created_on: Optional[datetime.datetime] = None updated_on: Optional[datetime.datetime] = None + test_field: str = 'asdf 1234' + # Convenience Data # This is only for convenience. Probably going to keep unless it causes a problem. email: Optional[str] diff --git a/app/routers/event_person.py b/app/routers/event_person.py index f877147..ca9c085 100644 --- a/app/routers/event_person.py +++ b/app/routers/event_person.py @@ -24,10 +24,10 @@ from app.models.user_models import User_New_Base, User_Base router = APIRouter() -# ### BEGIN ### API Event Person ### post_event_person_obj_new_v4() ### +# ### BEGIN ### API Event Person ### v4_post_event_person_obj_new() ### # Updated 2021-08-25 -@router.post('/event/person/new_v4', response_model=Resp_Body_Base) -async def post_event_person_obj_new_v4( +@router.post('/v4/event/person/new', response_model=Resp_Body_Base) +async def v4_post_event_person_obj_new( event_person_obj: Event_Person_Base, create_sub_obj: bool = False, fail_any: bool = True, # Fail if any thing goes wrong for sub objects @@ -81,13 +81,13 @@ async def post_event_person_obj_new_v4( return mk_resp(data=data, response=response, status_message='The event person was created.') else: return mk_resp(data=False, status_code=400, response=response, status_message='The result from trying to create an event person was unexpected.') -# ### BEGIN ### API Event Person ### post_event_person_obj_new_v4() ### +# ### BEGIN ### API Event Person ### v4_post_event_person_obj_new() ### -# ### BEGIN ### API Event Person ### patch_event_person_obj_exist_v4() ### +# ### BEGIN ### API Event Person ### v4_patch_event_person_obj_exist() ### # Updated 2021-08-25 -@router.patch('/event/person/{event_person_id}/exist_v4', response_model=Resp_Body_Base) -async def patch_event_person_obj_exist_v4( +@router.patch('/v4/event/person/{event_person_id}/exist', response_model=Resp_Body_Base) +async def v4_patch_event_person_obj_exist( event_person_obj: Event_Person_Base, event_person_id: str = Query(..., min_length=11, max_length=22), create_sub_obj: bool = False, @@ -142,16 +142,16 @@ async def patch_event_person_obj_exist_v4( return mk_resp(data=data, response=response, status_message='The event person was created.') else: return mk_resp(data=False, status_code=400, response=response, status_message='The result from trying to create an event person was unexpected.') -# ### END ### API Event Person ### patch_event_person_obj_exist_v4() ### +# ### END ### API Event Person ### v4_patch_event_person_obj_exist() ### -# ### BEGIN ### API Event Person Route ### post_event_person_new() ### +# ### BEGIN ### API Event Person Route ### v2_post_event_person_new() ### # Initialize/create a new event person # Create a person record (with a contact record and an address for the contact record) # Create a user record # Create an event_person record with the new person and user IDs -@router.post('/event/person/new', response_model=Resp_Body_Base) -async def post_event_person_new( +@router.post('/v2/event/person/new', response_model=Resp_Body_Base) +async def v2_post_event_person_new( event_person_new_init: Event_Person_New_Base, x_account_id: str = Header(...), return_obj: bool = True, @@ -332,7 +332,7 @@ async def post_event_person_new( return mk_resp(data=event_person_dict) #return mk_resp(data=event_person_obj) -# ### BEGIN ### API Event Person Route ### post_event_person_new() ### +# ### BEGIN ### API Event Person Route ### v2_post_event_person_new() ### # ### BEGIN ### API Event Person ### patch_event_person_json() ### @@ -393,7 +393,7 @@ async def get_event_person_obj( #inc_event_person_list: bool = False, inc_event_person_profile: bool = False, inc_event_presentation_list: bool = False, - #inc_event_presenter_list: bool = False, + inc_event_presenter_list: bool = False, inc_event_registration: bool = False, #inc_event_track: bool = False, inc_person: bool = False, @@ -425,7 +425,7 @@ async def get_event_person_obj( #inc_event_person_list = inc_event_person_list, inc_event_person_profile = inc_event_person_profile, inc_event_presentation_list = inc_event_presentation_list, - #inc_event_presenter_list = inc_event_presenter_list, + inc_event_presenter_list = inc_event_presenter_list, inc_event_registration = inc_event_registration, #inc_event_track = inc_event_track, inc_person = inc_person, diff --git a/app/routers/event_session.py b/app/routers/event_session.py index fbc5a5d..57d2f14 100644 --- a/app/routers/event_session.py +++ b/app/routers/event_session.py @@ -476,6 +476,7 @@ async def get_event_session_obj( inc_event_file_list: bool = False, inc_event_location: bool = False, inc_event_person: bool = False, # Under event_presenter + inc_event_person_profile: bool = False, # Under event_person inc_event_person_list: bool = False, inc_event_presentation_list: bool = False, inc_event_presenter_cat: bool = False, @@ -509,6 +510,7 @@ async def get_event_session_obj( inc_event_file_list = inc_event_file_list, inc_event_location = inc_event_location, inc_event_person = inc_event_person, + inc_event_person_profile = inc_event_person_profile, inc_event_person_list = inc_event_person_list, inc_event_presentation_list = inc_event_presentation_list, inc_event_presenter_cat = inc_event_presenter_cat, diff --git a/app/routers/person.py b/app/routers/person.py index d96a00d..4ae31c2 100644 --- a/app/routers/person.py +++ b/app/routers/person.py @@ -72,10 +72,10 @@ async def patch_person_obj( return result -# ### BEGIN ### API Person ### post_person_obj_new_v3() ### +# ### BEGIN ### API Person ### v3_post_person_obj_new() ### # Updated 2021-08-24 -@router.post('/person/new_v3', response_model=Resp_Body_Base) -async def post_person_obj_new_v3( +@router.post('/v3/person/new', response_model=Resp_Body_Base) +async def v3_post_person_obj_new( person_obj: Person_Base, create_sub_obj: bool = False, fail_any: bool = True, # Fail if any thing goes wrong for sub objects @@ -132,13 +132,13 @@ async def post_person_obj_new_v3( return mk_resp(data=data, response=response, status_message='The person was created.') else: return mk_resp(data=False, status_code=400, response=response, status_message='The result from trying to create an person was unexpected.') -# ### BEGIN ### API Person ### post_person_obj_new_v3() ### +# ### BEGIN ### API Person ### v3_post_person_obj_new() ### -# ### BEGIN ### API Person ### patch_person_obj_exist_v3() ### +# ### BEGIN ### API Person ### v3_patch_person_obj_exist ### # Updated 2021-08-24 -@router.patch('/person/{person_id}/exist_v3', response_model=Resp_Body_Base) -async def patch_person_obj_exist_v3( +@router.patch('/v3/person/{person_id}/exist', response_model=Resp_Body_Base) +async def v3_patch_person_obj_exist( person_obj: Person_Base, person_id: str = Query(..., min_length=11, max_length=22), create_sub_obj: bool = False, @@ -179,7 +179,7 @@ async def patch_person_obj_exist_v3( return mk_resp(data=data, response=response, status_message='The person was created.') else: return mk_resp(data=False, status_code=400, response=response, status_message='The result from trying to create an person was unexpected.') -# ### END ### API Person ### patch_person_obj_exist_v3() ### +# ### END ### API Person ### v3_patch_person_obj_exist ### @@ -390,7 +390,8 @@ async def get_person_obj( if person_dict := load_person_obj( person_id = person_id, limit = limit, - model_as_dict = True, # NOTE: returning model as a dict + exclude_unset = False, + model_as_dict = False, # NOTE: returning model as a dict enabled = enabled, inc_address = inc_address, # inc_archive_list = inc_archive_list,