From 627bc8c4dfd56010be058d7aae28b1dba2189f13 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Fri, 4 Jun 2021 16:01:23 -0400 Subject: [PATCH] A lot of work on event related modules --- app/methods/event_methods.py | 266 ++++++++++++++++----------- app/methods/event_person_methods.py | 92 +++++---- app/methods/event_session_methods.py | 46 +++-- app/models/common_field_schema.py | 1 + app/models/event_models.py | 102 +++++++++- app/models/event_person_models.py | 41 ++--- app/models/event_session_models.py | 11 +- app/routers/event.py | 78 ++++++-- app/routers/event_person.py | 61 +++++- app/routers/event_session.py | 56 ++++++ 10 files changed, 554 insertions(+), 200 deletions(-) diff --git a/app/methods/event_methods.py b/app/methods/event_methods.py index b5533c8..4486279 100644 --- a/app/methods/event_methods.py +++ b/app/methods/event_methods.py @@ -11,143 +11,185 @@ from app.methods.event_session_methods import load_event_session_obj from app.methods.person_methods import load_person_obj from app.methods.user_methods import load_user_obj -from app.models.event_models import Event_Base +from app.models.event_models import Event_Base, Event_Cfg_Base # ### BEGIN ### API Event Methods ### load_event_obj() ### def load_event_obj( event_id: int|str, enabled: str = 'enabled', # enabled, disabled, all + limit: int = 1000, + inc_contact_1: bool = False, + inc_contact_2: bool = False, + inc_contact_3: bool = False, inc_event_abstract_list: bool = False, inc_event_badge_list: bool = False, + inc_event_cfg: bool = False, inc_event_device_list: bool = False, inc_event_exhibit_list: bool = False, inc_event_file_list: bool = False, + inc_event_location: bool = False, # For event_session child object inc_event_location_list: bool = False, inc_event_person_list: bool = False, inc_event_presentation_list: bool = False, + inc_event_presenter_cat: bool = False, # For event_session child object inc_event_presenter_list: bool = False, + inc_event_registration_cfg: bool = False, inc_event_registration_list: bool = False, inc_event_session_list: bool = False, + inc_event_track: bool = False, # For event_session child object inc_event_track_list: bool = False, - inc_event_cfg: bool = False, - inc_event_registration_cfg: bool = False, + inc_location_address: bool = False, inc_poc_event_person: bool = False, - inc_poc_person: bool = False, - inc_user: bool = False, ) -> Event_Base|bool: - log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass else: return False - if event_rec := sql_select(table_name='v_event', record_id=event_id): - #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(event_rec) - - try: - event_obj = Event_Base(**event_rec) - log.debug(event_obj) - except ValidationError as e: - log.error(e.json()) - return False - - account_id = event_rec.get('account_id', None) - event_id = event_rec.get('event_id', None) - poc_event_person_id = event_rec.get('poc_event_person_id', None) - poc_person_id = event_rec.get('poc_person_id', None) - user_id = event_rec.get('user_id', None) - - #if inc_event: pass - if inc_event_abstract_list: pass - if inc_event_badge_list: pass - if inc_event_device_list: pass - if inc_event_exhibit_list: pass - if inc_event_file_list: pass - if inc_event_location_list: pass - if inc_event_person_list: pass - if inc_event_presentation_list: pass - if inc_event_presenter_list: pass - if inc_event_registration_list: pass - if inc_event_session_list: - #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - - data = {} - data['event_id'] = event_id - - if enabled in ['enabled', 'disabled', 'all']: - if enabled == 'enabled': - data['enable'] = True - sql_enabled = f'AND `event_session`.enable = :enable' - elif enabled == 'disabled': - data['enable'] = False - sql_enabled = f'AND `event_session`.enable = :enable' - elif enabled == 'all': - sql_enabled = '' - # else: event_obj['event_session'] = None - - # if limit: - # data['limit'] = limit - # sql_limit = f'LIMIT :limit' - # else: - # sql_limit = '' - - sql = f""" - SELECT `event_session`.id AS 'event_session_id', `event_session`.id_random AS 'event_session_id_random' - FROM `event_session` AS `event_session` - WHERE `event_session`.event_id = :event_id - {sql_enabled} - ORDER BY `event_session`.created_on DESC, `event_session`.updated_on DESC; - """ - - #log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - if event_session_obj_li_result := sql_select(data=data, sql=sql, as_list=True): - #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(event_session_obj_li_result) - event_session_obj_li = [] - for event_session_obj in event_session_obj_li_result: - event_session_id = event_session_obj.get('event_session_id', None) - if event_session_obj := load_event_session_obj( - event_session_id=event_session_id, - enabled=enabled, - 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_list=inc_event_person_list, - inc_event_presentation_list=inc_event_presentation_list, - inc_event_presenter_list=inc_event_presenter_list, - #inc_event_track=inc_event_track, - ): - data = event_session_obj.dict(by_alias=True, exclude_unset=True) - event_session_obj_li.append(data) - log.debug(event_session_obj_li) - #event_rec['event_session_list'] = event_session_obj_li - event_obj.event_session_list = event_session_obj_li - else: - #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(event_session_obj_li_result) - #log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - - if inc_event_track_list: pass - if inc_event_cfg: pass - if inc_event_registration_cfg: pass - if inc_poc_event_person: pass - if inc_poc_person: - person_obj = load_person_obj(person_id=poc_person_id) - log.debug(person_obj) - #event_rec['poc_person'] = person_obj - #log.debug(event_rec) - event_obj.poc_person = person_obj - log.debug(event_obj) - if inc_user: - user_obj = load_user_obj(user_id=user_id) - log.debug(user_obj) - #event_rec['user'] = user_obj - #log.debug(event_rec) - event_obj.user = user_obj - log.debug(event_obj) + if event_rec := sql_select(table_name='v_event', record_id=event_id): pass else: return False - return event_obj \ No newline at end of file + #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_rec) + + try: + event_obj = Event_Base(**event_rec) + log.debug(event_obj) + except ValidationError as e: + log.error(e.json()) + return False + + account_id = event_rec.get('account_id', None) + poc_event_person_id = event_rec.get('poc_event_person_id', None) + poc_person_id = event_rec.get('poc_person_id', None) + user_id = event_rec.get('user_id', None) + + #if inc_event: pass + if inc_event_abstract_list: pass + if inc_event_badge_list: pass + + if inc_event_cfg: # and event_cfg_id ??? + #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_id) + if event_cfg_obj := load_event_cfg_obj( + event_id=event_id, # event_cfg_id ??? + ): + event_obj.event_cfg = event_cfg_obj.dict(by_alias=True, exclude_unset=True) + else: + event_obj.event_cfg = None + + if inc_event_device_list: pass + if inc_event_exhibit_list: pass + if inc_event_file_list: pass + if inc_event_location_list: pass + if inc_event_person_list: pass + if inc_event_presentation_list: pass + if inc_event_presenter_list: pass + if inc_event_registration_cfg: pass + if inc_event_registration_list: pass + + if inc_event_session_list: + #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + + data = {} + data['event_id'] = event_id + + if enabled in ['enabled', 'disabled', 'all']: + if enabled == 'enabled': + data['enable'] = True + sql_enabled = f'AND `event_session`.enable = :enable' + elif enabled == 'disabled': + data['enable'] = False + sql_enabled = f'AND `event_session`.enable = :enable' + elif enabled == 'all': + sql_enabled = '' + else: + sql_enabled = f'AND `event_session`.enable = :enable' + # else: event_obj['event_session'] = None + + if limit: + data['limit'] = limit + sql_limit = f'LIMIT :limit' + else: + sql_limit = '' + + sql = f""" + SELECT `event_session`.id AS 'event_session_id', `event_session`.id_random AS 'event_session_id_random' + FROM `event_session` AS `event_session` + WHERE `event_session`.event_id = :event_id + {sql_enabled} + ORDER BY `event_session`.created_on DESC, `event_session`.updated_on DESC + {sql_limit}; + """ + + #log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + if event_session_obj_li_result := sql_select(data=data, sql=sql, as_list=True): + #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_session_obj_li_result) + event_session_obj_li = [] + for event_session_obj in event_session_obj_li_result: + event_session_id = event_session_obj.get('event_session_id', None) + if event_session_obj := load_event_session_obj( + event_session_id=event_session_id, + enabled=enabled, + 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_location=inc_event_location, + inc_event_person_list=inc_event_person_list, + inc_event_presentation_list=inc_event_presentation_list, + inc_event_presenter_cat=inc_event_presenter_cat, + inc_event_presenter_list=inc_event_presenter_list, + #inc_event_track=inc_event_track, + ): + data = event_session_obj.dict(by_alias=True, exclude_unset=True) + event_session_obj_li.append(data) + log.debug(event_session_obj_li) + #event_rec['event_session_list'] = event_session_obj_li + event_obj.event_session_list = event_session_obj_li + else: + #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_session_obj_li_result) + #log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + + if inc_event_track_list: pass + + if inc_poc_event_person: + poc_event_person_obj = load_person_obj(person_id=poc_event_person_id) + log.debug(poc_event_person_obj) + #event_rec['poc_event_person'] = poc_event_person_obj + #log.debug(event_rec) + event_obj.poc_event_person = poc_event_person_obj + log.debug(event_obj) + + return event_obj +# ### END ### API Event Methods ### load_event_obj() ### + + +# ### BEGIN ### API Event Methods ### load_event_cfg_obj() ### +def load_event_cfg_obj( + event_id: int|str, + ) -> Event_Cfg_Base|bool: + #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass + else: return False + + if event_cfg_rec := sql_select(table_name='v_event_cfg', record_id=event_id): + #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_cfg_rec) + + try: + event_cfg_obj = Event_Cfg_Base(**event_cfg_rec) + log.debug(event_cfg_obj) + except ValidationError as e: + log.error(e.json()) + return False + else: return False + + return event_cfg_obj +# ### END ### API Event Methods ### load_event_cfg_obj() ### \ No newline at end of file diff --git a/app/methods/event_person_methods.py b/app/methods/event_person_methods.py index 4bcb3b9..e28adb6 100644 --- a/app/methods/event_person_methods.py +++ b/app/methods/event_person_methods.py @@ -7,6 +7,15 @@ from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, v from app.db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_update 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_exhibit_methods import load_event_exhibit_obj +# from app.methods.event_file_methods import load_event_file_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_registration_methods import load_event_registration_obj +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 load_person_obj from app.methods.user_methods import load_user_obj @@ -40,13 +49,19 @@ def create_event_person_obj(event_person_obj_new:Event_Person_Base) -> int|bool: # ### BEGIN ### API Event Person Methods ### load_event_person_obj() ### def load_event_person_obj( - event_person_id:int|str, - inc_event:bool=False, - inc_event_badge:bool=False, - inc_event_person_detail:bool=False, - inc_event_registration:bool=False, - inc_person:bool=False, - inc_user:bool=False + event_person_id: int|str, + inc_event_abstract_list: bool = False, + inc_event_badge: bool = False, + inc_event_exhibit_list: bool = False, + inc_event_file_list: bool = False, + #inc_event_person_detail: bool = False, # Should this be done differently? + inc_event_presentation_list: bool = False, + inc_event_presenter_list: bool = False, + inc_event_registration: bool = False, + inc_event_session_list: bool = False, + inc_event_track_list: bool = False, + inc_person: bool = False, + inc_user: bool = False, ) -> Event_Person_Base|bool: log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) @@ -54,35 +69,13 @@ def load_event_person_obj( if event_person_id := redis_lookup_id_random(record_id_random=event_person_id, table_name='event_person'): pass else: return False - if event_person_rec := sql_select(table_name='v_event_person', record_id=event_person_id): - #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(event_person_rec) - - person_id = event_person_rec.get('person_id', None) - user_id = event_person_rec.get('user_id', None) - - # event_person_obj = Event_Person_Base(**event_person_rec) - # person_id = event_person_obj.person_id - # user_id = event_person_obj.user_id - - if inc_event: pass - if inc_event_badge: pass - if inc_event_person_detail: pass - if inc_event_registration: pass - - if inc_person: - person_obj = load_person_obj(person_id=person_id) - log.debug(person_obj) - event_person_rec['person'] = person_obj - log.debug(event_person_rec) - if inc_user: - user_obj = load_user_obj(user_id=user_id) - log.debug(user_obj) - event_person_rec['user'] = user_obj - log.debug(event_person_rec) + if event_person_rec := sql_select(table_name='v_event_person', record_id=event_person_id): pass else: return False + #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_person_rec) + try: event_person_obj = Event_Person_Base(**event_person_rec) log.debug(event_person_obj) @@ -90,4 +83,35 @@ def load_event_person_obj( log.error(e.json()) return False - return event_person_obj \ No newline at end of file + person_id = event_person_rec.get('person_id', None) + user_id = event_person_rec.get('user_id', None) + + # event_person_obj = Event_Person_Base(**event_person_rec) + # person_id = event_person_obj.person_id + # user_id = event_person_obj.user_id + + if inc_event_abstract_list: pass + if inc_event_badge: pass + if inc_event_exhibit_list: pass + if inc_event_file_list: pass + #if inc_event_person_detail: pass + if inc_event_presentation_list: pass + if inc_event_presenter_list: pass + if inc_event_registration: pass + if inc_event_session_list: pass + if inc_event_track_list: pass + + if inc_person: + person_obj = load_person_obj(person_id=person_id) + log.debug(person_obj) + event_person_rec['person'] = person_obj + log.debug(event_person_rec) + + if inc_user: + user_obj = load_user_obj(user_id=user_id) + log.debug(user_obj) + event_person_rec['user'] = user_obj + log.debug(event_person_rec) + + return event_person_obj +# ### END ### API Event Person Methods ### load_event_person_obj() ### \ No newline at end of file diff --git a/app/methods/event_session_methods.py b/app/methods/event_session_methods.py index 39be5a9..1266046 100644 --- a/app/methods/event_session_methods.py +++ b/app/methods/event_session_methods.py @@ -29,12 +29,13 @@ def load_event_session_obj( inc_event_location: bool = False, inc_event_person_list: bool = False, inc_event_presentation_list: bool = False, + inc_event_presenter_cat: bool = False, # Concantinate presenter names inc_event_presenter_list: bool = False, inc_event_registration_list: bool = False, inc_event_track: bool = False, inc_poc_event_person: bool = False, inc_poc_person: bool = False, - inc_user: bool = False, + # inc_user: bool = False, ) -> Event_Session_Base|bool: log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) @@ -46,7 +47,7 @@ def load_event_session_obj( else: return False - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(event_session_rec) try: @@ -56,9 +57,6 @@ def load_event_session_obj( log.error(e.json()) return False - # event_session_obj = Event_Session_Base(**event_session_rec) - # log.debug(event_session_obj) - account_id = event_session_rec.get('account_id', None) event_id = event_session_rec.get('event_id', None) event_location_id = event_session_rec.get('event_location_id', None) @@ -80,10 +78,11 @@ def load_event_session_obj( event_session_obj.event_location = event_location_obj.dict(by_alias=True, exclude_unset=True) else: event_session_obj.event_location = None - - + else: + event_session_obj.event_location = None if inc_event_person_list: pass + if inc_event_presentation_list: log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL @@ -115,9 +114,9 @@ def load_event_session_obj( ORDER BY `event_presentation`.created_on DESC, `event_presentation`.updated_on DESC; """ - log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + #log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL if event_presentation_rec_li_result := sql_select(data=data, sql=sql, as_list=True): - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(event_presentation_rec_li_result) event_presentation_obj_li = [] for event_presentation_rec in event_presentation_rec_li_result: @@ -140,15 +139,32 @@ def load_event_session_obj( log.debug(event_presentation_rec_li_result) log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + if inc_event_presenter_cat: + data = {} + data['event_session_id'] = event_session_id + + sql = f""" + SELECT event_session_id, GROUP_CONCAT(given_name, ' ', family_name SEPARATOR '; ') AS 'event_presenter_names' + FROM event_presenter + WHERE event_session_id = :event_session_id + GROUP BY event_session_id + LIMIT 1 + """ + if event_presenter_cat_rec_result := sql_select(data=data, sql=sql): + event_session_obj.event_presenter_cat = event_presenter_cat_rec_result.get('event_presenter_names', None) + else: + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_presenter_cat_rec_result) + event_session_obj.event_presenter_cat = None if inc_event_presenter_list: pass - if inc_poc_event_person: pass - if inc_poc_person: - person_obj = load_person_obj(person_id=poc_person_id) - log.debug(person_obj) - event_session_obj.poc_person = person_obj + + if inc_poc_event_person: + poc_event_person_obj = load_person_obj(person_id=poc_person_id) + log.debug(poc_event_person_obj) + event_session_obj.poc_event_person = poc_event_person_obj log.debug(event_session_obj) + #if inc_user: pass - return event_session_obj \ No newline at end of file diff --git a/app/models/common_field_schema.py b/app/models/common_field_schema.py index 7322d5b..b6a51c6 100644 --- a/app/models/common_field_schema.py +++ b/app/models/common_field_schema.py @@ -32,6 +32,7 @@ base_fields['event_file_id_random'] = xxx_id_random_field_schema base_fields['event_id_random'] = xxx_id_random_field_schema base_fields['event_abstract_id_random'] = xxx_id_random_field_schema base_fields['event_badge_id_random'] = xxx_id_random_field_schema +base_fields['event_cfg_id_random'] = xxx_id_random_field_schema # Not really ready yet base_fields['event_device_id_random'] = xxx_id_random_field_schema base_fields['event_location_id_random'] = xxx_id_random_field_schema base_fields['event_person_id_random'] = xxx_id_random_field_schema diff --git a/app/models/event_models.py b/app/models/event_models.py index dc06c18..6b25010 100644 --- a/app/models/event_models.py +++ b/app/models/event_models.py @@ -106,9 +106,11 @@ class Event_Base(BaseModel): contact_2: Optional[Contact_Base] contact_3: Optional[Contact_Base] event_abstract_list: Optional[list] # Optional[Event_Abstract_Base] + event_cfg: Optional[Event_Cfg_Base] event_device_list: Optional[list] # Optional[Event_Device_Base] event_file_list: Optional[list] # Optional[Event_File_Base] event_location_list: Optional[list] # Optional[Event_Location_Base] + event_person_list: Optional[list] event_presentation_list: Optional[list] # Optional[Event_Presentation_Base] event_presenter_list: Optional[list] # Optional[Event_Presenter_Base] event_session_list: Optional[list] # Optional[Event_Session_Base] @@ -179,4 +181,102 @@ class Event_Base(BaseModel): underscore_attrs_are_private = True fields = base_fields -Event_Base.update_forward_refs() + +class Event_Cfg_Base(BaseModel): + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + # id_random: Optional[str] = Field( + # **base_fields['event_cfg_id_random'], + # alias='event_cfg_id_random', + # default_factory=lambda:secrets.token_urlsafe(default_num_bytes), + # ) + # id: Optional[int] = Field( + # #alias='event_cfg_id' + # ) + + enable: Optional[bool] + enable_from: Optional[datetime.datetime] + enable_to: Optional[datetime.datetime] + + enable_comments: Optional[bool] + disable_navigation: Optional[bool] + + enable_event_file_upload_for_event: Optional[bool] + enable_event_file_upload_for_location: Optional[bool] + enable_event_file_upload_for_presentation: Optional[bool] + enable_event_file_upload_for_presenter: Optional[bool] + enable_event_file_upload_for_session: Optional[bool] + enable_event_file_upload_for_track: Optional[bool] + # enable_event_file_upload_for_event_track: Optional[bool] # Change to this pattern in the future? + # enable_file_upload_for_track: Optional[bool] # Change to this pattern in the future? + + enable_event_file_upload_review_question: Optional[bool] + enable_event_file_upload_email_question: Optional[bool] + enable_event_file_upload_comments_question: Optional[bool] + enable_event_file_approval_option: Optional[bool] + enable_event_file_public_use_option: Optional[bool] + enable_event_file_member_use_option: Optional[bool] + enable_event_file_attendee_use_option: Optional[bool] + enable_event_file_publish_option: Optional[bool] + enable_event_file_purpose_option: Optional[bool] + enable_event_file_os_selection_option: Optional[bool] + enable_event_file_os_change_option: Optional[bool] + + custom_event_file_upload_description: Optional[str] + custom_event_file_agreement_1_text: Optional[str] + custom_event_file_agreement_1_description: Optional[str] + + ask_speaker_ready_room: Optional[bool] + ask_presentation_publish_optout: Optional[bool] + + default_event_file_to_public_use: Optional[bool] + ask_for_public_version: Optional[bool] + + file_approval_enabled: Optional[bool] + + hide_file_upload_presentation_name: Optional[bool] + hide_file_upload_review_input: Optional[bool] + hide_file_upload_email_input: Optional[bool] + hide_file_upload_comments_input: Optional[bool] + + hide_session_codes: Optional[bool] + + unauthenticated_access: Optional[bool] + unauthenticated_access_public_endpoint: Optional[bool] + + hide: Optional[bool] + status: Optional[int] + review: Optional[bool] + approve: Optional[bool] + ready: Optional[bool] + ready_on: Optional[datetime.datetime] + archive: Optional[bool] + archive_on: Optional[datetime.datetime] + priority: Optional[bool] + sort: Optional[int] + group: Optional[str] + notes: Optional[str] + + _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) + + #@validator('event_cfg_id_random', always=True) + # def event_cfg_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_cfg_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') + # return None + +Event_Base.update_forward_refs() # NOTE: This is needed since Event_Cfg_Base is below Event_Base. \ No newline at end of file diff --git a/app/models/event_person_models.py b/app/models/event_person_models.py index 803a10c..9c7543a 100644 --- a/app/models/event_person_models.py +++ b/app/models/event_person_models.py @@ -11,7 +11,7 @@ from .common_field_schema import base_fields, default_num_bytes #from .event_models import Event_Base from .event_badge_models import Event_Badge_Base -from .event_person_detail_models import Event_Person_Detail_Base +#from .event_person_detail_models import Event_Person_Detail_Base from .event_registration_models import Event_Registration_Base from .person_models import Person_Base from .user_models import User_Base, User_Out_Base @@ -33,10 +33,10 @@ class Event_Person_Base(BaseModel): account_id: Optional[int] event_id_random: Optional[str] event_id: Optional[int] - event_registration_id_random: Optional[str] - event_registration_id: Optional[int] event_badge_id_random: Optional[str] event_badge_id: Optional[int] + event_registration_id_random: Optional[str] + event_registration_id: Optional[int] person_id_random: Optional[str] person_id: Optional[int] user_id_random: Optional[str] @@ -51,18 +51,17 @@ class Event_Person_Base(BaseModel): updated_on: Optional[datetime.datetime] = None # Including other related objects - #event: Optional[Event_Base] - event_abstract: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more abstracts + event_abstract_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more abstracts event_badge: Optional[Event_Badge_Base] - event_exhibit: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more exhibits - event_file: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more files - event_location: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more locations (but unlikely?) - event_presentation: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more presentations - event_presenter: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more presenters (part of multiple presentations) + event_exhibit_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more exhibits + event_file_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more files + event_location_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more locations (but unlikely?) + #event_person_detail_list: Optional[list] # list of Event_Person_Detail + event_presentation_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more presentations + event_presenter_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more presenters (part of multiple presentations) + event_registration: Optional[Event_Registration_Base] event_session: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more sessions event_track: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more tracks - #event_person_detail_list: Optional[list] # list of Event_Person_Detail - event_registration: Optional[Event_Registration_Base] person: Optional[Person_Base] user: Optional[User_Base] @@ -105,15 +104,6 @@ class Event_Person_Base(BaseModel): return redis_lookup_id_random(record_id_random=values['event_id_random'], table_name='event') 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') - return None - @validator('event_badge_id', always=True) def event_badge_id_lookup(cls, v, values, **kwargs): log.setLevel(logging.WARNING) @@ -123,6 +113,15 @@ class Event_Person_Base(BaseModel): return redis_lookup_id_random(record_id_random=values['event_badge_id_random'], table_name='event_badge') 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') + return None + @validator('person_id', always=True) def person_id_lookup(cls, v, values, **kwargs): log.setLevel(logging.WARNING) diff --git a/app/models/event_session_models.py b/app/models/event_session_models.py index 567a361..7268114 100644 --- a/app/models/event_session_models.py +++ b/app/models/event_session_models.py @@ -11,7 +11,7 @@ from .common_field_schema import base_fields, default_num_bytes #from .event_models import Event_Base from .event_location_models import Event_Location_Base -#from .event_person_models import Event_Person_Base +#from .event_person_models import Event_Person_Base # NOTE: Using thi will probably create an import loop from .event_track_models import Event_Track_Base from .person_models import Person_Base @@ -89,15 +89,16 @@ class Event_Session_Base(BaseModel): # Including other related objects #event: Optional[Event_Base] event_abstract_list: Optional[list] # Optional[Event_Abstract_Base] + event_badge_list: Optional[list] # Optional[Event_Abstract_Base] event_device_list: Optional[list] # Optional[Event_Device_Base] event_file_list: Optional[list] # Optional[Event_File_Base] - event_location: Optional[Event_Location_Base] + event_location: Optional[Union[Event_Location_Base, None]] + event_person_list: Optional[list] + event_presenter_cat: Optional[Union[str, None]] event_presentation_list: Optional[list] # Optional[Event_Presentation_Base] event_presenter_list: Optional[list] # Optional[Event_Presenter_Base] event_track: Optional[Event_Track_Base] - - #poc_event_person: Optional[Event_Person_Base] - poc_person: Optional[Person_Base] + #poc_event_person: Optional[Event_Person_Base] # NOTE: Using thi will probably create an import loop _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) diff --git a/app/routers/event.py b/app/routers/event.py index bf99495..08a4b79 100644 --- a/app/routers/event.py +++ b/app/routers/event.py @@ -211,24 +211,80 @@ async def get_event_obj_li( return mk_resp(data=False, status_code=404) -@router.get('/{obj_id}', response_model=Resp_Body_Base) +# ### BEGIN ### API Event ### get_event_obj() ### +# Working well as of 2021-06-04. Using as a template for other routes. +@router.get('/{event_id}', response_model=Resp_Body_Base) async def get_event_obj( - obj_id: str = Query(..., min_length=1, max_length=22), + event_id: str = Query(..., min_length=1, max_length=22), + enabled: str = 'enabled', # For now this covers any included objects or object lists + limit: int = 500, # For now this covers any included objects or object lists + inc_contact_1: bool = False, + inc_contact_2: bool = False, + inc_contact_3: bool = False, + inc_event_abstract_list: bool = False, + inc_event_badge_list: bool = False, + inc_event_device_list: bool = False, + inc_event_exhibit_list: bool = False, + inc_event_file_list: bool = False, + inc_event_location: bool = False, + inc_event_location_list: bool = False, + inc_event_person_list: bool = False, + inc_event_presentation_list: bool = False, + inc_event_presenter_cat: bool = False, + inc_event_presenter_list: bool = False, + inc_event_registration_list: bool = False, + inc_event_session_list: bool = False, + inc_event_track: bool = False, + inc_event_track_list: bool = False, + inc_event_cfg: bool = False, + inc_event_registration_cfg: bool = False, + inc_location_address: bool = False, + inc_poc_event_person: bool = False, x_account_id: str = Header(...), by_alias: Optional[bool] = True, exclude_unset: Optional[bool] = True, ): - log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) - obj_type = 'event' - result = get_obj_template( - obj_type=obj_type, - obj_id=obj_id, - by_alias=True, - exclude_unset=True, - ) - return result + 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) + + if event_obj := load_event_obj( + event_id=event_id, + enabled=enabled, + limit=limit, + inc_contact_1=inc_contact_1, + inc_contact_2=inc_contact_2, + inc_contact_3=inc_contact_3, + inc_event_abstract_list=inc_event_abstract_list, + inc_event_badge_list=inc_event_badge_list, + inc_event_device_list=inc_event_device_list, + inc_event_exhibit_list=inc_event_exhibit_list, + inc_event_file_list=inc_event_file_list, + inc_event_location=inc_event_location, + inc_event_location_list=inc_event_location_list, + inc_event_person_list=inc_event_person_list, + inc_event_presentation_list=inc_event_presentation_list, + inc_event_presenter_cat=inc_event_presenter_cat, + inc_event_presenter_list=inc_event_presenter_list, + inc_event_registration_list=inc_event_registration_list, + inc_event_session_list=inc_event_session_list, + inc_event_track=inc_event_track, + inc_event_track_list=inc_event_track_list, + inc_event_cfg=inc_event_cfg, + inc_event_registration_cfg=inc_event_registration_cfg, + inc_location_address=inc_location_address, + inc_poc_event_person=inc_poc_event_person, + ): + # event_dict = event_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) + pass + else: + return mk_resp(data=False, status_code=400) # Bad Request + + return mk_resp(data=event_obj) +# ### END ### API Event ### get_event_obj() ### @router.delete('/{obj_id}', response_model=Resp_Body_Base) diff --git a/app/routers/event_person.py b/app/routers/event_person.py index 017ba79..7eeff6c 100644 --- a/app/routers/event_person.py +++ b/app/routers/event_person.py @@ -158,4 +158,63 @@ async def post_event_person_new( return mk_resp(data=False) log.debug(event_person_obj) - return mk_resp(data=event_person_obj) \ No newline at end of file + return mk_resp(data=event_person_obj) + + +# ### BEGIN ### API Event Person ### get_event_person_obj() ### +# Working well as of 2021-06-04. Using as a template for other routes. +@router.get('/{event_person_id}', response_model=Resp_Body_Base) +async def get_event_person_obj( + event_person_id: str = Query(..., min_length=1, max_length=22), + enabled: str = 'enabled', # For now this covers any included objects or object lists + limit: int = 500, # For now this covers any included objects or object lists + inc_event_abstract_list: bool = False, + inc_event_badge: bool = False, + #inc_event_device_list: bool = False, + #inc_event_exhibit_list: bool = False, + inc_event_file_list: bool = False, + #inc_event_location_list: bool = False, + #inc_event_person_list: bool = False, + inc_event_presentation_list: bool = False, + #inc_event_presenter_list: bool = False, + inc_event_registration: bool = False, + #inc_event_track: bool = False, + inc_person: bool = False, + inc_user: bool = False, + x_account_id: str = Header(...), + by_alias: Optional[bool] = True, + exclude_unset: Optional[bool] = True, + ): + 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 mk_resp(data=None, status_code=404) + + if event_person_obj := load_event_person_obj( + event_person_id=event_person_id, + enabled=enabled, + limit=limit, + inc_event_abstract_list=inc_event_abstract_list, + inc_event_badge=inc_event_badge, + #inc_event_device_list=inc_event_device_list, + #inc_event_exhibit_list=inc_event_exhibit_list, + inc_event_file_list=inc_event_file_list, + #inc_event_location=inc_event_location, + #inc_event_person_list=inc_event_person_list, + inc_event_presentation_list=inc_event_presentation_list, + #inc_event_presenter_list=inc_event_presenter_list, + inc_event_registration=inc_event_registration, + #inc_event_track=inc_event_track, + inc_poc_event_person=inc_poc_event_person, + inc_person=inc_person, + inc_user=inc_user, + ): + # event_dict = event_person_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) + pass + else: + return mk_resp(data=False, status_code=400) # Bad Request + + return mk_resp(data=event_person_obj) +# ### END ### API Event ### get_event_person_obj() ### diff --git a/app/routers/event_session.py b/app/routers/event_session.py index c301e5a..6e99bf7 100644 --- a/app/routers/event_session.py +++ b/app/routers/event_session.py @@ -228,6 +228,62 @@ async def get_event_session_obj( return result +# ### BEGIN ### API Event Session ### get_event_session_obj() ### +# Working well as of 2021-06-04. Using as a template for other routes. +@router.get('/{event_session_id}', response_model=Resp_Body_Base) +async def get_event_session_obj( + event_session_id: str = Query(..., min_length=1, max_length=22), + enabled: str = 'enabled', # For now this covers any included objects or object lists + limit: int = 500, # For now this covers any included objects or object lists + inc_event_abstract_list: bool = False, + inc_event_badge_list: bool = False, + inc_event_device_list: bool = False, + inc_event_file_list: bool = False, + inc_event_location: bool = False, + inc_event_person_list: bool = False, + inc_event_presentation_list: bool = False, + inc_event_presenter_cat: bool = False, + inc_event_presenter_list: bool = False, + inc_event_registration_list: bool = False, + inc_event_track: bool = False, + inc_poc_event_person: bool = False, + x_account_id: str = Header(...), + by_alias: Optional[bool] = True, + exclude_unset: Optional[bool] = True, + ): + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass + else: + return mk_resp(data=None, status_code=404) + + if event_session_obj := load_event_session_obj( + event_session_id=event_session_id, + enabled=enabled, + limit=limit, + inc_event_abstract_list=inc_event_abstract_list, + inc_event_badge_list=inc_event_badge_list, + inc_event_device_list=inc_event_device_list, + inc_event_file_list=inc_event_file_list, + inc_event_location=inc_event_location, + inc_event_person_list=inc_event_person_list, + inc_event_presentation_list=inc_event_presentation_list, + inc_event_presenter_cat=inc_event_presenter_cat, + inc_event_presenter_list=inc_event_presenter_list, + inc_event_registration_list=inc_event_registration_list, + inc_event_track=inc_event_track, + inc_poc_event_person=inc_poc_event_person, + ): + # event_dict = event_session_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) + pass + else: + return mk_resp(data=False, status_code=400) # Bad Request + + return mk_resp(data=event_session_obj) +# ### END ### API Event ### get_event_session_obj() ### + + @router.delete('/{obj_id}', response_model=Resp_Body_Base) async def delete_event_session_obj( obj_id: str = Query(..., min_length=1, max_length=22),