Work on things related to event_person, tracking, badges, sessions, etc

This commit is contained in:
Scott Idem
2021-09-21 17:30:20 -04:00
parent 200ee82b9d
commit 0f87f69077
13 changed files with 661 additions and 27 deletions

View File

@@ -18,7 +18,7 @@ from app.lib_general import log, logging
from app.log import log
# Import the routers here first:
from app.routers import api_crud, api, importing, account, address, archive, archive_content, contact, cont_edu_cert, cont_edu_cert_person, event, event_badge, event_badge_template, event_exhibit, event_file, event_person, event_person_detail, event_presentation, event_presenter, event_registration, event_session, flask_cfg, hosted_file, journal, journal_entry, log_client_viewing, lookup, membership_cfg, membership_group, membership_group_person, membership_person, membership_person_profile, membership_type, membership_type_person, order, order_cart, organization, page, person, post, post_comment, product, site, site_domain, user, user_person, websockets # , items, journals
from app.routers import api_crud, api, importing, account, address, archive, archive_content, contact, cont_edu_cert, cont_edu_cert_person, event, event_badge, event_badge_template, event_exhibit, event_file, event_person, event_person_detail, event_person_tracking, event_presentation, event_presenter, event_registration, event_session, flask_cfg, hosted_file, journal, journal_entry, log_client_viewing, lookup, membership_cfg, membership_group, membership_group_person, membership_person, membership_person_profile, membership_type, membership_type_person, order, order_cart, organization, page, person, post, post_comment, product, site, site_domain, user, user_person, websockets # , items, journals
from app.db_sql import db
@@ -142,6 +142,11 @@ app.include_router(
prefix='/event/person/detail',
tags=['Event Person Detail'],
)
app.include_router(
event_person_tracking.router,
# prefix='/event/person/tracking',
tags=['Event Person Tracking'],
)
app.include_router(
event_presentation.router,
prefix='/event/presentation',

View File

@@ -182,6 +182,7 @@ def load_event_person_obj(
return event_person_obj
# ### END ### API Event Person Methods ### load_event_person_obj() ###
# ### BEGIN ### API Event Person Methods ### get_event_person_rec_list() ###
# for_obj_type: account, event, event_registration, event_badge, person, user
# Updated 2021-09-10

View File

@@ -0,0 +1,131 @@
from __future__ import annotations
import datetime
from typing import Dict, List, Optional, Set, Union
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.lib_general import log, logging
from app.models.common_field_schema import default_num_bytes
from app.models.event_person_tracking_models import Event_Person_Tracking_Base
# ### BEGIN ### API Event Person Tracking Methods ### load_event_person_tracking_obj() ###
# Updated 2021-09-21
def load_event_person_tracking_obj(
event_person_tracking_id: int|str,
limit: int = 1000,
by_alias: bool = True,
exclude_unset: bool = True,
model_as_dict: bool = False,
enabled: str = 'enabled', # enabled, disabled, all
inc_event_session: bool = False,
inc_event_person: bool = False,
) -> Event_Person_Tracking_Base|dict|bool:
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if event_person_tracking_id := redis_lookup_id_random(record_id_random=event_person_tracking_id, table_name='event_person_tracking'): pass
else: return False
if event_person_tracking_rec := sql_select(table_name='v_event_person_tracking', record_id=event_person_tracking_id): pass
else: return False
try:
event_person_tracking_obj = Event_Person_Tracking_Base(**event_person_tracking_rec)
log.debug(event_person_tracking_obj)
except ValidationError as e:
log.error(e.json())
return False
if inc_event_person:
log.info('Need to include Event Person data...')
event_person_id = event_person_tracking_rec.get('event_person_id', None)
log.debug(event_person_id)
from app.methods.event_person_methods import load_event_person_obj
if event_person_result := load_event_person_obj(
event_person_id = event_person_id,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
):
event_person_tracking_obj.event_person = event_person_result
else: event_person_tracking_obj.event_person = None
if inc_event_session:
log.info('Need to include Event Session data...')
event_session_id = event_person_tracking_rec.get('event_session_id', None)
log.debug(event_session_id)
from app.methods.event_session_methods import load_event_session_obj
if event_session_result := load_event_session_obj(
event_session_id = event_session_id,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
):
event_person_tracking_obj.event_session = event_session_result
else: event_person_tracking_obj.event_session = None
if model_as_dict:
return event_person_tracking_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member
else:
return event_person_tracking_obj
# ### END ### API Event Person Tracking Methods ### load_event_person_tracking_obj() ###
# ### BEGIN ### API Event Person Tracking Methods ### get_event_person_tracking_rec_list() ###
# for_obj_type: account, event, event_session, event_person
# Updated 2021-09-21
def get_event_person_tracking_rec_list(
for_obj_type: str, # NOTE: This is not for_type because the field name generated based
for_obj_id: str, # NOTE: This is not for_id because the field name generated based
enabled: str = 'enabled', # enabled, disabled, all
limit: int = 1000,
) -> list|bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if for_obj_id := redis_lookup_id_random(record_id_random=for_obj_id, table_name=for_obj_type): pass
else: return False
data = {}
data[f'{for_obj_type}_id'] = for_obj_id
sql_obj_type_id = f'`event_person_tracking`.{for_obj_type}_id = :{for_obj_type}_id'
# if enabled in ['enabled', 'disabled', 'all']:
# if enabled == 'enabled':
# data['enable'] = True
# sql_enabled = f'AND `event_person_tracking`.enable = :enable'
# elif enabled == 'disabled':
# data['enable'] = False
# sql_enabled = f'AND `event_person_tracking`.enable = :enable'
# elif enabled == 'all':
# sql_enabled = ''
sql_enabled = ''
if limit:
data['limit'] = limit
sql_limit = f'LIMIT :limit'
else:
sql_limit = ''
sql = f"""
SELECT `event_person_tracking`.id AS 'event_person_tracking_id', `event_person_tracking`.id_random AS 'event_person_tracking_id_random'
FROM `event_person_tracking` AS `event_person_tracking`
WHERE
{sql_obj_type_id}
{sql_enabled}
ORDER BY `event_person_tracking`.created_on DESC, `event_person_tracking`.updated_on DESC
{sql_limit};
"""
if event_person_rec_li_result := sql_select(data=data, sql=sql, as_list=True):
event_person_rec_li = event_person_rec_li_result
else:
event_person_rec_li = []
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(event_person_rec_li_result)
return event_person_rec_li
# ### END ### API Event Person Tracking Methods ### get_event_person_tracking_rec_list() ###

View File

@@ -28,6 +28,11 @@ class Event_Base(BaseModel):
id: Optional[int] = Field(
alias = 'event_id'
)
code: Optional[str] = Field(
alias = 'event_code'
)
account_id_random: Optional[str]
account_id: Optional[int]

View File

@@ -63,6 +63,36 @@ class Event_Person_Base(BaseModel):
created_on: Optional[datetime.datetime] = None
updated_on: Optional[datetime.datetime] = None
# Including convenience data
# This is only for convenience. Probably going to keep unless it causes a problem.
event_badge_informal_name: Optional[str]
event_badge_given_name: Optional[str]
event_badge_family_name: Optional[str]
event_badge_display_name: Optional[str]
event_badge_full_name: Optional[str]
event_badge_affiliations: Optional[str]
event_badge_email: Optional[str]
event_person_informal_name: Optional[str]
event_person_given_name: Optional[str]
event_person_family_name: Optional[str]
event_person_display_name: Optional[str]
event_person_full_name: Optional[str]
event_person_affiliations: Optional[str]
event_person_email: Optional[str]
person_informal_name: Optional[str]
person_given_name: Optional[str]
person_family_name: Optional[str]
person_display_name: Optional[str]
person_full_name: Optional[str]
person_affiliations: Optional[str]
person_email: Optional[str]
user_email: Optional[str]
user_name: Optional[str]
user_username: Optional[str]
# Including other related objects
# event: Optional[Event_Base] # Causes an import loop
event_abstract_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more abstracts

View File

@@ -58,6 +58,32 @@ class Event_Person_Tracking_Base(BaseModel):
created_on: Optional[datetime.datetime] = None
updated_on: Optional[datetime.datetime] = None
# Including convenience data
# This is only for convenience. Probably going to keep unless it causes a problem.
# full_name: Optional[str] = Field(
# alias = 'event_person_full_name'
# )
# display_name: Optional[str] = Field(
# alias = 'event_person_display_name'
# )
event_person_informal_name: Optional[str]
event_person_given_name: Optional[str]
event_person_family_name: Optional[str]
event_person_display_name: Optional[str]
event_person_full_name: Optional[str]
event_person_affiliations: Optional[str]
event_person_email: Optional[str]
event_session_name: Optional[str]
location_name: Optional[str] = Field(
alias = 'event_location_name'
)
track_name: Optional[str] = Field(
alias = 'event_track_name'
)
# Maybe add timezone in the future?
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
#@validator('event_person_tracking_id_random', always=True)

View File

@@ -29,6 +29,10 @@ class Event_Presentation_Base(BaseModel):
alias = 'event_presentation_id'
)
code: Optional[str] = Field(
alias = 'event_presentation_code'
)
event_id_random: Optional[str]
event_id: Optional[int]
@@ -50,8 +54,6 @@ class Event_Presentation_Base(BaseModel):
for_type: Optional[str]
for_id: Optional[int]
code: Optional[str]
name: Optional[str]
description: Optional[str]

View File

@@ -29,6 +29,11 @@ class Event_Presenter_Base(BaseModel):
id: Optional[int] = Field(
alias = 'event_presenter_id'
)
code: Optional[str] = Field(
alias = 'event_presenter_code'
)
account_id_random: Optional[str]
account_id: Optional[int]
@@ -59,8 +64,6 @@ class Event_Presenter_Base(BaseModel):
for_type: Optional[str]
for_id: Optional[int]
code: Optional[str]
pronouns: Optional[str] # Preferred pronouns
informal_name: Optional[str] # Informal or nick name they commonly go by

View File

@@ -29,6 +29,10 @@ class Event_Session_Base(BaseModel):
alias = 'event_session_id'
)
code: Optional[str] = Field(
alias = 'event_session_code'
)
event_id_random: Optional[str]
event_id: Optional[int]
@@ -95,6 +99,16 @@ class Event_Session_Base(BaseModel):
created_on: Optional[datetime.datetime] = None
updated_on: Optional[datetime.datetime] = None
# Including convenience data
# This is only for convenience. Probably going to keep unless it causes a problem.
location_name: Optional[str] = Field(
alias = 'event_location_name'
)
track_name: Optional[str] = Field(
alias = 'event_track_name'
)
# Maybe add xxx in the future?
# Including other related objects
# event: Optional[Event_Base]
event_abstract_list: Optional[list] # Optional[Event_Abstract_Base]

View File

@@ -119,7 +119,7 @@ async def get_event_badge_obj_li(
resp_data = base_name(**record).dict(by_alias=by_alias, exclude_unset=exclude_unset)
resp_data_li.append(resp_data)
return mk_resp(data=resp_data_li)
return mk_resp(data=resp_data_li, response=response)
else:
log.debug(sql_result)
return mk_resp(data=False, status_code=404, response=response)
@@ -212,7 +212,7 @@ async def search_event_badge_obj_li(
resp_data = Event_Badge_Base(**record).dict(by_alias=by_alias, exclude_unset=exclude_unset)
resp_data_li.append(resp_data)
return mk_resp(data=resp_data_li)
return mk_resp(data=resp_data_li, response=response)
else:
log.debug(sql_result)
return mk_resp(data=False, status_code=404, response=response)
@@ -236,7 +236,7 @@ async def get_event_badge_obj(
log.debug(locals())
if event_badge_id := redis_lookup_id_random(record_id_random=event_badge_id, table_name='event_badge'): pass
else: return mk_resp(data=None, status_code=404)
else: return mk_resp(data=None, status_code=404, response=response)
event_badge_obj = load_event_badge_obj(
event_badge_id = event_badge_id,
@@ -248,7 +248,7 @@ async def get_event_badge_obj(
inc_event_badge_template = inc_event_badge_template,
)
event_badge_dict = event_badge_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
return mk_resp(data=event_badge_dict)
return mk_resp(data=event_badge_dict, response=response)
# ### END ### API Event Badge ### get_event_badge_obj() ###
@@ -269,7 +269,7 @@ async def get_account_obj_event_badge_list(
log.debug(locals())
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
else: return mk_resp(data=None, status_code=404)
else: return mk_resp(data=None, status_code=404, response=response)
response_data = None
# log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
@@ -298,7 +298,7 @@ async def get_account_obj_event_badge_list(
else:
return mk_resp(data=False, status_code=400, response=response) # Bad Request
return mk_resp(data=response_data)
return mk_resp(data=response_data, response=response)
# ### END ### API Event Badge ### get_account_obj_event_badge_list() ###
@@ -318,7 +318,7 @@ async def get_event_obj_event_badge_list(
log.debug(locals())
if event_badge_id := redis_lookup_id_random(record_id_random=event_badge_id, table_name='event_badge'): pass
else: return mk_resp(data=None, status_code=404)
else: return mk_resp(data=None, status_code=404, response=response)
response_data = None
# log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
@@ -346,7 +346,7 @@ async def get_event_obj_event_badge_list(
else:
return mk_resp(data=False, status_code=400, response=response) # Bad Request
return mk_resp(data=response_data)
return mk_resp(data=response_data, response=response)
# ### END ### API Event Badge ### get_event_obj_event_badge_list() ###

View File

@@ -407,8 +407,7 @@ async def get_event_person_obj(
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)
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,
@@ -436,10 +435,172 @@ async def get_event_person_obj(
else:
return mk_resp(data=False, status_code=400, response=response) # Bad Request
return mk_resp(data=event_person_obj)
return mk_resp(data=event_person_obj, response=response)
# ### END ### API Event Person ### get_event_person_obj() ###
# ### BEGIN ### API Event Person ### search_event_person_obj_li() ###
# Updated 2021-09-21
@router.get('/event/{event_id}/person/search', response_model=Resp_Body_Base)
async def search_event_person_obj_li(
# account_id: str = Query(None, min_length=11, max_length=22),
event_id: str = Query(None, min_length=11, max_length=22),
event_person_id: str = Query('', max_length=50),
external_id: str = Query('', max_length=50),
given_name: str = Query('', max_length=25),
family_name: str = Query('', max_length=25),
email: str = Query('', max_length=50),
limit: int = 50,
enabled: str = 'enabled',
x_account_id: str = Header(...),
by_alias: bool = True,
exclude_unset: bool = True,
response: Response = Response,
):
log.setLevel(logging.DEBUG) # 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/<id> inc_event_person_list
# Updated 2021-08-17

View File

@@ -0,0 +1,185 @@
import datetime
#from datetime import datetime, time, timedelta
from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, Response, status
from pydantic import BaseModel, EmailStr, Field
from typing import Dict, List, Optional, Set, Union
from app.lib_general import log, logging
#from ..log import *
from app.config import settings
from app.db_sql import *
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_tracking_methods import get_event_person_tracking_rec_list, load_event_person_tracking_obj
from app.models.event_person_tracking_models import Event_Person_Tracking_Base
from app.models.response_models import *
router = APIRouter()
@router.post('/event/person/tracking', response_model=Resp_Body_Base)
async def post_event_person_tracking_obj(
obj: Event_Person_Tracking_Base,
x_account_id: str = Header(...),
return_obj: Optional[bool] = True,
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())
obj_type = 'event_person_tracking'
obj_data_dict = obj.dict(by_alias=False, exclude_unset=True)
result = post_obj_template(
obj_type=obj_type,
data=obj_data_dict,
return_obj=True,
by_alias=True,
exclude_unset=True,
)
return result
@router.patch('/event/person/tracking/{obj_id}', response_model=Resp_Body_Base)
async def patch_event_person_tracking_obj(
obj: Event_Person_Tracking_Base,
obj_id: str = Query(..., min_length=1, max_length=22),
x_account_id: Optional[str] = Header(..., ),
return_obj: Optional[bool] = True,
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())
obj_type = 'event_person_tracking'
obj_data_dict = obj.dict(by_alias=False, exclude_unset=True)
obj_data_dict['id'] = redis_lookup_id_random(record_id_random=obj_id, table_name=obj_type)
obj_data_dict['id_random'] = obj_id
result = patch_obj_template(
obj_type=obj_type,
data=obj_data_dict,
obj_id=obj_id,
return_obj=True,
by_alias=True,
exclude_unset=True,
)
return result
@router.get('/event/person/tracking/list', response_model=Resp_Body_Base)
async def get_event_person_tracking_obj_li(
for_obj_type: Optional[str] = Query(None, min_length=2, max_length=50),
for_obj_id: Optional[str] = Query(None, min_length=1, max_length=22),
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())
obj_type = 'event_person_tracking'
result = get_obj_li_template(
obj_type=obj_type,
for_obj_type=for_obj_type,
for_obj_id=for_obj_id,
by_alias=True,
exclude_unset=True,
)
return result
@router.get('/event/person/tracking/{obj_id}', response_model=Resp_Body_Base)
async def get_event_person_tracking_obj(
obj_id: str = Query(..., min_length=1, max_length=22),
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())
obj_type = 'event_person_tracking'
result = get_obj_template(
obj_type=obj_type,
obj_id=obj_id,
by_alias=True,
exclude_unset=True,
)
return result
# ### BEGIN ### API Event Person Tracking ### get_event_session_obj_event_person_tracking_list() ###
# Updated 2021-09-21
@router.get('/event/session/{event_session_id}/event/person/tracking/list', response_model=Resp_Body_Base)
async def get_event_session_obj_event_person_tracking_list(
event_session_id: str = Query(..., min_length=11, max_length=22),
limit: int = 500, # For now this covers any included objects or object lists
enabled: str = 'enabled', # For now this covers any included objects or object lists
inc_event_person: bool = False,
inc_event_session: bool = False,
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
response: Response = Response,
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass
else: return mk_resp(data=None, status_code=404, response=response)
# Updated 2021-09-21
if event_person_tracking_rec_list_result := get_event_person_tracking_rec_list(
for_obj_type = 'event_session',
for_obj_id = event_session_id,
enabled = enabled,
limit = limit,
):
event_person_tracking_result_list = []
for event_person_tracking_rec in event_person_tracking_rec_list_result:
if load_event_person_tracking_result := load_event_person_tracking_obj(
event_person_tracking_id = event_person_tracking_rec.get('event_person_tracking_id', None),
enabled = enabled,
limit = limit,
inc_event_person = inc_event_person,
inc_event_session = inc_event_session,
by_alias = by_alias,
exclude_unset = exclude_unset,
# model_as_dict = model_as_dict,
):
event_person_tracking_result_list.append(load_event_person_tracking_result)
else:
event_person_tracking_result_list.append(None)
response_data = event_person_tracking_result_list
elif isinstance(event_person_tracking_rec_list_result, list):
return mk_resp(data=False, status_code=404, response=response) # Not Found
else:
return mk_resp(data=False, status_code=400, response=response) # Bad Request
return mk_resp(data=response_data, response=response)
# ### END ### API Event Person Tracking ### get_event_session_obj_event_person_tracking_list() ###
@router.delete('/event/person/tracking/{obj_id}', response_model=Resp_Body_Base)
async def delete_event_person_tracking_obj(
obj_id: str = Query(..., min_length=1, max_length=22),
x_account_id: str = Header(...),
response: Response = Response,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'event_person_tracking'
result = delete_obj_template(
obj_type=obj_type,
obj_id=obj_id,
)
return result

View File

@@ -96,7 +96,7 @@ async def patch_event_session_obj_exist_v4(
log.debug(locals())
if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass
else: return mk_resp(data=None, status_code=404)
else: return mk_resp(data=None, status_code=404, response=response)
if update_event_session_obj_result := create_update_event_session_obj_v4(
event_session_dict_obj = event_session_obj,
@@ -218,7 +218,7 @@ async def patch_event_session_obj_exist_v3(
log.debug(locals())
if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass
else: return mk_resp(data=None, status_code=404)
else: return mk_resp(data=None, status_code=404, response=response)
if update_event_session_obj_result := update_event_session_obj_v3(
event_session_id = event_session_id,
@@ -301,7 +301,7 @@ async def patch_event_session_json(
if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass
else:
return mk_resp(data=None, status_code=404)
return mk_resp(data=None, status_code=404, response=response)
if event_session_obj_up_result := update_event_session_obj(
event_session_id = event_session_id,
@@ -313,9 +313,9 @@ async def patch_event_session_json(
if return_obj:
event_session_obj = load_event_session_obj(event_session_id=event_session_id)
event_session_dict = event_session_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
return mk_resp(data=event_session_dict)
return mk_resp(data=event_session_dict, response=response)
else:
return mk_resp(data=event_session_obj_up_result)
return mk_resp(data=event_session_obj_up_result, response=response)
else:
return mk_resp(data=False, status_code=400, response=response) # Bad Request
# ### END ### API Event Session ### patch_event_session_json() ###
@@ -455,7 +455,7 @@ async def get_event_session_obj_li(
):
data = event_session_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
event_session_li.append(data)
return mk_resp(data=event_session_li)
return mk_resp(data=event_session_li, response=response)
else:
log.debug(event_session_li_result)
return mk_resp(data=False, status_code=404, response=response)
@@ -496,7 +496,7 @@ async def get_event_session_obj(
if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass
else:
return mk_resp(data=None, status_code=404)
return mk_resp(data=None, status_code=404, response=response)
if event_session_obj := load_event_session_obj(
event_session_id = event_session_id,
@@ -526,7 +526,7 @@ async def get_event_session_obj(
else:
return mk_resp(data=False, status_code=400, response=response) # Bad Request
return mk_resp(data=event_session_dict)
return mk_resp(data=event_session_dict, response=response)
#return mk_resp(data=event_session_obj)
# ### END ### API Event Session ### get_event_session_obj() ###
@@ -558,8 +558,8 @@ async def get_event_event_session_obj_li(
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='person'): pass
else: return mk_resp(data=None, status_code=404)
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)
# Updated 2021-08-26
if event_session_rec_list_result := get_event_session_rec_list(
@@ -594,10 +594,81 @@ async def get_event_event_session_obj_li(
else:
return mk_resp(data=False, status_code=400, response=response) # Bad Request
return mk_resp(data=response_data)
return mk_resp(data=response_data, response=response)
# ### END ### API Event Session Methods ### get_event_event_session_obj_li() ###
# ### BEGIN ### API Event Session ### search_event_session_obj_li() ###
# Updated 2021-09-21
@router.get('/event/{event_id}/session/search', response_model=Resp_Body_Base)
async def search_event_session_obj_li(
# account_id: str = Query(None, min_length=11, max_length=22),
event_id: str = Query(None, min_length=11, max_length=22),
event_session_id: str = Query('%', max_length=22),
event_session_code: str = Query('%', max_length=50),
event_session_name: 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.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
data = {}
data['account_id_random'] = x_account_id
data['event_id_random'] = event_id
data['event_session_id'] = '%'+event_session_id+'%'
data['event_session_code'] = '%'+event_session_code+'%'
data['event_session_name'] = '%'+event_session_name+'%' # 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_session`.enable = :enable'
elif enabled == 'disabled':
data['enable'] = False
sql_enabled = f'AND `event_session`.enable = :enable'
elif enabled == 'all':
sql_enabled = ''
if limit:
data['limit'] = limit
sql_limit = f'LIMIT :limit'
else:
sql_limit = ''
sql = f"""
SELECT *
FROM `v_event_session` AS event_session
WHERE event_session.account_id = :account_id
AND event_session.event_id = :event_id
AND (event_session.event_session_code LIKE :event_session_code OR event_session.event_session_code IS NULL)
AND event_session.name LIKE :event_session_name
{sql_enabled}
ORDER BY event_session.start_datetime ASC, event_session.name ASC, event_session.created_on DESC, event_session.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_Session_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 Session ### search_event_session_obj_li() ###
@router.delete('/event/session/{obj_id}', response_model=Resp_Body_Base)
async def delete_event_session_obj(
obj_id: str = Query(..., min_length=1, max_length=22),