import datetime, secrets from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, Response, status from pydantic import BaseModel, EmailStr, Field from typing import Dict, List, Optional, Set, Union from app.lib_general import log, logging from app.config import settings from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, get_id_random, redis_lookup_id_random 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_person_methods import create_event_person_obj, create_update_event_person_obj_v4, get_event_person_rec_list, load_event_person_obj, update_event_person_obj, update_event_person_obj_v3 from app.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.methods.user_load_methods import load_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 from app.models.person_models import Person_Base from app.models.response_models import Resp_Body_Base, mk_resp from app.models.user_models import User_New_Base, User_Base router = APIRouter() # ### BEGIN ### API Event Person ### v4_post_event_person_obj_new() ### # Updated 2021-08-25 @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 inc_event_badge: bool = False, inc_event_person_profile: bool = False, inc_person: bool = False, inc_user: bool = False, x_account_id: str = Header(...), return_obj: bool = False, # Should this default to False??? -2023-05-05 limit: int = 500, enabled: str = 'enabled', by_alias: bool = True, exclude_unset: bool = True, response: Response = Response, ): log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) # There should probably be a check for the event ID before calling the create function? if create_event_person_obj_result := create_update_event_person_obj_v4( event_person_dict_obj = event_person_obj, account_id = x_account_id, event_id = event_person_obj.event_id, create_sub_obj = create_sub_obj, fail_any = fail_any, return_outline = False, ): pass else: return mk_resp(data=False, status_code=400, response=response, status_message='The event person was not created. Check the field names and data types.') if isinstance(create_event_person_obj_result, int): event_person_id = create_event_person_obj_result if return_obj: if load_event_person_obj_result := load_event_person_obj( event_person_id = event_person_id, inc_event_badge = inc_event_badge, inc_event_person_profile = inc_event_person_profile, inc_person = inc_person, inc_user = inc_user, ): data = load_event_person_obj_result else: data = False else: event_person_id = create_event_person_obj_result event_person_id_random = get_id_random(record_id=event_person_id, table_name='event_person') data = {} data['event_person_id'] = event_person_id data['event_person_id_random'] = event_person_id_random 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 ### v4_post_event_person_obj_new() ### # ### BEGIN ### API Event Person ### v4_patch_event_person_obj_exist() ### # Updated 2023-07-06 @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, fail_any: bool = True, # Fail if any thing goes wrong for sub objects inc_event_badge: bool = False, inc_event_person_profile: bool = False, inc_person: bool = False, inc_user: bool = False, x_account_id: Optional[str] = Header(..., ), return_obj: Optional[bool] = True, by_alias: Optional[bool] = True, exclude_unset: Optional[bool] = True, exclude_none: Optional[bool] = True, response: Response = Response, ): log.setLevel(logging.WARNING) # 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 update_event_person_obj_result := create_update_event_person_obj_v4( event_person_dict_obj = event_person_obj, event_person_id = event_person_id, account_id = x_account_id, event_id = event_person_obj.event_id, event_person_profile_id = event_person_obj.event_person_profile_id, create_sub_obj = create_sub_obj, fail_any = fail_any, return_outline = False, ): pass else: return mk_resp(data=False, status_code=400, response=response, status_message='The event person was not created. Check the field names and data types.') if update_event_person_obj_result: if return_obj: if load_event_person_obj_result := load_event_person_obj( event_person_id = event_person_id, inc_event_badge = inc_event_badge, inc_event_person_profile = inc_event_person_profile, inc_person = inc_person, inc_user = inc_user, ): data = load_event_person_obj_result else: data = False else: event_person_id_random = get_id_random(record_id=event_person_id, table_name='event_person') data = {} data['event_person_id'] = event_person_id data['event_person_id_random'] = event_person_id_random 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 ### v4_patch_event_person_obj_exist() ### # ### 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('/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, inc_event: bool = False, # Not ready yet. Placeholder. inc_event_badge: bool = False, # Not ready yet. Placeholder. inc_event_person_detail: bool = False, # Not ready yet. Placeholder. inc_event_person_profile: bool = False, inc_event_registration: bool = False, # Not ready yet. Placeholder. inc_person: bool = False, inc_user: bool = False, by_alias: bool = True, exclude_unset: bool = True, response: Response = Response, ): log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) log.debug(event_person_new_init) log.debug(vars(event_person_new_init)) log.debug(dir(event_person_new_init)) account_id_random = event_person_new_init.account_id_random event_id_random = event_person_new_init.event_id_random given_name = event_person_new_init.person_given_name family_name = event_person_new_init.person_family_name if full_name := event_person_new_init.person_full_name: pass elif given_name and family_name: full_name = f'{given_name} {family_name}' elif given_name: full_name = f'{given_name}' full_name_override = event_person_new_init.person_full_name_override email = event_person_new_init.email if new_password := event_person_new_init.new_password: pass else: new_password = secrets.token_urlsafe(default_num_bytes) affiliations = event_person_new_init.affiliations # New person person_new = {} person_new['account_id_random'] = account_id_random person_new['given_name'] = given_name person_new['family_name'] = family_name person_new['full_name'] = full_name person_new['display_name'] = full_name_override # NOTE This is using full_name_override for display_name person_new['affiliations'] = affiliations # New person contact person_new['contact'] = {} person_new['contact']['account_id_random'] = account_id_random person_new['contact']['email'] = email person_new['contact']['name'] = full_name # New person contact address person_new['contact']['address'] = {} person_new['contact']['address']['account_id_random'] = account_id_random person_new['contact']['address']['name'] = full_name person_obj_new = Person_Base(**person_new) log.debug(person_obj_new) return mk_resp(data=False, status_code=401, response=response) # TESTING TESTING TESTING create_person_obj_result = create_person_obj_v3(account_id=account_id_random, person_obj_new=person_obj_new) if isinstance(create_person_obj_result, int): person_id = create_person_obj_result person_obj = load_person_obj( person_id = person_id, inc_contact = True, inc_address = True, inc_organization = True, ) # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(person_obj) else: log.debug('A new person was not created') return mk_resp(data=False) # New user user_new = {} user_new['account_id_random'] = account_id_random user_new['name'] = full_name user_new['username'] = email user_new['email'] = email user_new['new_password'] = new_password # The string will be turned into a secure hash and stored in user.password. # user_new['contact_id_random'] = person_obj.contact.id_random # REMOVE: No longer used # user_new['person_id_random'] = person_obj.id_random # REMOVE: No longer used log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(user_new) user_obj_new = User_New_Base(**user_new) log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(user_obj_new) user_id = None user_obj = None create_user_obj_result = create_user_obj(account_id=account_id_random, user_dict_obj=user_obj_new) if isinstance(create_user_obj_result, bool): log.debug('Returning False since multiple users were found with the same username.') return mk_resp(data=False) elif isinstance(create_user_obj_result, int): user_id = create_user_obj_result user_obj = load_user_obj(user_id=user_id) # Not including roles, contact, or organization log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(user_obj) else: log.debug('A new user was not created') return mk_resp(data=False) # Update person with new user ID person_data_update = {} # person_data_update['user_id'] = user_id person_data_update['user_id_random'] = user_obj.id_random person_obj_update = Person_Base(**person_data_update) log.debug(person_obj_update) person_obj_update_result = update_person_obj( person_id = person_id, person_obj_up = person_obj_update ) if person_obj_update_result: log.debug('The new person was updated with the user ID') # person_id = person_obj_update_result # person_obj = load_person_obj( # person_id = person_id, # inc_contact = True, # inc_address = True, # inc_organization = True, # ) log.debug(person_obj_update_result) else: log.debug('A new person was not updated') return mk_resp(data=False) # New event person event_person_new = {} event_person_new['account_id_random'] = account_id_random event_person_new['event_id_random'] = event_id_random event_person_new['person_id_random'] = person_obj.id_random event_person_new['user_id_random'] = user_obj.id_random event_person_obj_new = Event_Person_Base(**event_person_new) log.debug(event_person_obj_new) event_person_obj_result = create_event_person_obj(event_person_obj_new=event_person_obj_new) if isinstance(event_person_obj_result, bool): log.debug('Returning False something is not right.') return mk_resp(data=False) elif isinstance(event_person_obj_result, int): event_person_id = event_person_obj_result event_person_obj = load_event_person_obj( event_person_id=event_person_id, # inc_event=inc_event, # Not ready yet. Placeholder. inc_event_badge=inc_event_badge, # Not ready yet. Placeholder. # inc_event_person_detail=inc_event_person_detail, # Not ready yet. Placeholder. inc_event_registration=inc_event_registration, # Not ready yet. Placeholder. inc_person=False, # Already loaded above inc_user=False, # Already loaded above ) log.debug(event_person_id) log.debug(event_person_obj) event_person_obj.person = person_obj 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) return mk_resp(data=event_person_dict) #return mk_resp(data=event_person_obj) # ### BEGIN ### API Event Person Route ### v2_post_event_person_new() ### # ### BEGIN ### API Event Person ### patch_event_person_json() ### @router.patch('/event/person/{event_person_id}/json', response_model=Resp_Body_Base) async def patch_event_person_json( event_person_obj: Event_Person_Base, event_person_id: str = Query(..., min_length=1, max_length=22), create_sub_obj: bool = False, x_account_id: Optional[str] = Header(..., ), return_obj: Optional[bool] = True, by_alias: Optional[bool] = True, include: Optional[list] = [], exclude: Optional[list] = [], exclude_unset: Optional[bool] = True, exclude_none: Optional[bool] = True, response: Response = Response, ): log.setLevel(logging.WARNING) # 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_up_result := update_event_person_obj( event_person_id=event_person_id, event_person_obj_up=event_person_obj, create_sub_obj=create_sub_obj, ): log.debug(event_person_obj_up_result) if return_obj: event_person_obj = load_event_person_obj(event_person_id=event_person_id) event_person_dict = event_person_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) return mk_resp(data=event_person_dict) else: return mk_resp(data=event_person_obj_up_result) else: return mk_resp(data=False, status_code=400, response=response) # Bad Request # ### END ### API Event Person ### patch_event_person_json() ### # ### 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/{event_person_id}', response_model=Resp_Body_Base) async def get_event_person_obj( event_person_id: str = Query(..., min_length=11, 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_address: bool = False, # Under contact inc_contact: bool = False, # Under person 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_person_profile: 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, response: Response = Response, ): 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, response=response) if event_person_obj := load_event_person_obj( event_person_id = event_person_id, enabled = enabled, limit = limit, 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_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_person_profile = inc_event_person_profile, 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_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, response=response) # Bad Request return mk_resp(data=event_person_obj, response=response) # ### END ### API Event Person ### get_event_person_obj() ### # ### BEGIN ### API Event Person ### search_event_person_obj_li() ### # Updated 2021-09-21 @router.get('/event/{event_id}/person/search', response_model=Resp_Body_Base) async def search_event_person_obj_li( # account_id: str = Query(None, min_length=11, max_length=22), event_id: str = Query(None, min_length=11, max_length=22), event_person_id: str = Query('', max_length=50), external_id: str = Query('', max_length=50), given_name: str = Query('', max_length=25), family_name: str = Query('', max_length=25), email: str = Query('', max_length=50), limit: int = 50, enabled: str = 'enabled', x_account_id: str = Header(...), by_alias: bool = True, exclude_unset: bool = True, response: Response = Response, ): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) if account_id := redis_lookup_id_random(record_id_random=x_account_id, table_name='account'): pass else: return mk_resp(data=None, status_code=404, response=response) if event_id: log.info(f'Looking up Event ID based on Event ID Random: {event_id}') if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass else: return mk_resp(data=None, status_code=404, response=response) if event_person_id: log.info(f'Looking up Event Person ID based on Event ID Random: {event_person_id}') 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, response=response) data = {} data['account_id'] = account_id data['event_id'] = event_id data['event_person_id'] = event_person_id data['external_id'] = '%'+external_id+'%' data['given_name'] = '%'+given_name+'%' data['family_name'] = '%'+family_name+'%' data['email'] = '%'+email+'%' # Adding the % symbol here because it turns certain combinations into special characters # data['from_datetime'] = from_datetime # data['to_datetime'] = to_datetime log.debug(data) if enabled in ['enabled', 'disabled', 'all']: if enabled == 'enabled': data['enable'] = True sql_enabled = f'AND `event_person`.enable = :enable' elif enabled == 'disabled': data['enable'] = False sql_enabled = f'AND `event_person`.enable = :enable' elif enabled == 'all': sql_enabled = '' if limit: data['limit'] = limit sql_limit = f'LIMIT :limit' else: sql_limit = '' if event_person_id: log.info('Looking up Event Person based on event_person_id') sql = f""" SELECT * FROM `v_event_person` AS event_person WHERE event_person.account_id = :account_id AND event_person.event_id = :event_id AND event_person.event_person_id LIKE :event_person_id {sql_enabled} ORDER BY event_person.event_person_family_name ASC, event_person.event_person_given_name ASC, event_person.created_on DESC, event_person.updated_on DESC {sql_limit}; """ elif external_id: log.info('Looking up Event Person based on external_id') sql = f""" SELECT * FROM `v_event_person` AS event_person WHERE event_person.account_id = :account_id AND event_person.event_id = :event_id AND event_person.external_id LIKE :external_id {sql_enabled} ORDER BY event_person.event_person_family_name ASC, event_person.event_person_given_name ASC, event_person.created_on DESC, event_person.updated_on DESC {sql_limit}; """ elif given_name and family_name and email: log.info('Looking up Event Person based on given_name, family_name, and email') sql = f""" SELECT * FROM `v_event_person` AS event_person WHERE event_person.account_id = :account_id AND event_person.event_id = :event_id AND (event_person.event_person_given_name LIKE :given_name OR event_person.person_given_name LIKE :given_name) AND (event_person.event_person_family_name LIKE :family_name OR event_person.person_family_name LIKE :family_name) AND (event_person.event_person_email LIKE :email OR event_person.user_email LIKE :email) {sql_enabled} ORDER BY event_person.event_person_family_name ASC, event_person.event_person_given_name ASC, event_person.created_on DESC, event_person.updated_on DESC {sql_limit}; """ elif given_name and family_name: log.info('Looking up Event Person based on given_name and family_name') sql = f""" SELECT * FROM `v_event_person` AS event_person WHERE event_person.account_id = :account_id AND event_person.event_id = :event_id AND (event_person.event_person_given_name LIKE :given_name OR event_person.person_given_name LIKE :given_name) AND (event_person.event_person_family_name LIKE :family_name OR event_person.person_family_name LIKE :family_name) AND (event_person.event_person_email IS NULL OR event_person.event_person_email LIKE :email OR event_person.user_email LIKE :email) {sql_enabled} ORDER BY event_person.event_person_family_name ASC, event_person.event_person_given_name ASC, event_person.created_on DESC, event_person.updated_on DESC {sql_limit}; """ elif given_name or family_name: log.info('Looking up Event Person based on given_name or family_name') sql = f""" SELECT * FROM `v_event_person` AS event_person WHERE event_person.account_id = :account_id AND event_person.event_id = :event_id AND (event_person.event_person_given_name IS NULL OR event_person.event_person_given_name LIKE :given_name OR event_person.person_given_name LIKE :given_name) AND (event_person.event_person_family_name IS NULL OR event_person.event_person_family_name LIKE :family_name OR event_person.person_family_name LIKE :family_name) AND (event_person.event_person_email IS NULL OR event_person.event_person_email LIKE :email OR event_person.user_email LIKE :email) {sql_enabled} ORDER BY event_person.event_person_family_name ASC, event_person.event_person_given_name ASC, event_person.created_on DESC, event_person.updated_on DESC {sql_limit}; """ elif email: log.info('Looking up Event Person based on email') sql = f""" SELECT * FROM `v_event_person` AS event_person WHERE event_person.account_id = :account_id AND event_person.event_id = :event_id AND (event_person.event_person_given_name IS NULL OR event_person.event_person_given_name LIKE :given_name OR event_person.person_given_name LIKE :given_name) AND (event_person.event_person_family_name IS NULL OR event_person.event_person_family_name LIKE :family_name OR event_person.person_family_name LIKE :family_name) AND (event_person.event_person_email LIKE :email OR event_person.user_email LIKE :email) {sql_enabled} ORDER BY event_person.event_person_family_name ASC, event_person.event_person_given_name ASC, event_person.created_on DESC, event_person.updated_on DESC {sql_limit}; """ log.debug(sql) if sql_result := sql_select(data=data, sql=sql, as_list=True, rm_id_random=True): resp_data_li = [] for record in sql_result: resp_data = Event_Person_Base(**record).dict(by_alias=by_alias, exclude_unset=exclude_unset) resp_data_li.append(resp_data) return mk_resp(data=resp_data_li, response=response) else: log.debug(sql_result) return mk_resp(data=False, status_code=404, response=response) # ### END ### API Event Person ### search_event_person_obj_li() ### # ### BEGIN ### API Event Person Methods ### get_event_registration_event_person_obj_li() ### # Similar to event_registration.py: /event/registration/ inc_event_person_list # Updated 2021-08-17 @router.get('/event/registration/{event_registration_id}/event/person/list', response_model=Resp_Body_Base) async def get_event_registration_event_person_obj_li( event_registration_id: str = Query(..., min_length=1, max_length=22), enabled: str = 'enabled', limit: int = 1000, inc_address: bool = False, inc_contact: bool = False, inc_event_badge: bool = False, inc_event_person_profile: 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, response: Response = Response, ): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) if event_registration_id := redis_lookup_id_random(record_id_random=event_registration_id, table_name='event_registration'): pass else: return mk_resp(data=None, status_code=404) if event_person_rec_list_result := get_event_person_rec_list( for_obj_type = 'event_registration', for_obj_id = event_registration_id, limit = limit, enabled = enabled, ): event_person_result_list = [] for event_person_rec in event_person_rec_list_result: if load_event_person_result := load_event_person_obj( event_person_id = event_person_rec.get('event_person_id', None), limit = limit, by_alias = by_alias, exclude_unset = exclude_unset, # model_as_dict = model_as_dict, enabled = enabled, inc_event_person_profile = inc_event_person_profile, inc_person = inc_person, # inc_user = inc_user, ): event_person_result_list.append(load_event_person_result) else: event_person_result_list.append(None) return mk_resp(data=event_person_result_list) else: return mk_resp(data=None, status_code=404, response=response) # Not Found # ### END ### API Event Person Methods ### get_event_registration_event_person_obj_li() ### # ### BEGIN ### API Event Person Methods ### get_person_event_person_obj_li() ### # Updated 2021-07-12 # NOT FINISHED YET @router.get('/person/{person_id}/event/person/list', response_model=Resp_Body_Base) async def get_person_event_person_obj_li( person_id: str = Query(..., min_length=1, max_length=22), enabled: str = 'enabled', limit: int = 1000, inc_address: bool = False, inc_contact: bool = False, # inc_event: bool = False, 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_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_user: bool = False, x_account_id: str = Header(...), by_alias: Optional[bool] = True, exclude_unset: Optional[bool] = True, response: Response = Response, ): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) if person_id := redis_lookup_id_random(record_id_random=person_id, table_name='person'): pass else: return mk_resp(data=None, status_code=404) return mk_resp(data=response_data) # ### END ### API Event Person Methods ### get_person_event_person_obj_li() ###