Working on event person, registration, badge, session, presentation, and presenter create and update. _v3 things

This commit is contained in:
Scott Idem
2021-08-25 16:25:46 -04:00
parent 8ff404e534
commit c93792634a
11 changed files with 372 additions and 74 deletions

View File

@@ -101,12 +101,44 @@ def get_address_rec_list(
# ### BEGIN ### API Address Methods ### create_address_obj() ### # ### BEGIN ### API Address Methods ### create_address_obj() ###
# NOTE: This will create an address. # NOTE: This will create an address.
# Reviewed and updated 2021-08-10 # Reviewed and updated 2021-08-10
def create_address_obj(address_obj_new:Address_Base): def create_address_obj(
address_obj_new: Address_Base,
account_id: int|str = None,
for_type: str = None,
for_id: int|str = None,
fail_any: bool = False, # Fail if any thing goes wrong for sub objects
) -> int|bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals()) log.debug(locals())
if not address_obj_new: if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
return False else: return False
if for_id := redis_lookup_id_random(record_id_random=for_id, table_name=for_type): pass
else: return False
log.debug(type(address_obj_new))
if isinstance(address_obj_new, dict):
if account_id:
address_obj_new['account_id'] = account_id
if for_type:
address_obj_new['for_type'] = for_type
if for_id:
address_obj_new['for_id'] = for_id
try:
address_obj_new = Address_Base(**address_obj_new)
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(address_obj_new)
except ValidationError as e:
log.error(e.json())
return False
else:
if account_id:
address_obj_new.account_id = account_id
if for_type:
address_obj_new.for_type = for_type
if for_id:
address_obj_new.for_id = for_id
address_obj_data = address_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'created_on', 'updated_on'}) address_obj_data = address_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'created_on', 'updated_on'})
@@ -130,6 +162,7 @@ def update_address_obj(
address_id: int|str, # Ideally the int ID should be passed. This allows for updating of the id_random value. address_id: int|str, # Ideally the int ID should be passed. This allows for updating of the id_random value.
address_obj_up: Address_Base, address_obj_up: Address_Base,
create_sub_obj: bool = False, create_sub_obj: bool = False,
fail_any: bool = False, # Fail if any thing goes wrong for sub objects
) -> bool: ) -> bool:
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals()) log.debug(locals())

View File

@@ -115,20 +115,80 @@ def get_contact_rec_list(
# ### END ### API Contact Methods ### get_contact_rec_list() ### # ### END ### API Contact Methods ### get_contact_rec_list() ###
# ### BEGIN ### API Contact Methods ### get_account_id_w_contact_id() ###
# Updated 2021-08-24
def get_account_id_w_contact_id(
contact_id: int|str,
) -> bool|int|None:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if contact_id := redis_lookup_id_random(record_id_random=contact_id, table_name='contact'): pass
else: return False
data = {}
data['contact_id'] = contact_id
sql = f"""
SELECT `contact`.id AS 'contact_id', `contact`.id_random AS 'contact_id_random', `contact`.account_id AS account_id
FROM `contact` AS `contact`
WHERE `contact`.id = :contact_id
LIMIT 1;
"""
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
if contact_data_result := sql_select(data=data, sql=sql):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(contact_data_result)
if account_id := contact_data_result.get('account_id', None): return account_id
else: return False
else: return None
# ### END ### API Contact Methods ### get_account_id_w_contact_id() ###
# ### BEGIN ### API Contact Methods ### create_contact_obj() ### # ### BEGIN ### API Contact Methods ### create_contact_obj() ###
# NOTE: This will create a contact and then also create a linked address if contact_obj.address data is passed. # NOTE: This will create a contact and then also create a linked address if contact_obj.address data is passed.
# NOTE: In the future it should be required that account_id, for_type, and for_id should be passed separately. account_id might not be required *if* it can be looked up based on for_type and for_id. # NOTE: In the future it should be required that account_id, for_type, and for_id should be passed separately. account_id might not be required *if* it can be looked up based on for_type and for_id.
# Reviewed and updated 2021-08-24 # Reviewed and updated 2021-08-24
def create_contact_obj( def create_contact_obj(
contact_obj_new: Contact_Base, contact_obj_new: Contact_Base,
account_id: int|str = None,
for_type: str = None,
for_id: int|str = None,
create_sub_obj: bool = False, create_sub_obj: bool = False,
fail_any: bool = False, # Fail if any thing goes wrong for sub objects fail_any: bool = False, # Fail if any thing goes wrong for sub objects
) -> int|bool: ) -> int|bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals()) log.debug(locals())
if not contact_obj_new: if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
return False else: return False
if for_id := redis_lookup_id_random(record_id_random=for_id, table_name=for_type): pass
else: return False
log.debug(type(contact_obj_new))
if isinstance(contact_obj_new, dict):
if account_id:
contact_obj_new['account_id'] = account_id
if for_type:
contact_obj_new['for_type'] = for_type
if for_id:
contact_obj_new['for_id'] = for_id
try:
contact_obj_new = Contact_Base(**contact_obj_new)
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(contact_obj_new)
except ValidationError as e:
log.error(e.json())
return False
else:
if account_id:
contact_obj_new.account_id = account_id
if for_type:
contact_obj_new.for_type = for_type
if for_id:
contact_obj_new.for_id = for_id
contact_obj_data = contact_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'address', 'created_on', 'updated_on'}) contact_obj_data = contact_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'address', 'created_on', 'updated_on'})
@@ -144,7 +204,13 @@ def create_contact_obj(
address_obj_new = contact_obj_new.address address_obj_new = contact_obj_new.address
address_obj_new.for_type = 'contact' address_obj_new.for_type = 'contact'
address_obj_new.for_id = contact_id address_obj_new.for_id = contact_id
create_address_obj_result = create_address_obj(address_obj_new=address_obj_new) create_address_obj_result = create_address_obj(
address_obj_new = address_obj_new,
account_id = account_id,
for_type = 'contact',
for_id = contact_id,
fail_any = fail_any,
)
if isinstance(create_address_obj_result, int): if isinstance(create_address_obj_result, int):
address_id = create_address_obj_result address_id = create_address_obj_result
# NOTE: This last update should no longer be needed now that the contact.address_id is not supposed to be used. # NOTE: This last update should no longer be needed now that the contact.address_id is not supposed to be used.
@@ -173,13 +239,16 @@ def update_contact_obj(
contact_obj_up: Contact_Base, contact_obj_up: Contact_Base,
create_sub_obj: bool = False, create_sub_obj: bool = False,
fail_any: bool = False, # Fail if any thing goes wrong for sub objects fail_any: bool = False, # Fail if any thing goes wrong for sub objects
return_dict: bool = False,
) -> bool: ) -> bool:
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())
if contact_id := redis_lookup_id_random(record_id_random=contact_id, table_name='contact'): pass if contact_id := redis_lookup_id_random(record_id_random=contact_id, table_name='contact'): pass
else: return False else: return False
account_id = get_account_id_w_contact_id(contact_id)
contact_obj_up.id = contact_id contact_obj_up.id = contact_id
log.debug(contact_obj_up) log.debug(contact_obj_up)
@@ -189,34 +258,104 @@ def update_contact_obj(
#contact_dict_up = contact_obj_up.dict(by_alias=False, exclude_unset=True) #contact_dict_up = contact_obj_up.dict(by_alias=False, exclude_unset=True)
if contact_obj_up.address_id and contact_obj_up.address: if contact_obj_up.address:
address_id = contact_obj_up.address_id log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
address_obj_up = contact_obj_up.address address_obj_unknown = contact_obj_up.address
log.debug(address_id) log.debug(address_obj_unknown)
log.debug(address_obj_up) if isinstance(contact_obj_up.address, dict):
if address_obj_up_result := update_address_obj( address_id = address_obj_unknown.get('address_id_random', None)
address_id = address_id,
address_obj_up = address_obj_up,
create_sub_obj = create_sub_obj,
):
log.debug(address_obj_up_result)
else: else:
log.debug(address_obj_up_result) address_id = address_obj_unknown.id
return False
elif contact_obj_up.address and not contact_obj_up.address.id: if address_id:
# NOTE: This will blindly create a new address even if there was one associated but the contact.address_id was not found. # from app.methods.address_methods import update_address_obj_v3
address_obj_in = contact_obj_up.address if update_address_obj_result := update_address_obj(
log.debug(address_obj_in) address_id = address_id,
if address_obj_in_result := create_address_obj(address_obj_new=address_obj_in): address_obj_up = address_obj_unknown,
# log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL create_sub_obj = create_sub_obj,
log.debug(address_obj_in_result) fail_any = fail_any,
# NOTE: This last update should no longer be needed now that the contact.address_id is not supposed to be used. ):
# Need to update the contact with the new address_id address_id = update_address_obj_result
contact_obj_up.address_id = address_obj_in_result # REMOVE log.info(f'Address updated. Address ID: {address_id}')
else:
log.warning(f'Address not updated. Contact ID: {contact_id}')
log.debug(update_address_obj_result)
address_id = None
if fail_any: return False
if isinstance(update_address_obj_result, int):
address_id = update_address_obj_result
log.info(f'Address updated. Address ID: {address_id}')
else:
log.warning(f'Address not updated. Contact ID: {contact_id}')
log.debug(update_address_obj_result)
address_id = None
if fail_any: return False
else: else:
# log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.info(f'No Address ID found.')
log.debug(address_obj_in_result) # from app.methods.address_methods import create_address_obj_v3
return False if create_address_obj_result := create_address_obj(
account_id = account_id,
for_type = 'contact',
for_id = contact_id,
address_obj_new = address_obj_unknown,
fail_any = fail_any,
):
if isinstance(create_address_obj_result, int):
address_id = create_address_obj_result
log.info(f'Address created. Address ID: {address_id}')
else:
log.warning(f'Address not created. Contact ID: {contact_id}')
log.debug(create_address_obj_result)
address_id = None
if fail_any: return False
else:
log.warning(f'Address not created. Contact ID: {contact_id}')
log.debug(create_address_obj_result)
address_id = None
if fail_any: return False
# return_dict['address_id'] = address_id
else:
log.info('Address not found or not in a dict.')
pass
# if contact_obj_up.address_id and contact_obj_up.address:
# address_id = contact_obj_up.address_id
# address_obj_up = contact_obj_up.address
# log.debug(address_id)
# log.debug(address_obj_up)
# if address_obj_up_result := update_address_obj(
# address_id = address_id,
# address_obj_up = address_obj_up,
# create_sub_obj = create_sub_obj,
# ):
# log.debug(address_obj_up_result)
# else:
# log.debug(address_obj_up_result)
# return False
# elif contact_obj_up.address and not contact_obj_up.address.id:
# # NOTE: This will blindly create a new address even if there was one associated but the contact.address_id was not found.
# address_obj_in = contact_obj_up.address
# log.debug(address_obj_in)
# if address_obj_in_result := create_address_obj(
# address_obj_new = address_obj_in,
# account_id = account_id,
# for_type = 'contact',
# for_id = contact_id,
# ):
# # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
# log.debug(address_obj_in_result)
# # NOTE: This last update should no longer be needed now that the contact.address_id is not supposed to be used.
# # Need to update the contact with the new address_id
# contact_obj_up.address_id = address_obj_in_result # REMOVE
# else:
# # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
# log.debug(address_obj_in_result)
# return False
contact_dict_up = contact_obj_up.dict(by_alias=False, exclude_unset=True, exclude={'address'}) contact_dict_up = contact_obj_up.dict(by_alias=False, exclude_unset=True, exclude={'address'})
log.debug(contact_dict_up) log.debug(contact_dict_up)

View File

@@ -250,7 +250,7 @@ def get_event_id_w_event_person_id(
# 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.
# NOTE NOTE NOTE NOTE: I don't like the idea of creating or updating person and or user here. It just does not seem right... Security risk? Complexity? # NOTE NOTE NOTE NOTE: I don't like the idea of creating or updating person and or user here. It just does not seem right... Security risk? Complexity?
# Updated 2021-08-24 # Updated 2021-08-25
def create_event_person_obj( def create_event_person_obj(
event_id: int|str, event_id: int|str,
event_person_obj_new: Event_Person_Base, event_person_obj_new: Event_Person_Base,
@@ -263,6 +263,16 @@ def create_event_person_obj(
if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass
else: return False else: return False
log.debug(type(event_person_obj_new))
if isinstance(event_person_obj_new, dict):
try:
event_person_obj_new = Event_Person_Base(**event_person_obj_new)
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(event_person_obj_new)
except ValidationError as e:
log.error(e.json())
return False
event_person_obj_data = event_person_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_badge', 'event_registration', 'created_on', 'updated_on'}) event_person_obj_data = event_person_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_badge', 'event_registration', 'created_on', 'updated_on'})
log.debug(event_person_obj_data) log.debug(event_person_obj_data)
@@ -411,7 +421,7 @@ def create_event_person_obj(
# ### BEGIN ### API Event Person Methods ### update_event_person_obj_v3() ### # ### BEGIN ### API Event Person Methods ### update_event_person_obj_v3() ###
# Updated 2021-08-24 # Updated 2021-08-25
def update_event_person_obj_v3( def update_event_person_obj_v3(
event_person_id: int|str, event_person_id: int|str,
event_person_obj_exist: Event_Person_Base, event_person_obj_exist: Event_Person_Base,
@@ -424,6 +434,16 @@ def update_event_person_obj_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 False else: return False
log.debug(type(event_person_obj_exist))
if isinstance(event_person_obj_exist, dict):
try:
event_person_obj_exist = Event_Person_Base(**event_person_obj_exist)
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(event_person_obj_exist)
except ValidationError as e:
log.error(e.json())
return False
# Can't update the event_person_id alias if the .id was never set. # Can't update the event_person_id alias if the .id was never set.
# event_person_obj_exist.event_person_id = event_person_id # event_person_obj_exist.event_person_id = event_person_id
if not event_person_obj_exist.id: if not event_person_obj_exist.id:

View File

@@ -174,7 +174,7 @@ def get_event_id_w_event_session_id(
# ### BEGIN ### API Event Presentation Methods ### create_event_presentation_obj() ### # ### BEGIN ### API Event Presentation Methods ### create_event_presentation_obj() ###
# Updated 2021-08-21 # Updated 2021-08-25
def create_event_presentation_obj( def create_event_presentation_obj(
event_session_id: int|str, event_session_id: int|str,
event_presentation_obj_new: Event_Presentation_Base, event_presentation_obj_new: Event_Presentation_Base,
@@ -265,7 +265,7 @@ def create_event_presentation_obj(
# ### BEGIN ### API Event Presentation Methods ### update_event_presentation_obj_v3() ### # ### BEGIN ### API Event Presentation Methods ### update_event_presentation_obj_v3() ###
# Updated 2021-08-21 # Updated 2021-08-25
def update_event_presentation_obj_v3( def update_event_presentation_obj_v3(
event_presentation_id: int|str, event_presentation_id: int|str,
event_presentation_obj_exist: Event_Presentation_Base, event_presentation_obj_exist: Event_Presentation_Base,

View File

@@ -141,7 +141,7 @@ def get_event_session_id_w_event_presentation_id(
# ### BEGIN ### API Event Presenter Methods ### create_event_presenter_obj() ### # ### BEGIN ### API Event Presenter Methods ### create_event_presenter_obj() ###
# Updated 2021-08-21 # Updated 2021-08-25
def create_event_presenter_obj( def create_event_presenter_obj(
event_presentation_id: int|str, event_presentation_id: int|str,
event_presenter_obj_new: Event_Presenter_Base, event_presenter_obj_new: Event_Presenter_Base,
@@ -172,12 +172,6 @@ def create_event_presenter_obj(
if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass
else: return False else: return False
# if event_presentation_id := event_presenter_obj_new.event_presentation_id: pass
# else:
# log.error('Event Presentation ID is required')
# return False
log.debug(type(event_presenter_obj_new)) log.debug(type(event_presenter_obj_new))
if isinstance(event_presenter_obj_new, dict): if isinstance(event_presenter_obj_new, dict):
try: try:

View File

@@ -138,7 +138,7 @@ def get_event_id_w_event_person_id(
# Event Registration can only update the primary event_person because they should already exist before registration is started. Chicken and egg problem... # Event Registration can only update the primary event_person because they should already exist before registration is started. Chicken and egg problem...
# Event Registration can create or update the event_person_list. # Event Registration can create or update the event_person_list.
# NOTE: Should there be a check before trying to update the primary event_person if they are also in the event_person_list??? Chicken and egg problem again? # NOTE: Should there be a check before trying to update the primary event_person if they are also in the event_person_list??? Chicken and egg problem again?
# Updated 2021-08-24 # Updated 2021-08-25
def create_event_registration_obj( def create_event_registration_obj(
event_id: int|str, event_id: int|str,
event_person_id: int|str, event_person_id: int|str,
@@ -231,7 +231,7 @@ def create_event_registration_obj(
# Event Registration can only update the primary event_person because they should already exist since registration is started and registration "requires" the primary event_person first. Chicken and egg problem... # Event Registration can only update the primary event_person because they should already exist since registration is started and registration "requires" the primary event_person first. Chicken and egg problem...
# Event Registration can create or update the event_person_list. # Event Registration can create or update the event_person_list.
# NOTE: Should there be a check before trying to update the primary event_person if they are also in the event_person_list??? Chicken and egg problem again? # NOTE: Should there be a check before trying to update the primary event_person if they are also in the event_person_list??? Chicken and egg problem again?
# Updated 2021-08-24 # Updated 2021-08-25
def update_event_registration_obj_v3( def update_event_registration_obj_v3(
event_registration_id: int|str, event_registration_id: int|str,
event_registration_obj_exist: Event_Registration_Base, event_registration_obj_exist: Event_Registration_Base,

View File

@@ -203,7 +203,7 @@ def load_event_session_obj(
# ### BEGIN ### API Event Session Methods ### create_event_session_obj() ### # ### BEGIN ### API Event Session Methods ### create_event_session_obj() ###
# Updated 2021-08-21 # Updated 2021-08-25
def create_event_session_obj( def create_event_session_obj(
event_id: int|str, event_id: int|str,
event_session_obj_new: Event_Session_Base, event_session_obj_new: Event_Session_Base,
@@ -216,6 +216,16 @@ def create_event_session_obj(
if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass
else: return False else: return False
log.debug(type(event_session_obj_new))
if isinstance(event_session_obj_new, dict):
try:
event_session_obj_new = Event_Session_Base(**event_session_obj_new)
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(event_session_obj_new)
except ValidationError as e:
log.error(e.json())
return False
event_session_obj_data = event_session_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_presentation', 'event_presentation_list', 'event_presenter', 'event_presenter_list', 'created_on', 'updated_on'}) event_session_obj_data = event_session_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_presentation', 'event_presentation_list', 'event_presenter', 'event_presenter_list', 'created_on', 'updated_on'})
log.debug(event_session_obj_data) log.debug(event_session_obj_data)
@@ -265,7 +275,7 @@ def create_event_session_obj(
# ### BEGIN ### API Event Session Methods ### update_event_session_obj_v3() ### # ### BEGIN ### API Event Session Methods ### update_event_session_obj_v3() ###
# Updated 2021-08-21 # Updated 2021-08-25
def update_event_session_obj_v3( def update_event_session_obj_v3(
event_session_id: int|str, event_session_id: int|str,
event_session_obj_exist: Event_Session_Base, event_session_obj_exist: Event_Session_Base,
@@ -278,6 +288,16 @@ def update_event_session_obj_v3(
if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass
else: return False else: return False
log.debug(type(event_session_obj_exist))
if isinstance(event_session_obj_exist, dict):
try:
event_session_obj_exist = Event_Session_Base(**event_session_obj_exist)
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(event_session_obj_exist)
except ValidationError as e:
log.error(e.json())
return False
# Can't update the event_session_id alias if the .id was never set. # Can't update the event_session_id alias if the .id was never set.
# event_session_obj_exist.event_session_id = event_session_id # event_session_obj_exist.event_session_id = event_session_id
if not event_session_obj_exist.id: if not event_session_obj_exist.id:

View File

@@ -14,6 +14,7 @@ from app.methods.organization_methods import create_update_organization_obj, loa
# 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.models.common_field_schema import default_num_bytes from app.models.common_field_schema import default_num_bytes
from app.models.contact_models import Contact_Base
from app.models.person_models import Person_Base from app.models.person_models import Person_Base
@@ -372,6 +373,7 @@ def get_account_id_w_person_id(
# ### BEGIN ### API Person Methods ### create_person_obj_v3() ### # ### BEGIN ### API Person Methods ### create_person_obj_v3() ###
# NOTE: This will create a person and then also create a linked contact if person_obj.contact data is passed. The create_contact_obj will create a contact and then also create a linked address if person_obj.contact.address data is passed. # NOTE: This will create a person and then also create a linked contact if person_obj.contact data is passed. The create_contact_obj will create a contact and then also create a linked address if person_obj.contact.address data is passed.
# Updated 2021-08-25
# Reviewed and updated 2021-08-24 # Reviewed and updated 2021-08-24
# Reviewed and updated 2021-08-21 # Reviewed and updated 2021-08-21
# Reviewed and updated 2021-08-10 # Reviewed and updated 2021-08-10
@@ -388,8 +390,19 @@ def create_person_obj_v3(
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
else: return False else: return False
log.debug(type(person_obj_new))
if isinstance(person_obj_new, dict):
try:
person_obj_new = Person_Base(**person_obj_new)
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(person_obj_new)
except ValidationError as e:
log.error(e.json())
return False
person_obj_data = person_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'contact', 'organization', 'user', 'created_on', 'updated_on'}) person_obj_data = person_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'contact', 'organization', 'user', 'created_on', 'updated_on'})
log.debug(person_obj_data) log.debug(person_obj_data)
person_obj_data['account_id'] = account_id
if person_obj_in_result := sql_insert(data=person_obj_data, table_name='person', rm_id_random=True, id_random_length=8): pass if person_obj_in_result := sql_insert(data=person_obj_data, table_name='person', rm_id_random=True, id_random_length=8): pass
else: else:
@@ -414,7 +427,7 @@ def create_person_obj_v3(
log.debug(contact_obj_unknown) log.debug(contact_obj_unknown)
if contact_id := contact_obj_unknown.get('contact_id_random', None): if contact_id := contact_obj_unknown.get('contact_id_random', None):
log.warning('Contact ID found. This is not expected, but should be ok.') log.warning('Contact ID found. This is not expected, but should be ok.')
from app.methods.contact_methods import update_contact_obj_v3 # from app.methods.contact_methods import update_contact_obj_v3
if update_contact_obj_result := update_contact_obj( if update_contact_obj_result := update_contact_obj(
contact_id = contact_id, contact_id = contact_id,
contact_obj_up = contact_obj_unknown, contact_obj_up = contact_obj_unknown,
@@ -446,6 +459,9 @@ def create_person_obj_v3(
contact_obj_unknown.for_id = person_id contact_obj_unknown.for_id = person_id
if create_contact_obj_result := create_contact_obj( if create_contact_obj_result := create_contact_obj(
account_id = account_id,
for_type = 'person',
for_id = person_id,
contact_obj_new = contact_obj_unknown, contact_obj_new = contact_obj_unknown,
create_sub_obj = create_sub_obj, create_sub_obj = create_sub_obj,
fail_any = fail_any, fail_any = fail_any,
@@ -547,8 +563,9 @@ def create_person_obj_v3(
log.debug(user_obj_unknown) log.debug(user_obj_unknown)
if user_id := user_obj_unknown.get('user_id_random', None): if user_id := user_obj_unknown.get('user_id_random', None):
log.warning('User ID found. This is not expected, but should be ok.') log.warning('User ID found. This is not expected, but should be ok.')
from app.methods.user_methods import update_user_obj_v3 # from app.methods.user_methods import update_user_obj_v3
if update_user_obj_result := update_user_obj_v3( from app.methods.user_methods import update_user_obj
if update_user_obj_result := update_user_obj(
user_id = user_id, user_id = user_id,
user_obj_up = user_obj_unknown, user_obj_up = user_obj_unknown,
# create_sub_obj = create_sub_obj, # create_sub_obj = create_sub_obj,
@@ -572,13 +589,10 @@ def create_person_obj_v3(
if fail_any: return False if fail_any: return False
else: else:
log.info(f'No User ID found.') log.info(f'No User ID found.')
from app.methods.user_methods import create_user_obj_v3 # from app.methods.user_methods import create_user_obj_v3
from app.methods.user_methods import create_user_obj
user_obj_unknown = person_obj_new.user if create_user_obj_result := create_user_obj(
user_obj_unknown.for_type = 'person' account_id = account_id,
user_obj_unknown.for_id = person_id
if create_user_obj_result := create_user_obj_v3(
user_obj_new = user_obj_unknown, user_obj_new = user_obj_unknown,
# create_sub_obj = create_sub_obj, # create_sub_obj = create_sub_obj,
# fail_any = fail_any, # fail_any = fail_any,
@@ -646,14 +660,16 @@ def create_person_obj_v3(
# ### BEGIN ### API Person Methods ### update_person_obj_v3() ### # ### BEGIN ### API Person Methods ### update_person_obj_v3() ###
# Updated 2021-08-25
# Updated 2021-08-24 # Updated 2021-08-24
def update_person_obj_v3( def update_person_obj_v3(
person_id: int|str, person_id: int|str,
person_obj_exist: Person_Base, person_obj_exist: Person_Base,
create_sub_obj: bool = False, create_sub_obj: bool = False,
fail_any: bool = False, # Fail if any thing goes wrong for sub objects fail_any: bool = False, # Fail if any thing goes wrong for sub objects
return_dict: bool = False,
) -> bool: ) -> bool:
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())
if person_id := redis_lookup_id_random(record_id_random=person_id, table_name='person'): pass if person_id := redis_lookup_id_random(record_id_random=person_id, table_name='person'): pass
@@ -661,6 +677,18 @@ def update_person_obj_v3(
account_id = get_account_id_w_person_id(person_id=person_id) account_id = get_account_id_w_person_id(person_id=person_id)
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(type(person_obj_exist))
log.debug(person_obj_exist)
if isinstance(person_obj_exist, dict):
try:
person_obj_exist = Person_Base(**person_obj_exist)
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(person_obj_exist)
except ValidationError as e:
log.error(e.json())
return False
# Can't update the person_id alias if the .id was never set. # Can't update the person_id alias if the .id was never set.
# person_obj_exist.person_id = person_id # person_obj_exist.person_id = person_id
if not person_obj_exist.id: if not person_obj_exist.id:
@@ -683,15 +711,28 @@ def update_person_obj_v3(
return_dict['organization_id'] = None return_dict['organization_id'] = None
return_dict['user_id'] = None return_dict['user_id'] = None
if person_obj_exist.contact and isinstance(person_obj_exist.contact, dict): if person_obj_exist.contact:
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
contact_obj_unknown = person_obj_exist.contact contact_obj_unknown = person_obj_exist.contact
log.debug(contact_obj_unknown) log.debug(contact_obj_unknown)
if contact_id := contact_obj_unknown.get('contact_id_random', None): if isinstance(person_obj_exist.contact, dict):
from app.methods.contact_methods import update_contact_obj_v3 contact_id = contact_obj_unknown.get('contact_id_random', None)
if update_contact_obj_result := update_contact_obj_v3( # try:
# contact_obj_new = Contact_Base(**contact_obj_new)
# log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
# log.debug(contact_obj_new)
# except ValidationError as e:
# log.error(e.json())
# return False
else:
contact_id = contact_obj_unknown.id
# if contact_id := contact_obj_unknown.get('contact_id_random', None):
if contact_id:
# from app.methods.contact_methods import update_contact_obj_v3
if update_contact_obj_result := update_contact_obj(
contact_id = contact_id, contact_id = contact_id,
contact_obj_exist = contact_obj_unknown, contact_obj_up = contact_obj_unknown,
create_sub_obj = create_sub_obj, create_sub_obj = create_sub_obj,
fail_any = fail_any, fail_any = fail_any,
): ):
@@ -713,9 +754,11 @@ def update_person_obj_v3(
if fail_any: return False if fail_any: return False
else: else:
log.info(f'No Contact ID found.') log.info(f'No Contact ID found.')
from app.methods.contact_methods import create_contact_obj # from app.methods.contact_methods import create_contact_obj_v3
if create_contact_obj_result := create_contact_obj( if create_contact_obj_result := create_contact_obj(
person_id = person_id, account_id = account_id,
for_type = 'person',
for_id = person_id,
contact_obj_new = contact_obj_unknown, contact_obj_new = contact_obj_unknown,
create_sub_obj = create_sub_obj, create_sub_obj = create_sub_obj,
fail_any = fail_any, fail_any = fail_any,
@@ -799,9 +842,10 @@ def update_person_obj_v3(
log.debug(user_obj_unknown) log.debug(user_obj_unknown)
if user_id := user_obj_unknown.get('user_id_random', None): if user_id := user_obj_unknown.get('user_id_random', None):
# from app.methods.user_methods import update_user_obj_v3 # from app.methods.user_methods import update_user_obj_v3
from app.methods.user_methods import update_user_obj
if update_user_obj_result := update_user_obj( if update_user_obj_result := update_user_obj(
user_id = user_id, user_id = user_id,
user_obj_exist = user_obj_unknown, user_obj_up = user_obj_unknown,
create_sub_obj = create_sub_obj, create_sub_obj = create_sub_obj,
fail_any = fail_any, fail_any = fail_any,
): ):
@@ -824,6 +868,7 @@ def update_person_obj_v3(
else: else:
log.info(f'No User ID found.') log.info(f'No User ID found.')
# from app.methods.user_methods import create_user_obj_v3 # from app.methods.user_methods import create_user_obj_v3
from app.methods.user_methods import create_user_obj
if create_user_obj_result := create_user_obj( if create_user_obj_result := create_user_obj(
account_id = account_id, account_id = account_id,
user_obj_new = user_obj_unknown, user_obj_new = user_obj_unknown,

View File

@@ -21,6 +21,7 @@ from app.models.user_models import User_Base, User_New_Base, User_Out_Base
# ### BEGIN ### API User Methods ### create_user_obj() ### # ### BEGIN ### API User Methods ### create_user_obj() ###
# NOTE: This will create a new user and also hash a new password string if given. # NOTE: This will create a new user and also hash a new password string if given.
# NOTE: This uses the User_New_Base model, not User_Base or User_Out_Base # NOTE: This uses the User_New_Base model, not User_Base or User_Out_Base
# Updated 2021-08-25
# Reviewed and updated 2021-08-21 # Reviewed and updated 2021-08-21
# Reviewed and updated 2021-08-10 # Reviewed and updated 2021-08-10
def create_user_obj( def create_user_obj(
@@ -33,8 +34,23 @@ def create_user_obj(
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals()) log.debug(locals())
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
else: return False
log.debug(type(user_obj_new))
if isinstance(user_obj_new, dict):
user_obj_new['account_id'] = account_id
try:
user_obj_new = User_New_Base(**user_obj_new)
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(user_obj_new)
except ValidationError as e:
log.error(e.json())
return False
user_obj_data = user_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'contact', 'new_password', 'organization', 'person', 'created_on', 'updated_on'}) user_obj_data = user_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'contact', 'new_password', 'organization', 'person', 'created_on', 'updated_on'})
log.debug(user_obj_data) log.debug(user_obj_data)
user_obj_data['account_id'] = account_id
user_obj_data['password'] = user_obj_new.password # There has to be a better way to do this??? It thinks "password" is unset and so is excluded? user_obj_data['password'] = user_obj_new.password # There has to be a better way to do this??? It thinks "password" is unset and so is excluded?
log.debug(user_obj_data) log.debug(user_obj_data)
@@ -101,10 +117,13 @@ def create_user_obj(
# ### BEGIN ### API User Methods ### update_user_obj() ### # ### BEGIN ### API User Methods ### update_user_obj() ###
# Updated 2021-08-25
def update_user_obj( def update_user_obj(
user_id: int|str, # Ideally the int ID should be passed. This allows for updating of the id_random value. user_id: int|str, # Ideally the int ID should be passed. This allows for updating of the id_random value.
user_obj_up: User_Base, user_obj_up: User_Base,
create_sub_obj: bool = False, create_sub_obj: bool = False,
fail_any: bool = True, # Fail if any thing goes wrong for sub objects
return_dict: bool = False,
) -> bool: ) -> bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals()) log.debug(locals())
@@ -112,6 +131,16 @@ def update_user_obj(
if user_id := redis_lookup_id_random(record_id_random=user_id, table_name='user'): pass if user_id := redis_lookup_id_random(record_id_random=user_id, table_name='user'): pass
else: return False else: return False
log.debug(type(user_obj_up))
if isinstance(user_obj_up, dict):
try:
user_obj_up = User_Base(**user_obj_up)
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(user_obj_up)
except ValidationError as e:
log.error(e.json())
return False
user_obj_up.id = user_id user_obj_up.id = user_id
log.debug(user_obj_up) log.debug(user_obj_up)

View File

@@ -28,7 +28,7 @@ class User_New_Base(BaseModel):
id: Optional[int] = Field( id: Optional[int] = Field(
alias = 'user_id' alias = 'user_id'
) )
account_id_random: str account_id_random: Optional[str]
account_id: Optional[int] account_id: Optional[int]
account_name: Optional[str] account_name: Optional[str]

View File

@@ -11,7 +11,7 @@ from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_
# from app.methods.membership_person_methods import load_membership_person_obj # from app.methods.membership_person_methods import load_membership_person_obj
from app.methods.order_methods import get_order_rec_list, load_order_obj from app.methods.order_methods import get_order_rec_list, load_order_obj
from app.methods.person_methods import create_person_obj_v3, create_update_person_obj, get_person_rec_list, get_person_rec_w_external_id, load_person_obj, update_person_obj from app.methods.person_methods import create_person_obj_v3, create_update_person_obj, get_person_rec_list, get_person_rec_w_external_id, load_person_obj, update_person_obj, update_person_obj_v3
from app.models.person_models import Person_Base from app.models.person_models import Person_Base
from app.models.response_models import Resp_Body_Base, mk_resp from app.models.response_models import Resp_Body_Base, mk_resp
@@ -74,23 +74,35 @@ async def patch_person_obj(
# ### BEGIN ### API Person ### post_person_obj_new_v3() ### # ### BEGIN ### API Person ### post_person_obj_new_v3() ###
# Updated 2021-08-24 # Updated 2021-08-24
@router.post('/new_v3', response_model=Resp_Body_Base) @router.post('/person/new_v3', response_model=Resp_Body_Base)
async def post_person_obj_new_v3( async def post_person_obj_new_v3(
person_obj: Person_Base, person_obj: 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
enabled: str = 'enabled', # For now this covers any included objects or object lists
inc_address: bool = False, # Priority l1
inc_contact: bool = False, # Priority l1
inc_user: bool = False, # Priority l1
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())
log.debug(person_obj.account_id)
log.debug(person_obj.account_id_random)
# if person_obj.account_id: pass
# else: return mk_resp(data=False, status_code=500, response=response, status_message='Testing')
# abort(501)
# There should probably be a check for the account ID before calling the create function? # There should probably be a check for the account ID before calling the create function?
if create_person_obj_result := create_person_obj_v3( if create_person_obj_result := create_person_obj_v3(
account_id = person_obj.account_id, account_id = x_account_id,
person_obj_new = person_obj, person_obj_new = person_obj,
create_sub_obj = create_sub_obj, create_sub_obj = create_sub_obj,
fail_any = fail_any fail_any = fail_any
@@ -100,7 +112,13 @@ async def post_person_obj_new_v3(
if isinstance(create_person_obj_result, int): if isinstance(create_person_obj_result, int):
person_id = create_person_obj_result person_id = create_person_obj_result
if return_obj: if return_obj:
if load_person_obj_result := load_person_obj(person_id=person_id): if load_person_obj_result := load_person_obj(
person_id=person_id,
enabled = enabled,
inc_address = inc_address,
inc_contact = inc_contact,
inc_user = inc_user,
):
data = load_person_obj_result data = load_person_obj_result
else: else:
data = False data = False
@@ -118,7 +136,7 @@ async def post_person_obj_new_v3(
# ### BEGIN ### API Person ### patch_person_obj_exist_v3() ### # ### BEGIN ### API Person ### patch_person_obj_exist_v3() ###
# Updated 2021-08-24 # Updated 2021-08-24
@router.patch('/{person_id}/exist_v3', response_model=Resp_Body_Base) @router.patch('/person/{person_id}/exist_v3', response_model=Resp_Body_Base)
async def patch_person_obj_exist_v3( async def patch_person_obj_exist_v3(
person_obj: Person_Base, person_obj: Person_Base,
person_id: str = Query(..., min_length=11, max_length=22), person_id: str = Query(..., min_length=11, max_length=22),