From 33ec6a4acbbe87539a044d91fa72487c8b19092f Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Mon, 7 Jun 2021 16:48:55 -0400 Subject: [PATCH] A lot of work on event related modules. Also a lot of clean up --- app/db_sql.py | 71 ++++++- app/lib_general.py | 4 +- app/main.py | 16 +- app/methods/event_person_methods.py | 6 +- app/methods/event_presenter_methods.py | 61 +++--- app/methods/event_session_methods.py | 2 +- app/models/core_object_models.py | 2 +- app/models/event_presenter_models.py | 16 +- app/routers/api_crud.py | 18 +- app/routers/event.py | 4 +- app/routers/event_person.py | 16 +- app/routers/event_person_detail.py | 2 +- app/routers/event_presenter.py | 261 +++++++++++++++++++++++++ app/routers/event_session.py | 10 +- 14 files changed, 423 insertions(+), 66 deletions(-) create mode 100644 app/routers/event_presenter.py diff --git a/app/db_sql.py b/app/db_sql.py index 9749be7..5215f05 100644 --- a/app/db_sql.py +++ b/app/db_sql.py @@ -3,7 +3,7 @@ import datetime, pytz, redis, secrets from timeit import default_timer as timer from app.config import settings -from .log import * +from app.log import log, logging #from .lib_general import lookup_id_random_pop from sqlalchemy import create_engine, text, Time @@ -741,6 +741,7 @@ def redis_lookup_id_random(record_id_random:int|str, table_name:str): # ### BEGIN ### API Lib General ### lookup_id_random_pop() ### # Look up and resolve id_random values to their id # Remove the unneeded *_id_random key from the dict +# This really needs to be simplified... Use a list of dicts instead. Can store as JSON in the DB. def lookup_id_random_pop(obj_data:dict): #log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) @@ -769,14 +770,66 @@ def lookup_id_random_pop(obj_data:dict): obj_data['event_id'] = redis_lookup_id_random(record_id_random=obj_data.get('event_id_random', None), table_name='event') obj_data.pop('event_id_random') + if 'event_abstract_id_random' in obj_data: + obj_data['event_abstract_id'] = redis_lookup_id_random(record_id_random=obj_data.get('event_abstract_id_random', None), table_name='event_abstract') + obj_data.pop('event_abstract_id_random') + + if 'event_badge_id_random' in obj_data: + obj_data['event_badge_id'] = redis_lookup_id_random(record_id_random=obj_data.get('event_badge_id_random', None), table_name='event_badge') + obj_data.pop('event_badge_id_random') + if 'event_exhibit_id_random' in obj_data: obj_data['event_exhibit_id'] = redis_lookup_id_random(record_id_random=obj_data.get('event_exhibit_id_random', None), table_name='event_exhibit') obj_data.pop('event_exhibit_id_random') + if 'event_file_id_random' in obj_data: + obj_data['event_file_id'] = redis_lookup_id_random(record_id_random=obj_data.get('event_file_id_random', None), table_name='event_file') + obj_data.pop('event_file_id_random') + + if 'event_location_id_random' in obj_data: + obj_data['event_location_id'] = redis_lookup_id_random(record_id_random=obj_data.get('event_location_id_random', None), table_name='event_location') + obj_data.pop('event_location_id_random') + + if 'event_person_id_random' in obj_data: + obj_data['event_person_id'] = redis_lookup_id_random(record_id_random=obj_data.get('event_person_id_random', None), table_name='event_person') + obj_data.pop('event_person_id_random') + + if 'event_presentation_id_random' in obj_data: + obj_data['event_presentation_id'] = redis_lookup_id_random(record_id_random=obj_data.get('event_presentation_id_random', None), table_name='event_presentation') + obj_data.pop('event_presentation_id_random') + + if 'event_presenter_id_random' in obj_data: + obj_data['event_presenter_id'] = redis_lookup_id_random(record_id_random=obj_data.get('event_presenter_id_random', None), table_name='event_presenter') + obj_data.pop('event_presenter_id_random') + + if 'event_registration_id_random' in obj_data: + obj_data['event_registration_id'] = redis_lookup_id_random(record_id_random=obj_data.get('event_registration_id_random', None), table_name='event_registration') + obj_data.pop('event_registration_id_random') + + if 'event_session_id_random' in obj_data: + obj_data['event_session_id'] = redis_lookup_id_random(record_id_random=obj_data.get('event_session_id_random', None), table_name='event_session') + obj_data.pop('event_session_id_random') + + if 'event_track_id_random' in obj_data: + obj_data['event_track_id'] = redis_lookup_id_random(record_id_random=obj_data.get('event_track_id_random', None), table_name='event_track') + obj_data.pop('event_track_id_random') + if 'hosted_file_id_random' in obj_data: obj_data['hosted_file_id'] = redis_lookup_id_random(record_id_random=obj_data.get('hosted_file_id_random', None), table_name='hosted_file') obj_data.pop('hosted_file_id_random') + if 'journal_file_id_random' in obj_data: + obj_data['journal_file_id'] = redis_lookup_id_random(record_id_random=obj_data.get('journal_file_id_random', None), table_name='journal_file') + obj_data.pop('journal_file_id_random') + + if 'journal_entry_file_id_random' in obj_data: + obj_data['journal_entry_file_id'] = redis_lookup_id_random(record_id_random=obj_data.get('journal_entry_file_id_random', None), table_name='journal_entry_file') + obj_data.pop('journal_entry_file_id_random') + + if 'membership_entry_file_id_random' in obj_data: + obj_data['membership_entry_file_id'] = redis_lookup_id_random(record_id_random=obj_data.get('membership_entry_file_id_random', None), table_name='membership_entry_file') + obj_data.pop('membership_entry_file_id_random') + if 'order_id_random' in obj_data: obj_data['order_id'] = redis_lookup_id_random(record_id_random=obj_data.get('order_id_random', None), table_name='order') obj_data.pop('order_id_random') @@ -797,10 +850,22 @@ def lookup_id_random_pop(obj_data:dict): obj_data['organization_id'] = redis_lookup_id_random(record_id_random=obj_data.get('organization_id_random', None), table_name='organization') obj_data.pop('organization_id_random') + if 'page_id_random' in obj_data: + obj_data['page_id'] = redis_lookup_id_random(record_id_random=obj_data['page_id_random'], table_name='page') + obj_data.pop('page_id_random') + if 'person_id_random' in obj_data: obj_data['person_id'] = redis_lookup_id_random(record_id_random=obj_data['person_id_random'], table_name='person') obj_data.pop('person_id_random') + if 'poc_event_person_id_random' in obj_data: + obj_data['poc_event_person_id'] = redis_lookup_id_random(record_id_random=obj_data['poc_event_person_id_random'], table_name='event_person') + obj_data.pop('poc_event_person_id_random') + + if 'poc_person_id_random' in obj_data: + obj_data['poc_person_id'] = redis_lookup_id_random(record_id_random=obj_data['poc_person_id_random'], table_name='person') + obj_data.pop('poc_person_id_random') + if 'post_id_random' in obj_data: obj_data['post_id'] = redis_lookup_id_random(record_id_random=obj_data.get('post_id_random', None), table_name='post') obj_data.pop('post_id_random') @@ -809,6 +874,10 @@ def lookup_id_random_pop(obj_data:dict): obj_data['product_id'] = redis_lookup_id_random(record_id_random=obj_data['product_id_random'], table_name='product') obj_data.pop('product_id_random') + if 'site_id_random' in obj_data: + obj_data['site_id'] = redis_lookup_id_random(record_id_random=obj_data['site_id_random'], table_name='site') + obj_data.pop('site_id_random') + if 'user_id_random' in obj_data: obj_data['user_id'] = redis_lookup_id_random(record_id_random=obj_data['user_id_random'], table_name='user') obj_data.pop('user_id_random') diff --git a/app/lib_general.py b/app/lib_general.py index c378e0d..a01b987 100644 --- a/app/lib_general.py +++ b/app/lib_general.py @@ -7,8 +7,8 @@ from fastapi import APIRouter, Depends, Header, HTTPException, status from pydantic import BaseModel, EmailStr, Field from typing import Dict, List, Optional, Set, Union -from .log import * -from .db_sql import sql_select +from app.log import * +from app.db_sql import sql_select # ### BEGIN ### API Lib General ### async get_token_header() ### diff --git a/app/main.py b/app/main.py index 0268639..76a9ab8 100644 --- a/app/main.py +++ b/app/main.py @@ -14,13 +14,13 @@ from sqlalchemy import create_engine, text from sqlalchemy.exc import IntegrityError, OperationalError from . import config -from .lib_general import * -from .log import * +from app.lib_general import * +from app.log import log # Import the routers here first: -from .routers import api_crud, api, account, address, archive, archive_content, contact, event, event_exhibit, event_person, event_person_detail, event_registration, event_session, flask_cfg, hosted_file, journal, journal_entry, lookup, membership, order, order_cart, organization, page, person, post, post_comment, product, site, site_domain, user, user_person, websockets # , items, journals +from app.routers import api_crud, api, account, address, archive, archive_content, contact, event, event_exhibit, event_person, event_person_detail, event_presenter, event_registration, event_session, flask_cfg, hosted_file, journal, journal_entry, lookup, membership, order, order_cart, organization, page, person, post, post_comment, product, site, site_domain, user, user_person, websockets # , items, journals -from .db_sql import db +from app.db_sql import db print('### **** *** ** * The Aether FastAPI API app is loading... * ** *** **** ###') @@ -142,6 +142,14 @@ app.include_router( #dependencies=[Depends(get_account_header)], #responses={404: {'description': 'Not found'}}, ) +app.include_router( + event_presenter.router, + prefix='/event/presenter', + tags=['Event Presenter'], + #dependencies=[DependPresenter(get_token_header)], + #dependencies=[Depends(get_account_header)], + #responses={404: {'description': 'Not found'}}, +) app.include_router( event_registration.router, prefix='/event/registration', diff --git a/app/methods/event_person_methods.py b/app/methods/event_person_methods.py index e76a108..4aec16c 100644 --- a/app/methods/event_person_methods.py +++ b/app/methods/event_person_methods.py @@ -11,10 +11,10 @@ from app.lib_general import log, logging # 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_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_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 diff --git a/app/methods/event_presenter_methods.py b/app/methods/event_presenter_methods.py index 4072d52..636fcce 100644 --- a/app/methods/event_presenter_methods.py +++ b/app/methods/event_presenter_methods.py @@ -8,6 +8,7 @@ from app.db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_updat from app.lib_general import log, logging # from app.methods.event_file_methods import load_event_file_obj +from app.methods.event_person_methods import load_event_person_obj # from app.methods.event_presenter_methods import load_event_presenter_obj # from app.methods.person_methods import load_person_obj # from app.methods.user_methods import load_user_obj @@ -20,15 +21,18 @@ def load_event_presenter_obj( event_presenter_id: int|str, enabled: str = 'enabled', # enabled, disabled, all limit: int = 1000, - inc_event_abstract_list: bool = False, - inc_event_badge: bool = False, - inc_event_device_list: bool = False, - inc_event_file_list: bool = False, - inc_event_person: bool = False, - inc_person: bool = False, - inc_user: bool = False, + inc_event_abstract_list: bool = False, # For event_presenter and using load_event_person_obj + inc_event_badge: bool = False, # Using load_event_person_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_presentation: bool = False, + inc_event_registration: bool = False, # Using load_event_person_obj + # inc_event_session: bool = False, + inc_person: bool = False, # Using load_event_person_obj + inc_user: bool = False, # Using load_event_person_obj ) -> Event_Presenter_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_presenter_id := redis_lookup_id_random(record_id_random=event_presenter_id, table_name='event_presenter'): pass @@ -48,10 +52,6 @@ def load_event_presenter_obj( # event_presenter_obj = Event_Presenter_Base(**event_presenter_rec) # log.debug(event_presenter_obj) - return False - - # *** ** * Everything below needs to be reviewed * ** *** - #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) @@ -61,17 +61,21 @@ def load_event_presenter_obj( 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: pass if inc_event_abstract_list: pass - #if inc_event_badge_list: pass if inc_event_device_list: pass if inc_event_file_list: pass + if inc_event_person: log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL if event_person_obj := load_event_person_obj( event_person_id=event_person_id, - enabled=enabled + enabled=enabled, + 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 @@ -79,20 +83,21 @@ def load_event_presenter_obj( log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(event_person_obj) 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 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: return False diff --git a/app/methods/event_session_methods.py b/app/methods/event_session_methods.py index 39b4953..a0fd289 100644 --- a/app/methods/event_session_methods.py +++ b/app/methods/event_session_methods.py @@ -35,7 +35,7 @@ def load_event_session_obj( inc_event_registration_list: bool = False, inc_event_track: bool = False, inc_poc_event_person: bool = False, - inc_poc_person: bool = False, + # inc_poc_person: bool = False, # inc_user: bool = False, ) -> Event_Session_Base|bool: log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL diff --git a/app/models/core_object_models.py b/app/models/core_object_models.py index b9a4815..7755a4f 100644 --- a/app/models/core_object_models.py +++ b/app/models/core_object_models.py @@ -7,7 +7,7 @@ from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationEr from app.db_sql import redis_lookup_id_random from app.lib_general import * -from .common_field_schema import base_fields, default_num_bytes +from app.common_field_schema import base_fields, default_num_bytes class Core_Object_Base(BaseModel): diff --git a/app/models/event_presenter_models.py b/app/models/event_presenter_models.py index 1fd3989..2d7c250 100644 --- a/app/models/event_presenter_models.py +++ b/app/models/event_presenter_models.py @@ -9,12 +9,13 @@ from app.lib_general import log, logging from .common_field_schema import base_fields, default_num_bytes -#from .event_models import Event_Base +# from .event_models import Event_Base from .event_abstract_models import Event_Abstract_Base from .event_person_models import Event_Person_Base from .event_presentation_models import Event_Presentation_Base from .event_session_models import Event_Session_Base -from .person_models import Person_Base +# from .person_models import Person_Base +# from .user_models import User_Base class Event_Presenter_Base(BaseModel): @@ -94,17 +95,18 @@ class Event_Presenter_Base(BaseModel): updated_on: Optional[datetime.datetime] = None # Including other related objects - #event: Optional[Event_Base] + # event: Optional[Event_Base] event_abstract: Optional[Event_Abstract_Base] event_abstract_list: Optional[list] # Optional[Event_Abstract_Base] Is more than one abstract allowed per presenter? - #event_device_list: Optional[list] # Optional[Event_Device_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[Event_Location_Base] event_person: Optional[Event_Person_Base] event_presentation: Optional[Event_Presentation_Base] event_session: Optional[Event_Session_Base] - #event_track: Optional[Event_Track_Base] - person: Optional[Person_Base] + # event_track: Optional[Event_Track_Base] + # person: Optional[Person_Base] # This is under event_person + # user: Optional[User_Base] # This is under event_person _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) diff --git a/app/routers/api_crud.py b/app/routers/api_crud.py index c4aaaa9..43adae0 100644 --- a/app/routers/api_crud.py +++ b/app/routers/api_crud.py @@ -17,10 +17,17 @@ from app.models.archive_models import * from app.models.archive_content_models import * from app.models.contact_models import * from app.models.event_models import * +from app.models.event_abstract_models import * +from app.models.event_badge_models import * from app.models.event_exhibit_models import * +#from app.models.event_file_models import * from app.models.event_location_models import * from app.models.event_person_models import * +from app.models.event_presentation_models import * +from app.models.event_presenter_models import * from app.models.event_registration_models import * +from app.models.event_session_models import * +from app.models.event_track_models import * from app.models.journal_entry_models import * from app.models.membership_models import * from app.models.order_models import * @@ -54,18 +61,19 @@ obj_type_li['archive_content'] = {'table_name': 'v_archive_content', 'base_name' obj_type_li['contact'] = {'table_name': 'v_contact', 'base_name': Contact_Base} #obj_type_li['cont_edu_cert'] = {'table_name': 'cont_edu_cert', 'base_name': Cont_Edu_Cert_Base} obj_type_li['event'] = {'table_name': 'v_event', 'base_name': Event_Base} -#obj_type_li['event_badge'] = {'table_name': 'event_badge', 'base_name': Event_Badge_Base} +obj_type_li['event_badge'] = {'table_name': 'event_badge', 'base_name': Event_Badge_Base} #obj_type_li['event_badge_log'] = {'table_name': 'event_badge_log', 'base_name': Event_Badge_Log_Base} #obj_type_li['event_badge_template'] = {'table_name': 'event_badge_template', 'base_name': Event_Badge_Template_Base} #obj_type_li['event_device'] = {'table_name': 'event_device', 'base_name': Event_Device_Base} obj_type_li['event_exhibit'] = {'table_name': 'v_event_exhibit', 'base_name': Event_Exhibit_Base} # NOTE check view name: *_detail? #obj_type_li['event_file'] = {'table_name': 'v_event_file', 'base_name': Event_File_Base} # Should this eventually be changed to event_hosted_file obj_type_li['event_location'] = {'table_name': 'v_event_location', 'base_name': Event_Location_Base} -#obj_type_li['event_presentation'] = {'table_name': 'v_event_presentation', 'base_name': Event_Presentation_Base} -#obj_type_li['event_presenter'] = {'table_name': 'v_event_presenter', 'base_name': Event_Presenter_Base} +obj_type_li['event_person'] = {'table_name': 'v_event_person', 'base_name': Event_Person_Base} +obj_type_li['event_presentation'] = {'table_name': 'v_event_presentation', 'base_name': Event_Presentation_Base} +obj_type_li['event_presenter'] = {'table_name': 'v_event_presenter', 'base_name': Event_Presenter_Base} obj_type_li['event_registration'] = {'table_name': 'v_event_registration', 'base_name': Event_Registration_Base} -#obj_type_li['event_session'] = {'table_name': 'v_event_session', 'base_name': Event_Session_Base} -#obj_type_li['event_track'] = {'table_name': 'v_event_track', 'base_name': Event_Track_Base} +obj_type_li['event_session'] = {'table_name': 'v_event_session', 'base_name': Event_Session_Base} +obj_type_li['event_track'] = {'table_name': 'v_event_track', 'base_name': Event_Track_Base} #obj_type_li['hosted_file'] = {'table_name': 'hosted_file', 'base_name': Hosted_File_Base} #obj_type_li['hosted_file_link'] = {'table_name': 'hosted_file_link', 'base_name': Hosted_File_Link_Base} #obj_type_li['journal'] = {'table_name': 'v_journal', 'base_name': Journal_Base} diff --git a/app/routers/event.py b/app/routers/event.py index 08a4b79..8738367 100644 --- a/app/routers/event.py +++ b/app/routers/event.py @@ -5,11 +5,11 @@ from pydantic import BaseModel, EmailStr, Field from typing import Dict, List, Optional, Set, Union from app.lib_general import * -from ..log import * +# from ..log import * from app.config import settings from app.db_sql import * -from .api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template +from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template from app.methods.event_methods import load_event_obj diff --git a/app/routers/event_person.py b/app/routers/event_person.py index ba2b681..534d7f6 100644 --- a/app/routers/event_person.py +++ b/app/routers/event_person.py @@ -24,6 +24,11 @@ from app.models.user_models import User_New_Base, User_Base router = APIRouter() +# ### BEGIN ### API Event Person Route ### 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('/new', response_model=Resp_Body_Base) async def post_event_person_new( event_person_new_init: Event_Person_New_Base, @@ -97,8 +102,6 @@ async def post_event_person_new( log.debug('A new person was not created') return mk_resp(data=False) - #return mk_resp(data=person_obj) - # New user user_new = {} user_new['account_id_random'] = account_id_random @@ -124,8 +127,6 @@ async def post_event_person_new( log.debug('A new user was not created') return mk_resp(data=False) - #return mk_resp(data=user_obj) - # New event person event_person_new = {} event_person_new['account_id_random'] = account_id_random @@ -158,12 +159,15 @@ async def post_event_person_new( event_person_obj.user = user_obj log.debug(event_person_obj) + event_person_dict = event_person_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) + pass else: log.debug('A new event_person was not created') return mk_resp(data=False) - log.debug(event_person_obj) - return mk_resp(data=event_person_obj) + 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 ### get_event_person_obj() ### diff --git a/app/routers/event_person_detail.py b/app/routers/event_person_detail.py index a2e828e..722fc93 100644 --- a/app/routers/event_person_detail.py +++ b/app/routers/event_person_detail.py @@ -9,7 +9,7 @@ from app.lib_general import log, logging from app.config import settings from app.db_sql import * -from .api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template +from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template from app.models.event_person_detail_models import Event_Person_Detail_Base from app.models.response_models import * diff --git a/app/routers/event_presenter.py b/app/routers/event_presenter.py new file mode 100644 index 0000000..66fa358 --- /dev/null +++ b/app/routers/event_presenter.py @@ -0,0 +1,261 @@ +import datetime +#from datetime import datetime, time, timedelta +from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, status +from pydantic import BaseModel, EmailStr, Field +from typing import Dict, List, Optional, Set, Union + +from app.lib_general import log, logging +#from ..log import * +from app.config import settings +from app.db_sql import * + +from .api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template + +from app.methods.event_presenter_methods import load_event_presenter_obj + +from app.models.event_presenter_models import Event_Presenter_Base +from app.models.response_models import * + + +router = APIRouter() + + +@router.post('', response_model=Resp_Body_Base) +async def post_event_presenter_obj( + obj: Event_Presenter_Base, + x_account_id: str = Header(...), + return_obj: Optional[bool] = True, + by_alias: Optional[bool] = True, + exclude_unset: Optional[bool] = True, + ): + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + obj_type = 'event_presenter' + obj_data_dict = obj.dict(by_alias=False, exclude_unset=True) + result = post_obj_template( + obj_type=obj_type, + data=obj_data_dict, + return_obj=True, + by_alias=True, + exclude_unset=True, + ) + return result + + +@router.patch('/{obj_id}', response_model=Resp_Body_Base) +async def patch_event_presenter_obj( + obj: Event_Presenter_Base, + obj_id: str = Query(..., min_length=1, max_length=22), + x_account_id: Optional[str] = Header(..., ), + return_obj: Optional[bool] = True, + by_alias: Optional[bool] = True, + exclude_unset: Optional[bool] = True, + ): + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + obj_type = 'event_presenter' + obj_data_dict = obj.dict(by_alias=False, exclude_unset=True) + obj_data_dict['id'] = redis_lookup_id_random(record_id_random=obj_id, table_name=obj_type) + obj_data_dict['id_random'] = obj_id + result = patch_obj_template( + obj_type=obj_type, + data=obj_data_dict, + obj_id=obj_id, + return_obj=True, + by_alias=True, + exclude_unset=True, + ) + return result + + +@router.get('/list', response_model=Resp_Body_Base) +async def get_event_presenter_obj_li( + for_obj_type: Optional[str] = Query(None, min_length=2, max_length=50), # account + for_obj_id: Optional[str] = Query(None, min_length=1, max_length=22), + enabled: str = 'enabled', # enabled, disabled, all + limit: int = 500, + inc_event_abstract_list: bool = False, # Part of event_presenter and under event_person obj + inc_event_badge: bool = False, # Under event_person obj + inc_event_device_list: bool = False, # Part of event_presenter and under event_person obj + inc_event_file_list: bool = False, # Part of event_presenter and under event_person obj + inc_event_person: bool = False, + inc_event_registration: bool = False, # Under event_person obj + inc_person: bool = False, # Under event_person obj + inc_user: bool = False, # Under event_person obj + x_account_id: str = Header(...), + by_alias: bool = True, + exclude_unset: bool = True, + ): + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + data = {} + if for_obj_type == 'account' and for_obj_id: + data['account_id'] = redis_lookup_id_random(record_id_random=for_obj_id, table_name='account') + sql_for_obj_type_id = f'`event`.account_id = :account_id' + elif for_obj_type == 'event' and for_obj_id: + data['event_id'] = redis_lookup_id_random(record_id_random=for_obj_id, table_name='event') + sql_for_obj_type_id = f'`event_presenter`.event_id = :event_id' + elif for_obj_type == 'event_location' and for_obj_id: # NOTE: This needs to be checked and probably changed + data['event_location_id'] = redis_lookup_id_random(record_id_random=for_obj_id, table_name='event_location') + sql_for_obj_type_id = f'`event_presenter`.event_location_id = :event_location_id' + elif for_obj_type == 'event_presentation' and for_obj_id: + data['event_presentation_id'] = redis_lookup_id_random(record_id_random=for_obj_id, table_name='event_presentation') + sql_for_obj_type_id = f'`event_presenter`.event_presentation_id = :event_presentation_id' + elif for_obj_type == 'event_session' and for_obj_id: + data['event_session_id'] = redis_lookup_id_random(record_id_random=for_obj_id, table_name='event_session') + sql_for_obj_type_id = f'`event_presenter`.event_session_id = :event_session_id' + elif for_obj_type == 'event_track' and for_obj_id: # NOTE: This needs to be checked and probably changed + data['event_track_id'] = redis_lookup_id_random(record_id_random=for_obj_id, table_name='event_track') + sql_for_obj_type_id = f'`event_presenter`.event_track_id = :event_track_id' + else: + sql_for_obj_type_id = '' + return mk_resp(data=False, status_code=400) + + 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 = '' + else: + return mk_resp(data=False, status_code=400) + + 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_for_obj_type_id} + {sql_enabled} + ORDER BY `event_presenter`.created_on DESC, `event_presenter`.updated_on DESC + {sql_limit}; + """ + + if event_presenter_li_result := sql_select(data=data, sql=sql, as_list=True): + log.debug(event_presenter_li_result) + event_presenter_li = [] + for event_presenter in event_presenter_li_result: + event_presenter_id = event_presenter.get('event_presenter_id', None) + if event_presenter_obj := load_event_presenter_obj( + event_presenter_id=event_presenter_id, + enabled=enabled, + inc_event_abstract_list=inc_event_abstract_list, + inc_event_badge_list=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_presentation_list=inc_event_presentation_list, + #inc_event_presenter_list=inc_event_presenter_list, + inc_event_registration_list=inc_event_registration, + #inc_event_track=inc_event_track, + inc_person=inc_person, + inc_user=inc_user, + ): + data = event_presenter_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) + event_presenter_li.append(data) + return mk_resp(data=event_presenter_li) + else: + log.debug(event_presenter_li_result) + return mk_resp(data=False, status_code=404) + + +# @router.get('/{obj_id}', response_model=Resp_Body_Base) +# async def get_event_presenter_obj( +# obj_id: str = Query(..., min_length=1, max_length=22), +# 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.debug(locals()) + +# obj_type = 'event_presenter' +# result = get_obj_template( +# obj_type=obj_type, +# obj_id=obj_id, +# by_alias=True, +# exclude_unset=True, +# ) +# return result + + +# ### BEGIN ### API Event Presenter ### get_event_presenter_obj() ### +# Working well as of 2021-06-07. Using as a template for other routes. +@router.get('/{event_presenter_id}', response_model=Resp_Body_Base) +async def get_event_presenter_obj( + event_presenter_id: str = Query(..., min_length=1, max_length=22), + enabled: str = 'enabled', # enabled, disabled, all; 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, # Part of event_presenter and under event_person obj + inc_event_badge: bool = False, # Under event_person obj + inc_event_device_list: bool = False, # Part of event_presenter and under event_person obj + inc_event_file_list: bool = False, # Part of event_presenter and under event_person obj + inc_event_person: bool = False, + # inc_event_presentation: bool = False, # NOTE: Placehold for future? + # inc_event_presentation_list: bool = False, # NOTE: Placehold for future? + # inc_event_presenter_list: bool = False, # NOTE: Placehold for future? + inc_event_registration: bool = False, # Under event_person obj + # inc_event_session: bool = False, # NOTE: Placehold for future? + # inc_event_session_list: bool = False, # NOTE: Placehold for future? + inc_person: bool = False, # Under event_person obj + inc_user: bool = False, # Under event_person obj + 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_presenter_id := redis_lookup_id_random(record_id_random=event_presenter_id, table_name='event_presenter'): pass + else: + return mk_resp(data=None, status_code=404) + + if event_presenter_obj := load_event_presenter_obj( + event_presenter_id=event_presenter_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_file_list=inc_event_file_list, + inc_event_person=inc_event_person, + # inc_event_presentation=inc_event_presentation, + inc_event_registration=inc_event_registration, + # inc_event_session=inc_event_session, + inc_person=inc_person, + inc_user=inc_user, + ): + event_presenter_dict = event_presenter_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_presenter_dict) + #return mk_resp(data=event_presenter_obj) +# ### END ### API Event ### get_event_presenter_obj() ### + + +@router.delete('/{obj_id}', response_model=Resp_Body_Base) +async def delete_event_presenter_obj( + obj_id: str = Query(..., min_length=1, max_length=22), + x_account_id: str = Header(...), + ): + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + obj_type = 'event_presenter' + result = delete_obj_template( + obj_type=obj_type, + obj_id=obj_id, + ) + return result \ No newline at end of file diff --git a/app/routers/event_session.py b/app/routers/event_session.py index 6e99bf7..677ec89 100644 --- a/app/routers/event_session.py +++ b/app/routers/event_session.py @@ -99,7 +99,7 @@ async def get_event_session_obj_li( enabled: str = 'enabled', # enabled, disabled, all from_datetime: Optional[datetime.datetime] = None, # based on start_datetime to_datetime: Optional[datetime.datetime] = None, # based on start_datetime - limit: int = None, + limit: int = 500, inc_event_abstract_list: bool = False, inc_event_badge_list: bool = False, inc_event_device_list: bool = False, @@ -111,8 +111,8 @@ async def get_event_session_obj_li( 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_poc_person: bool = False, + # inc_user: bool = False, x_account_id: str = Header(...), by_alias: bool = True, exclude_unset: bool = True, @@ -197,8 +197,8 @@ async def get_event_session_obj_li( inc_event_registration_list=inc_event_registration_list, inc_event_track=inc_event_track, inc_poc_event_person=inc_poc_event_person, - inc_poc_person=inc_poc_person, - inc_user=inc_user, + # inc_poc_person=inc_poc_person, + # inc_user=inc_user, ): data = event_session_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) event_session_li.append(data)