import datetime, secrets from fastapi import APIRouter, Body, Depends, Header, HTTPException, Path, 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 = Path(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.INFO) # 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.INFO) # 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.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(user_new) user_obj_new = User_New_Base(**user_new) log.setLevel(logging.INFO) # 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.INFO) # 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 = Path(min_length=11, 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 = Path(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.INFO) # 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 = Path(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 = Path(min_length=11, 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 = Path(min_length=11, 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() ###