General code clean up. Work on event tracking related

This commit is contained in:
Scott Idem
2022-02-15 13:25:19 -05:00
parent b3cbfcfb9d
commit 003ffb4adf
8 changed files with 155 additions and 23 deletions

View File

@@ -11,6 +11,106 @@ from app.models.common_field_schema import default_num_bytes
from app.models.event_exhibit_tracking_models import Event_Exhibit_Tracking_Base from app.models.event_exhibit_tracking_models import Event_Exhibit_Tracking_Base
# ### BEGIN ### API Event Exhibit Tracking Methods ### create_event_exhibit_tracking_obj() ###
# Updated 2022-02-15
@logger_reset
def create_event_exhibit_tracking_obj(
exhibit_id: int|str,
event_exhibit_tracking_dict_obj: Event_Exhibit_Tracking_Base,
event_badge_id: int = None,
event_person_id: int = None,
create_sub_obj: bool = False,
fail_any: bool = False, # Fail if any thing goes wrong for sub objects
log_lvl: int = logging.WARNING, # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
) -> int|bool:
log.setLevel(log_lvl)
# ### SECTION ### Secondary data validation
log.info('Create dictionary or Pydantic object')
log.debug(type(event_exhibit_tracking_dict_obj))
if isinstance(event_exhibit_tracking_dict_obj, dict):
event_exhibit_tracking_dict = event_exhibit_tracking_dict_obj
event_exhibit_tracking_dict['event_id'] = event_id
event_exhibit_tracking_dict['event_badge_id'] = event_badge_id
event_exhibit_tracking_dict['event_person_id'] = event_person_id
try:
event_exhibit_tracking_obj = Event_Exhibit_Tracking_Base(**event_exhibit_tracking_dict)
except ValidationError as e:
log.error(e.json())
return False
else:
event_exhibit_tracking_obj = event_exhibit_tracking_dict_obj
event_exhibit_tracking_obj.event_id = event_id
event_exhibit_tracking_obj.event_badge_id = event_badge_id
event_exhibit_tracking_obj.event_person_id = event_person_id
log.debug(event_exhibit_tracking_obj)
event_exhibit_tracking_dict = event_exhibit_tracking_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_badge', 'event_badge_id_random', 'event_person', 'event_person_id_random', 'created_on', 'updated_on'})
# ### SECTION ### Process data
if event_exhibit_tracking_dict_in_result := sql_insert(
data = event_exhibit_tracking_dict,
table_name = 'event_exhibit_tracking',
rm_id_random = True,
id_random_length = default_num_bytes
): pass
else:
log.warning(f'Event Exhibit Tracking not created.')
return False
log.debug(event_exhibit_tracking_dict_in_result)
event_exhibit_tracking_id = event_exhibit_tracking_dict_in_result
log.info(f'Returning the new Event Exhibit Tracking ID: {event_exhibit_tracking_id}')
return event_exhibit_tracking_id
# ### END ### API Event Exhibit Tracking Methods ### create_event_exhibit_tracking_obj() ###
# ### BEGIN ### API Event Exhibit Tracking Methods ### update_event_exhibit_tracking_obj() ###
# Updated 2022-02-15
@logger_reset
def update_event_exhibit_tracking_obj(
event_exhibit_tracking_id: int,
event_exhibit_tracking_dict_obj: Event_Exhibit_Tracking_Base,
log_lvl: int = logging.WARNING, # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
) -> bool:
log.setLevel(log_lvl)
# ### SECTION ### Secondary data validation
log.info('Create dictionary or Pydantic object')
log.debug(type(event_exhibit_tracking_dict_obj))
if isinstance(event_exhibit_tracking_dict_obj, dict):
event_exhibit_tracking_dict = event_exhibit_tracking_dict_obj
event_exhibit_tracking_dict['id'] = event_exhibit_tracking_id
try:
event_exhibit_tracking_obj = Person_Base(**event_exhibit_tracking_dict)
except ValidationError as e:
log.error(e.json())
return False
else:
event_exhibit_tracking_obj = event_exhibit_tracking_dict_obj
event_exhibit_tracking_obj.id = event_exhibit_tracking_id
log.debug(event_exhibit_tracking_obj)
event_exhibit_tracking_dict = event_exhibit_tracking_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_badge', 'event_badge_id_random', 'event_person', 'event_person_id_random', 'created_on', 'updated_on'})
# ### SECTION ### Process data
if event_exhibit_tracking_dict_up_result := sql_update(
data = event_exhibit_tracking_dict,
table_name = 'event_exhibit_tracking',
rm_id_random = True,
): pass
else:
log.warning(f'Event Exhibit Tracking not updated.')
return False
log.debug(event_exhibit_tracking_dict_up_result)
return True
# ### END ### API Event Exhibit Tracking Methods ### update_event_exhibit_tracking_obj() ###
# ### BEGIN ### API Event Exhibit Tracking Methods ### load_event_exhibit_tracking_obj() ### # ### BEGIN ### API Event Exhibit Tracking Methods ### load_event_exhibit_tracking_obj() ###
# Updated 2022-02-14 # Updated 2022-02-14
@logger_reset @logger_reset
@@ -59,7 +159,7 @@ def load_event_exhibit_tracking_obj(
else: event_exhibit_tracking_obj.event_exhibit = None else: event_exhibit_tracking_obj.event_exhibit = None
if inc_event_person: if inc_event_person:
log.info('Need to include Event Person data...') log.info('Need to include Event Exhibit data...')
event_person_id = event_exhibit_tracking_rec.get('event_person_id', None) event_person_id = event_exhibit_tracking_rec.get('event_person_id', None)
log.debug(event_person_id) log.debug(event_person_id)
from app.methods.event_person_methods import load_event_person_obj from app.methods.event_person_methods import load_event_person_obj

View File

@@ -5,7 +5,7 @@ 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 get_account_id_w_for_type_id, 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, logger_reset
from app.models.common_field_schema import default_num_bytes from app.models.common_field_schema import default_num_bytes
from app.models.event_person_tracking_models import Event_Person_Tracking_Base from app.models.event_person_tracking_models import Event_Person_Tracking_Base

View File

@@ -29,9 +29,9 @@ def create_person_kiss(
contact_id: int|None = None, contact_id: int|None = None,
organization_id: int|None = None, organization_id: int|None = None,
user_id: int|None = None, user_id: int|None = None,
log_lvl: int = logging.WARNING, # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
) -> int|bool: ) -> int|bool:
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(log_lvl)
log.debug(locals())
# ### SECTION ### Secondary data validation # ### SECTION ### Secondary data validation
log.info('Create dictionary or Pydantic object') log.info('Create dictionary or Pydantic object')
@@ -47,7 +47,6 @@ def create_person_kiss(
else: else:
person_obj = person_dict_obj person_obj = person_dict_obj
person_obj.account_id = account_id person_obj.account_id = account_id
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(person_obj) log.debug(person_obj)
person_dict = person_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'contact', 'contact_id', 'contact_id_random', 'email', 'cc_email', 'membership_person_id', 'membership_person_id_random', 'organization', 'user', 'created_on', 'updated_on'}) person_dict = person_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'contact', 'contact_id', 'contact_id_random', 'email', 'cc_email', 'membership_person_id', 'membership_person_id_random', 'organization', 'user', 'created_on', 'updated_on'})
@@ -59,7 +58,6 @@ def create_person_kiss(
# person_obj.account_id = account_id # Is this needed? # person_obj.account_id = account_id # Is this needed?
# Look for a contact_id in the contact_obj # Look for a contact_id in the contact_obj
if contact_id: pass if contact_id: pass
elif contact_id := person_obj.contact.id: pass elif contact_id := person_obj.contact.id: pass
@@ -133,7 +131,7 @@ def create_person_kiss(
else: return False else: return False
else: pass else: pass
log.info(f'Returning the Person ID: {person_id}') log.info(f'Returning the new Person ID: {person_id}')
return person_id return person_id
# ### END ### API Person Methods ### create_person_kiss() ### # ### END ### API Person Methods ### create_person_kiss() ###
@@ -149,9 +147,9 @@ def update_person_kiss(
contact_id: int|None = None, contact_id: int|None = None,
organization_id: int|None = None, organization_id: int|None = None,
user_id: int|None = None, user_id: int|None = None,
): log_lvl: int = logging.WARNING, # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL ) -> bool:
log.debug(locals()) log.setLevel(log_lvl)
# ### SECTION ### Secondary data validation # ### SECTION ### Secondary data validation
log.info('Create dictionary or Pydantic object') log.info('Create dictionary or Pydantic object')

View File

@@ -8,7 +8,7 @@ from app.db_sql import redis_lookup_id_random
from app.lib_general import log, logging from app.lib_general import log, logging
from .common_field_schema import base_fields, default_num_bytes from .common_field_schema import base_fields, default_num_bytes
from app.models.event_exhibit_tracking_models import Event_Exhibit_Tracking_Base
class Event_Exhibit_Base(BaseModel): class Event_Exhibit_Base(BaseModel):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
@@ -72,6 +72,9 @@ class Event_Exhibit_Base(BaseModel):
created_on: Optional[datetime.datetime] = None created_on: Optional[datetime.datetime] = None
updated_on: Optional[datetime.datetime] = None updated_on: Optional[datetime.datetime] = None
# Including other related objects
event_exhibit_tracking_list: Optional[list[Event_Exhibit_Tracking_Base]]
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
#@validator('event_exhibit_id_random', always=True) #@validator('event_exhibit_id_random', always=True)

View File

@@ -9,6 +9,9 @@ from app.lib_general import log, logging
from app.models.common_field_schema import base_fields, default_num_bytes from app.models.common_field_schema import base_fields, default_num_bytes
from app.models.event_badge_models import Event_Badge_Base
from app.models.event_person_models import Event_Person_Base
class Event_Exhibit_Tracking_Base(BaseModel): class Event_Exhibit_Tracking_Base(BaseModel):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
@@ -65,6 +68,10 @@ class Event_Exhibit_Tracking_Base(BaseModel):
event_exhibit_name: Optional[str] event_exhibit_name: Optional[str]
# Including other related objects
event_badge: Optional[Union[Event_Badge_Base, None]]
event_person: Optional[Union[Event_Person_Base, None]]
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
#@validator('event_exhibit_tracking_id_random', always=True) #@validator('event_exhibit_tracking_id_random', always=True)

View File

@@ -10,6 +10,7 @@ from app.lib_general import log, logging
from app.models.common_field_schema import base_fields, default_num_bytes from app.models.common_field_schema import base_fields, default_num_bytes
# from app.models.event_models import Event_Base # Causes an import loop # from app.models.event_models import Event_Base # Causes an import loop
from app.models.event_badge_models import Event_Badge_Base from app.models.event_badge_models import Event_Badge_Base
# from app.models.event_exhibit_tracking_models import Event_Exhibit_Tracking_Base # Causes an import loop
from app.models.event_person_profile_models import Event_Person_Profile_Base from app.models.event_person_profile_models import Event_Person_Profile_Base
from app.models.event_registration_models import Event_Registration_Base from app.models.event_registration_models import Event_Registration_Base
from app.models.person_models import Person_Base from app.models.person_models import Person_Base
@@ -103,6 +104,7 @@ class Event_Person_Base(BaseModel):
event_badge_vendor: Optional[Event_Badge_Base] # Additional vendor badge event_badge_vendor: Optional[Event_Badge_Base] # Additional vendor badge
event_badge_vip: Optional[Event_Badge_Base] # Additional VIP badge event_badge_vip: Optional[Event_Badge_Base] # Additional VIP badge
event_exhibit_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more exhibits event_exhibit_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more exhibits
# event_exhibit_tracking_list: Optional[list[Event_Exhibit_Tracking_Base]]
event_file_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more files event_file_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more files
event_location_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more locations (but unlikely?) event_location_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more locations (but unlikely?)
#event_person_detail_list: Optional[list] # list of Event_Person_Detail #event_person_detail_list: Optional[list] # list of Event_Person_Detail

View File

@@ -1,17 +1,16 @@
import datetime import datetime
#from datetime import datetime, time, timedelta
from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, Response, status from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, Response, status
from pydantic import BaseModel, EmailStr, Field from pydantic import BaseModel, EmailStr, Field
from typing import Dict, List, Optional, Set, Union from typing import Dict, List, Optional, Set, Union
from app.lib_general import * from app.lib_general import log, logging, common_route_params, Common_Route_Params
from app.config import settings from app.config import settings
from app.db_sql import * from app.db_sql import sql_enable_part, sql_insert, sql_update, sql_insert_or_update, sql_limit_offset_part, sql_select, sql_delete, redis_lookup_id_random
from .api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template from .api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template
from app.models.event_exhibit_models import Event_Exhibit_Base from app.models.event_exhibit_models import Event_Exhibit_Base
from app.models.response_models import * from app.models.response_models import Resp_Body_Base, mk_resp
router = APIRouter() router = APIRouter()

View File

@@ -10,10 +10,10 @@ 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_exhibit_tracking_methods import get_event_exhibit_tracking_rec_list, load_event_exhibit_tracking_obj from app.methods.event_exhibit_tracking_methods import create_event_exhibit_tracking_obj, get_event_exhibit_tracking_rec_list, load_event_exhibit_tracking_obj, update_event_exhibit_tracking_obj
from app.models.event_exhibit_tracking_models import Event_Exhibit_Tracking_Base from app.models.event_exhibit_tracking_models import Event_Exhibit_Tracking_Base
from app.models.response_models import * from app.models.response_models import Resp_Body_Base, mk_resp
router = APIRouter() router = APIRouter()
@@ -22,15 +22,38 @@ router = APIRouter()
@router.post('/event/exhibit/tracking', response_model=Resp_Body_Base) @router.post('/event/exhibit/tracking', response_model=Resp_Body_Base)
async def post_event_exhibit_tracking_obj( async def post_event_exhibit_tracking_obj(
event_exhibit_tracking_obj: Event_Exhibit_Tracking_Base, event_exhibit_tracking_obj: Event_Exhibit_Tracking_Base,
x_account_id: str = Header(...), event_exhibit_id: str = Query(..., min_length=11, max_length=22),
return_obj: Optional[bool] = True, event_badge_id: str = Query(None, min_length=11, max_length=22),
by_alias: Optional[bool] = True, event_person_id: str = Query(None, min_length=11, max_length=22),
exclude_unset: Optional[bool] = True,
response: Response = Response, return_obj: bool = True,
commons: Common_Route_Params = Depends(common_route_params),
): ):
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())
# ### SECTION ### Secondary data validation
if event_exhibit_id := redis_lookup_id_random(record_id_random=event_exhibit_id, table_name='event_exhibit'): pass
# elif event_exhibit_id is None: pass
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event Exhibit ID was invalid or not found.')
if event_badge_id := redis_lookup_id_random(record_id_random=event_badge_id, table_name='event_badge'): pass
# elif event_badge_id is None: pass
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event Badge ID was invalid or not found.')
if event_person_id := redis_lookup_id_random(record_id_random=event_person_id, table_name='event_person'): pass
# elif event_person_id is None: pass
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event Person ID was invalid or not found.')
# ### SECTION ### Process data
if membership_person_id := create_membership_person_obj(
account_id = commons.x_account_id,
person_id = person_id,
membership_person_dict_obj = membership_person_obj,
): pass
else: return mk_resp(data=False, status_code=400, response=commons.response, status_message='The membership person was not created. Check the field names and data types.') # Bad Request
obj_type = 'event_exhibit_tracking' obj_type = 'event_exhibit_tracking'
event_exhibit_tracking_obj_data_dict = event_exhibit_tracking_obj.dict(by_alias=False, exclude_unset=True) event_exhibit_tracking_obj_data_dict = event_exhibit_tracking_obj.dict(by_alias=False, exclude_unset=True)
result = post_obj_template( result = post_obj_template(