From e0b9c975b08ba3c31903d7148624b3b593301edb Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Tue, 28 Sep 2021 15:04:09 -0400 Subject: [PATCH] Work on event related and added new create_on and updated_on forced change to UTC. --- app/methods/event_methods.py | 59 +++++++++++++++++----------------- app/models/event_cfg_models.py | 2 ++ app/models/event_models.py | 17 +++++++++- app/routers/event.py | 6 ++-- 4 files changed, 52 insertions(+), 32 deletions(-) diff --git a/app/methods/event_methods.py b/app/methods/event_methods.py index 267c6ab..bb6c1b0 100644 --- a/app/methods/event_methods.py +++ b/app/methods/event_methods.py @@ -27,9 +27,9 @@ def load_event_obj( exclude_unset: bool = True, model_as_dict: bool = False, enabled: str = 'enabled', # enabled, disabled, all - inc_address: bool = False, # Under contact + inc_address: bool = False, # Loads address_location and under contact(s) # inc_address_location: bool = False, - inc_contact: bool = False, + inc_contact: bool = False, # Loads all 3 contacts # inc_contact_1: bool = False, # inc_contact_2: bool = False, # inc_contact_3: bool = False, @@ -295,8 +295,9 @@ def get_event_rec_list( organization_id: str = None, person_id: str = None, user_id: str = None, - limit: int = 1000, + limit: int = 500, enabled: str = 'enabled', # enabled, disabled, all + archived: str = 'archived', # archived, not_archived, all conference: bool = False, # If it is a conference then organization, person, and user are queried as participants (not the owner/organizer) ) -> list|bool: log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL @@ -324,6 +325,18 @@ def get_event_rec_list( data['user_id'] = user_id data['conference'] = conference + if archived in ['archived', 'not_archived', 'all']: + if archived == 'archived': + data['archive'] = True + sql_archived = f'AND `event`.archive = :archive' + elif archived == 'not_archived': + data['archive'] = False + sql_archived = f'AND (`event`.archive = :archive OR `event`.archive IS NULL)' + elif archived == 'all': + sql_archived = '' + else: + sql_archived = f'AND `event`.archive = :archive' + if conference: data['conference'] = True sql_conference = f'AND `event`.conference = :conference' @@ -331,7 +344,17 @@ def get_event_rec_list( data['conference'] = False sql_conference = f'AND `event`.conference = :conference' - + if enabled in ['enabled', 'disabled', 'all']: + if enabled == 'enabled': + data['enable'] = True + sql_enabled = f'AND `event`.enable = :enable' + elif enabled == 'disabled': + data['enable'] = False + sql_enabled = f'AND `event`.enable = :enable' + elif enabled == 'all': + sql_enabled = '' + else: + sql_enabled = f'AND `event`.enable = :enable' if limit: data['limit'] = limit @@ -349,24 +372,13 @@ def get_event_rec_list( elif user_id: sql_where_type_id = f'`event`.user_id = :user_id' - if enabled in ['enabled', 'disabled', 'all']: - if enabled == 'enabled': - data['enable'] = True - sql_enabled = f'AND `event`.enable = :enable' - elif enabled == 'disabled': - data['enable'] = False - sql_enabled = f'AND `event`.enable = :enable' - elif enabled == 'all': - sql_enabled = '' - else: - sql_enabled = f'AND `event`.enable = :enable' - sql = f""" SELECT `event`.id AS 'event_id', `event`.id_random AS 'event_id_random' FROM `event` AS `event` WHERE {sql_where_type_id} {sql_enabled} + {sql_archived} {sql_conference} ORDER BY `event`.created_on DESC, `event`.updated_on DESC {sql_limit}; @@ -379,26 +391,15 @@ def get_event_rec_list( elif user_id: sql_inner_join = f'`user` ON event_person.user_id = user.id AND user.id AND user.id = :user_id' - if enabled in ['enabled', 'disabled', 'all']: - if enabled == 'enabled': - data['enable'] = True - sql_enabled = f'`event`.enable = :enable' - elif enabled == 'disabled': - data['enable'] = False - sql_enabled = f'`event`.enable = :enable' - elif enabled == 'all': - sql_enabled = '' - else: - sql_enabled = f'`event`.enable = :enable' - sql = f""" SELECT `event`.id AS 'event_id', `event`.id_random AS 'event_id_random' FROM `event` AS `event` INNER JOIN `event_person` ON event.id = event_person.event_id /*INNER JOIN `person` ON event_person.person_id = person.id*/ INNER JOIN {sql_inner_join} - WHERE + WHERE 1=1 {sql_enabled} + {sql_archived} {sql_conference} ORDER BY `event`.created_on DESC, `event`.updated_on DESC {sql_limit}; diff --git a/app/models/event_cfg_models.py b/app/models/event_cfg_models.py index ed9f540..9c79635 100644 --- a/app/models/event_cfg_models.py +++ b/app/models/event_cfg_models.py @@ -31,6 +31,8 @@ class Event_Cfg_Base(BaseModel): enable_from: Optional[datetime.datetime] enable_to: Optional[datetime.datetime] + conference: Optional[bool] + enable_comments: Optional[bool] disable_navigation: Optional[bool] diff --git a/app/models/event_models.py b/app/models/event_models.py index 242c38b..1e3e789 100644 --- a/app/models/event_models.py +++ b/app/models/event_models.py @@ -48,7 +48,7 @@ class Event_Base(BaseModel): lu_event_type_id: Optional[int] #lu_event_type: Optional[str] # Needs to be reviewed - conference: Optional[bool] + conference: Optional[bool] # Also in Event_Cfg_Base model # type_name: Optional[str] = Field( # alias = 'type' @@ -118,6 +118,9 @@ class Event_Base(BaseModel): enable_from: Optional[datetime.datetime] = None enable_to: Optional[datetime.datetime] = None + archive: Optional[bool] # Also in Event_Cfg_Base model + archive_on: Optional[datetime.datetime] # Also in Event_Cfg_Base model + hide: Optional[bool] # Also in Event_Cfg_Base model priority: Optional[bool] sort: Optional[int] @@ -242,6 +245,18 @@ class Event_Base(BaseModel): return redis_lookup_id_random(record_id_random=values['contact_3_id_random'], table_name='contact') return None + @validator('created_on', always=True) + def created_on_utc(cls, v, values, **kwargs): + if isinstance(v, datetime.datetime): + return v.astimezone(pytz.UTC).isoformat() + else: return v + + @validator('updated_on', always=True) + def updated_on_utc(cls, v, values, **kwargs): + if isinstance(v, datetime.datetime): + return v.astimezone(pytz.UTC).isoformat() + else: return v + class Config: underscore_attrs_are_private = True allow_population_by_field_name = True diff --git a/app/routers/event.py b/app/routers/event.py index b56c681..0fee437 100644 --- a/app/routers/event.py +++ b/app/routers/event.py @@ -349,8 +349,9 @@ async def get_event_obj( @router.get('/account/{account_id}/event/list', response_model=Resp_Body_Base) async def get_account_obj_event_list( account_id: str = Query(..., min_length=1, max_length=22), - limit: int = 500, # For now this covers any included objects or object lists - enabled: str = 'enabled', # For now this covers any included objects or object lists + limit: int = 500, + enabled: str = 'enabled', + archived: str = 'not_archived', # archived, not_archived, all conference: bool = False, # Events with badges, sessions, presentations, presenters, registration, etc # inc_account_cfg: bool = False, inc_address: bool = False, # Under event and under contact @@ -400,6 +401,7 @@ async def get_account_obj_event_list( account_id = account_id, limit = limit, enabled = enabled, + archived = archived, conference = conference, ): event_result_list = []