Working on stuff related to session proposals. Again....

This commit is contained in:
Scott Idem
2021-08-25 22:29:48 -04:00
parent 3c13b62502
commit b6df6a218d
5 changed files with 238 additions and 24 deletions

View File

@@ -190,14 +190,14 @@ def create_update_contact_obj_v4(
if for_id := redis_lookup_id_random(record_id_random=for_id, table_name=for_type): pass if for_id := redis_lookup_id_random(record_id_random=for_id, table_name=for_type): pass
else: else:
log.error('Missing or invalid For Type and For ID ID passed. Not required. Ignoring.') log.error('Missing or invalid For Type and For ID passed. Not required. Ignoring.')
log.info(f'For Type: {for_type} and For ID: {for_id}') log.info(f'For Type: {for_type} and For ID: {for_id}')
else: else:
log.info('No Contact ID passed. Create new Contact. Required: Account ID, For Type, For ID') log.info('No Contact ID passed. Create new Contact. Required: Account ID, For Type, For ID')
if for_id := redis_lookup_id_random(record_id_random=for_id, table_name=for_type): pass if for_id := redis_lookup_id_random(record_id_random=for_id, table_name=for_type): pass
else: else:
log.error('Missing or invalid For Type and For ID ID passed. Failed requirement.') log.error('Missing or invalid For Type and For ID passed. Failed requirement.')
log.info(f'For Type: {for_type} and For ID: {for_id}') log.info(f'For Type: {for_type} and For ID: {for_id}')
return False return False

View File

@@ -500,6 +500,39 @@ def load_event_obj_list(
# ### END ### API Event Methods ### load_event_obj_list() ### # ### END ### API Event Methods ### load_event_obj_list() ###
# ### BEGIN ### API Event Person Methods ### get_event_id_w_for_type_id() ###
# Updated 2021-08-25
def get_event_id_w_for_type_id(
for_type: str,
for_id: int|str,
) -> bool|int|None:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if for_id := redis_lookup_id_random(record_id_random=for_id, table_name=for_type): pass
else: return False
data = {}
data['for_type'] = for_type
data['for_id'] = for_id
sql = f"""
SELECT `for`.id AS 'for_id', `for`.id_random AS 'for_id_random', `for`.event_id AS event_id
FROM :for_type AS `for`
WHERE `for`.id = :for_id
LIMIT 1;
"""
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
if for_data_result := sql_select(data=data, sql=sql):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(for_data_result)
if event_id := for_data_result.get('event_id', None): return event_id
else: return False
else: return None
# ### END ### API Event Person Methods ### get_event_id_w_for_type_id() ###
# ### BEGIN ### API Event Methods ### get_account_id_w_event_id() ### # ### BEGIN ### API Event Methods ### get_account_id_w_event_id() ###
# Updated 2021-08-24 # Updated 2021-08-24
def get_account_id_w_event_id( def get_account_id_w_event_id(

View File

@@ -4,7 +4,7 @@ import datetime
from typing import Dict, List, Optional, Set, Union from typing import Dict, List, Optional, Set, Union
from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator
from app.db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_update from app.db_sql import get_account_id_w_for_type_id, redis_lookup_id_random, sql_insert, sql_select, sql_update
from app.lib_general import log, logging from app.lib_general import log, logging
# from app.methods.event_abstract_methods import load_event_abstract_obj # from app.methods.event_abstract_methods import load_event_abstract_obj
@@ -246,6 +246,163 @@ def get_event_id_w_event_person_id(
# ### END ### API Event Person Methods ### get_event_id_w_event_person_id() ### # ### END ### API Event Person Methods ### get_event_id_w_event_person_id() ###
# ### BEGIN ### API Event Person Methods ### create_update_event_person_obj_v4() ###
# NOTE: This will create or update a event_person.
# Rewrite and updated 2021-08-25
def create_update_event_person_obj_v4(
event_person_dict_obj: Event_Person_Base|dict,
event_person_id: int|str = None,
account_id: int|str = None,
event_id: int|str = None,
create_sub_obj: bool = False,
fail_any: bool = False, # Fail if any thing goes wrong for sub objects
return_outline: bool = False,
) -> int|bool:
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
log.info('Checking requirements...')
if event_person_id:
log.info(f'Event Person ID passed. Update existing Event Person. Event Person ID: {event_person_id}')
if event_person_id := redis_lookup_id_random(record_id_random=event_person_id, table_name='event_person'): pass
else:
log.error('Event Person ID passed but is invalid. Failed requirement.')
return False
if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass
else:
log.error('Missing or invalid Event ID passed. Not required. Ignoring.')
log.info(f'Event ID: {event_id}')
log.info('Attempting to get Event ID from related object.')
from app.methods.event_methods import get_event_id_w_for_type_id
if event_id := get_event_id_w_for_type_id(for_type='event_person', for_id=event_person_id): pass
else:
log.error('Unable to get Event ID from related object.')
False
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
else:
log.error('Missing or invalid Account ID passed. Not required. Ignoring.')
log.info(f'Account ID: {account_id}')
log.info('Attempting to get Account ID from related object.')
if account_id := get_account_id_w_for_type_id(for_type='event', for_id=event_id): pass
elif account_id := get_account_id_w_for_type_id(for_type='event_person', for_id=event_person_id): pass
else:
log.error('Unable to get Account ID from related object.')
False
else:
log.info('No Event Person ID passed. Create new Event Person. Required: Account ID, Event ID')
if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass
else:
log.error('Missing or invalid Event ID passed. Failed requirement.')
log.info(f'Event ID: {event_id}')
return False
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
else:
log.error('Missing or invalid Account ID passed. Failed requirement.')
log.info(f'Account ID: {account_id}')
log.info('Attempting to get Account ID from related object.')
if account_id := get_account_id_w_for_type_id(for_type='event', for_id=event_id): pass
else:
log.error('Unable to get Account ID from related object.')
False
log.debug(type(event_person_dict_obj))
if isinstance(event_person_dict_obj, dict):
event_person_dict = event_person_dict_obj
if event_person_id:
event_person_dict['event_person_id'] = event_person_id
if account_id:
event_person_dict['account_id'] = account_id
if event_id:
event_person_dict['event_id'] = event_id
try:
event_person_obj = Event_Person_Base(**event_person_dict)
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(event_person_obj)
except ValidationError as e:
log.error(e.json())
return False
else:
event_person_obj = event_person_dict_obj
if event_person_id:
# NOTE: Can't update the ID alias if it was never set.
event_person_obj.id = event_person_id
if account_id:
event_person_obj.account_id = account_id
if event_id:
event_person_obj.event_id = event_id
event_person_dict = event_person_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_badge', 'event_registration', 'created_on', 'updated_on'})
if event_person_id:
if event_person_dict_up_result := sql_update(data=event_person_dict, table_name='event_person', rm_id_random=True): pass
else:
log.warning(f'Event Person not updated. Event Person ID: {event_person_id}')
log.debug(event_person_dict_up_result)
return False
log.debug(event_person_dict_up_result)
else:
if event_person_dict_in_result := sql_insert(data=event_person_dict, table_name='event_person', rm_id_random=True, id_random_length=8): pass
else:
log.warning(f'Event Person not created.')
log.debug(event_person_dict_in_result)
return False
log.debug(event_person_dict_in_result)
event_person_id = event_person_dict_in_result
event_person_outline = {}
event_person_outline['event_person_id'] = event_person_id
# NOTE: WARNING: This has not been fully tested yet. 2021-08-25
# NOTE: Use object model version because of better type checking and validations
# if event_person_obj.event_badge:
# event_person_outline['event_badge_id'] = None
# event_badge_obj = event_person_obj.event_badge
# if event_badge_id := event_person_obj.event_badge_id: pass
# elif event_badge_id := event_badge_obj.id: pass
# else: event_badge_id = None
# event_badge_obj.id
# event_badge_obj.event_person_id = event_person_id
# create_update_event_badge_obj_result = create_update_event_badge_obj_v4(
# event_badge_dict_obj = event_badge_obj,
# event_badge_id = event_badge_id,
# # account_id = account_id,
# event_id = event_id,
# event_person_id = event_person_id,
# fail_any = fail_any,
# return_outline = return_outline,
# )
# if isinstance(create_update_event_badge_obj_result, int):
# event_badge_id = create_update_event_badge_obj_result
# elif create_update_event_badge_obj_result == True: pass
# else:
# log.warning(f'Create or Update failed while trying create_update_event_badge_obj_v4(): {create_update_event_badge_obj_result}')
# event_badge_id = None
# event_person_outline['event_badge_id'] = event_badge_id
if return_outline:
log.debug(f'Returning the Event Person Outline: {event_person_outline}')
return event_person_outline
else:
log.debug(f'Returning the Event Person ID: {event_person_id}')
return event_person_id
# ### END ### API Event Person Methods ### create_update_event_person_obj_v4() ###
# ### BEGIN ### API Event Person Methods ### create_event_person_obj() ### # ### BEGIN ### API Event Person Methods ### create_event_person_obj() ###
# NOTE: This will create an event_person. This event_person should include at least a person_id. # NOTE: This will create an event_person. This event_person should include at least a person_id.
# NOTE: Is it a good idea to create and or update a person and or user here??? The create_event_person_obj() below does do that. # NOTE: Is it a good idea to create and or update a person and or user here??? The create_event_person_obj() below does do that.

View File

@@ -198,8 +198,7 @@ def load_event_session_obj(
return event_session_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member return event_session_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member
else: else:
return event_session_obj return event_session_obj
# ### END ### API Event Session Methods ### load_event_session_obj() ###
# ### BEGIN ### API Event Session Methods ### create_event_session_obj() ### # ### BEGIN ### API Event Session Methods ### create_event_session_obj() ###

View File

@@ -9,7 +9,7 @@ from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select,
from app.routers.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_person_methods import create_event_person_obj, get_event_person_rec_list, load_event_person_obj, update_event_person_obj, update_event_person_obj_v3 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.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_methods import create_user_obj, load_user_obj, update_user_obj
# from app.methods.user_load_methods import load_user_obj # from app.methods.user_load_methods import load_user_obj
@@ -24,35 +24,47 @@ from app.models.user_models import User_New_Base, User_Base
router = APIRouter() router = APIRouter()
# ### BEGIN ### API Event Person ### post_event_person_obj_new_v3() ### # ### BEGIN ### API Event Person ### post_event_person_obj_new_v4() ###
# Updated 2021-08-24 # Updated 2021-08-25
@router.post('/new_v3', response_model=Resp_Body_Base) @router.post('/event/person/new_v4', response_model=Resp_Body_Base)
async def post_event_person_obj_new_v3( async def post_event_person_obj_new_v4(
event_person_obj: Event_Person_Base, event_person_obj: Event_Person_Base,
create_sub_obj: bool = False, create_sub_obj: bool = False,
fail_any: bool = True, # Fail if any thing goes wrong for sub objects fail_any: bool = True, # Fail if any thing goes wrong for sub objects
inc_event_badge: bool = False,
inc_person: bool = False,
inc_user: bool = False,
x_account_id: str = Header(...), x_account_id: str = Header(...),
return_obj: bool = True, return_obj: bool = True,
by_alias: bool = True, by_alias: bool = True,
exclude_unset: bool = True, exclude_unset: bool = True,
response: Response = Response, response: Response = Response,
): ):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals()) log.debug(locals())
# There should probably be a check for the event ID before calling the create function? # There should probably be a check for the event ID before calling the create function?
if create_event_person_obj_result := create_event_person_obj( 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, event_id = event_person_obj.event_id,
event_person_obj_new = event_person_obj,
create_sub_obj = create_sub_obj, create_sub_obj = create_sub_obj,
fail_any = fail_any fail_any = fail_any,
return_outline = False,
): pass ): 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.') 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): if isinstance(create_event_person_obj_result, int):
event_person_id = create_event_person_obj_result event_person_id = create_event_person_obj_result
if return_obj: if return_obj:
if load_event_person_obj_result := load_event_person_obj(event_person_id=event_person_id): if load_event_person_obj_result := load_event_person_obj(
event_person_id = event_person_id,
inc_event_badge = inc_event_badge,
inc_person = inc_person,
inc_user = inc_user,
):
data = load_event_person_obj_result data = load_event_person_obj_result
else: else:
data = False data = False
@@ -65,17 +77,22 @@ async def post_event_person_obj_new_v3(
return mk_resp(data=data, response=response, status_message='The event person was created.') return mk_resp(data=data, response=response, status_message='The event person was created.')
else: else:
return mk_resp(data=False, status_code=400, response=response, status_message='The result from trying to create an event person was unexpected.') 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 ### post_event_person_obj_new_v3() ### # ### BEGIN ### API Event Person ### post_event_person_obj_new_v4() ###
# ### BEGIN ### API Event Person ### patch_event_person_obj_exist_v3() ### # ### BEGIN ### API Event Person ### patch_event_person_obj_exist_v4() ###
# Updated 2021-08-24 # Updated 2021-08-25
@router.patch('/{event_person_id}/exist_v3', response_model=Resp_Body_Base) @router.patch('/event/person/{event_person_id}/exist_v4', response_model=Resp_Body_Base)
async def patch_event_person_obj_exist_v3( async def patch_event_person_obj_exist_v4(
event_person_obj: Event_Person_Base, event_person_obj: Event_Person_Base,
event_person_id: str = Query(..., min_length=11, max_length=22), event_person_id: str = Query(..., min_length=11, max_length=22),
create_sub_obj: bool = False, create_sub_obj: bool = False,
fail_any: bool = True, # Fail if any thing goes wrong for sub objects fail_any: bool = True, # Fail if any thing goes wrong for sub objects
inc_event_badge: bool = False,
inc_person: bool = False,
inc_user: bool = False,
x_account_id: Optional[str] = Header(..., ), x_account_id: Optional[str] = Header(..., ),
return_obj: Optional[bool] = True, return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True, by_alias: Optional[bool] = True,
@@ -89,17 +106,25 @@ async def patch_event_person_obj_exist_v3(
if event_person_id := redis_lookup_id_random(record_id_random=event_person_id, table_name='event_person'): pass 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) else: return mk_resp(data=None, status_code=404)
if update_event_person_obj_result := update_event_person_obj_v3( 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, event_person_id = event_person_id,
event_person_obj_exist = event_person_obj, account_id = x_account_id,
event_id = event_person_obj.event_id,
create_sub_obj = create_sub_obj, create_sub_obj = create_sub_obj,
fail_any = fail_any, fail_any = fail_any,
return_outline = False,
): pass ): 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.') 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 update_event_person_obj_result:
if return_obj: if return_obj:
if load_event_person_obj_result := load_event_person_obj(event_person_id=event_person_id): if load_event_person_obj_result := load_event_person_obj(
event_person_id = event_person_id,
inc_event_badge = inc_event_badge,
inc_person = inc_person,
inc_user = inc_user,
):
data = load_event_person_obj_result data = load_event_person_obj_result
else: else:
data = False data = False
@@ -111,7 +136,7 @@ async def patch_event_person_obj_exist_v3(
return mk_resp(data=data, response=response, status_message='The event person was created.') return mk_resp(data=data, response=response, status_message='The event person was created.')
else: else:
return mk_resp(data=False, status_code=400, response=response, status_message='The result from trying to create an event person was unexpected.') 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 ### patch_event_person_obj_exist_v3() ### # ### END ### API Event Person ### patch_event_person_obj_exist_v4() ###
# ### BEGIN ### API Event Person Route ### post_event_person_new() ### # ### BEGIN ### API Event Person Route ### post_event_person_new() ###