Work on Impexium and badges for ISHLT

This commit is contained in:
Scott Idem
2022-02-24 18:11:14 -05:00
parent 0ff464dde2
commit d4da7535f9
4 changed files with 107 additions and 13 deletions

View File

@@ -179,6 +179,7 @@ def get_events(page=1):
# Updated 2021-10-07 # Updated 2021-10-07
def get_event_registrants( def get_event_registrants(
event_code: str, event_code: str,
details: bool = False,
page: int = 0, page: int = 0,
# return_all: bool = False # return_all: bool = False
): ):
@@ -209,7 +210,7 @@ def get_event_registrants(
# pass # pass
endpoint = f'/Events/{event_code}/Registrations/{page}' endpoint = f'/Events/{event_code}/Registrations/{page}'
uri = api['base_url']+endpoint uri = api['base_url']+endpoint
params = {} params = { 'includeDetails': details }
if resp := requests.get(url=uri, params=params, headers=api['headers']): pass if resp := requests.get(url=uri, params=params, headers=api['headers']): pass
else: break else: break

View File

@@ -30,6 +30,10 @@ class Event_Badge_Base(BaseModel):
event_id_random: Optional[str] event_id_random: Optional[str]
event_id: Optional[int] event_id: Optional[int]
# NOTE: This should only be used when the event_person record can not be created. And records before 2022.
event_id_random_only: Optional[str]
event_id_only: Optional[int]
event_person_id_random: Optional[str] event_person_id_random: Optional[str]
event_person_id: Optional[int] event_person_id: Optional[int]
@@ -73,6 +77,10 @@ class Event_Badge_Base(BaseModel):
full_address: Optional[str] full_address: Optional[str]
# This is updated using SQL triggers and a SQL function
# Combines informal, given, middle, family, email
query_str: Optional[str]
# NOTE: More badge fields need to be added here once things are cleaned up # NOTE: More badge fields need to be added here once things are cleaned up
badge_type_code: Optional[str] badge_type_code: Optional[str]
badge_type: Optional[str] badge_type: Optional[str]

View File

@@ -26,6 +26,7 @@ router = APIRouter()
@router.get('/event/{e_impexium_event_id}/import_reg', response_model=Resp_Body_Base) @router.get('/event/{e_impexium_event_id}/import_reg', response_model=Resp_Body_Base)
async def event_import_reg( async def event_import_reg(
e_impexium_event_id: str = Query(..., min_length=11, max_length=22), # For ISHLT: 42_AM (2022-04); EX22_AM (2022-04); 41V_2 (2021-04) e_impexium_event_id: str = Query(..., min_length=11, max_length=22), # For ISHLT: 42_AM (2022-04); EX22_AM (2022-04); 41V_2 (2021-04)
details: bool = False,
page: int = 0, # 250 per page from Impexium page: int = 0, # 250 per page from Impexium
event_id: str = Query(..., min_length=11, max_length=22), # For ISHLT: ZDzTBlevhZs (2022-04) event_id: str = Query(..., min_length=11, max_length=22), # For ISHLT: ZDzTBlevhZs (2022-04)
# Account ID For ISHLT: d8TqXqf1EOg # Account ID For ISHLT: d8TqXqf1EOg
@@ -41,7 +42,7 @@ async def event_import_reg(
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 mk_resp(data=None, status_code=404, status_message=f'The Event ID was not found. Event ID: {event_id}', response=commons.response) else: return mk_resp(data=None, status_code=404, status_message=f'The Event ID was not found. Event ID: {event_id}', response=commons.response)
event_registrant_li = get_event_registrants(event_code=e_impexium_event_id, page=page) event_registrant_li = get_event_registrants(event_code=e_impexium_event_id, details=details, page=page)
log.debug(type(event_registrant_li)) log.debug(type(event_registrant_li))
# return mk_resp(data=len(event_registrant_li), status_code=501, response=commons.response) # Not Implemented # return mk_resp(data=len(event_registrant_li), status_code=501, response=commons.response) # Not Implemented
@@ -62,6 +63,12 @@ async def event_import_reg(
event_person_data['event_id'] = event_id event_person_data['event_id'] = event_id
event_person_data['external_id'] = external_id event_person_data['external_id'] = external_id
email = None
if details:
if emails := event_registrant.get('emails'):
if isinstance(emails, list) and len(emails):
email = emails[0].get('address')
event_person_profile_data = {} event_person_profile_data = {}
event_person_profile_data['pronouns'] = event_registrant.get('gender') event_person_profile_data['pronouns'] = event_registrant.get('gender')
event_person_profile_data['informal_name'] = event_registrant.get('preferredFirstName') event_person_profile_data['informal_name'] = event_registrant.get('preferredFirstName')
@@ -78,6 +85,8 @@ async def event_import_reg(
event_person_profile_data['affiliations'] = event_registrant.get('badgeOrganization') event_person_profile_data['affiliations'] = event_registrant.get('badgeOrganization')
if email: event_person_profile_data['email'] = email
event_person_data['event_person_profile'] = {} event_person_data['event_person_profile'] = {}
event_person_data['event_person_profile'] = event_person_profile_data event_person_data['event_person_profile'] = event_person_profile_data
@@ -106,6 +115,8 @@ async def event_import_reg(
event_badge_data['affiliations'] = event_registrant.get('badgeOrganization') event_badge_data['affiliations'] = event_registrant.get('badgeOrganization')
if email: event_badge_data['email'] = email
event_badge_data['city'] = event_registrant.get('badgeCity') event_badge_data['city'] = event_registrant.get('badgeCity')
event_badge_data['state_province'] = event_registrant.get('badgeState') event_badge_data['state_province'] = event_registrant.get('badgeState')

View File

@@ -142,15 +142,17 @@ async def search_event_badge_obj_li(
event_badge_id: str = Query(None, min_length=3, max_length=22), event_badge_id: str = Query(None, min_length=3, max_length=22),
event_person_id: str = Query(None, min_length=3, max_length=22), event_person_id: str = Query(None, min_length=3, max_length=22),
external_id: str = Query('%', max_length=100), # NOTE: Not currently used! 2022-02-15 external_id: str = Query(None, max_length=100), # NOTE: Not currently used! 2022-02-15
given_name: str = Query('%', max_length=25), query_str: str = Query('', max_length=50),
family_name: str = Query('%', max_length=25),
email: 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),
commons: Common_Route_Params = Depends(common_route_params), commons: Common_Route_Params = Depends(common_route_params),
): ):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals()) log.debug(locals())
# account_id = commons.x_account_id # account_id = commons.x_account_id
@@ -158,24 +160,50 @@ async def search_event_badge_obj_li(
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 mk_resp(data=None, status_code=404, response=commons.response) else: return mk_resp(data=None, status_code=404, response=commons.response)
log.info(f'Searching: Event ID: {event_id}; Event Badge ID: {event_badge_id}; Event Person ID: {event_person_id}; External ID: {external_id}; Give Name: {given_name}; Family Name: {family_name}; Email: {email}') if event_badge_id or event_person_id or external_id:
log.info(f'Searching: Event ID: {event_id}; Event Badge ID: {event_badge_id}; Event Person ID: {event_person_id}; External ID: {external_id}')
elif query_str:
log.info(f'Searching: Event ID: {event_id}; Query String: {query_str}')
else:
log.info(f'Searching: Event ID: {event_id}; Event Badge ID: {event_badge_id}; Event Person ID: {event_person_id}; External ID: {external_id}; Give Name: {given_name}; Family Name: {family_name}; Email: {email}')
data = {} data = {}
# data['account_id'] = account_id # data['account_id'] = account_id
data['event_id'] = event_id data['event_id'] = event_id
# Adding the % symbol here because it turns certain combinations into special characters
if event_badge_id and len(event_badge_id) > 2: if event_badge_id and len(event_badge_id) > 2:
log.info(f'Using Event Badge ID: {event_badge_id}') log.info(f'Using Event Badge ID: {event_badge_id}')
data['event_badge_id_random'] = f'%{event_badge_id}%' data['event_badge_id_random'] = f'%{event_badge_id}%'
elif event_person_id and len(event_person_id) > 2: elif event_person_id and len(event_person_id) > 2:
log.info(f'Using Event Person ID: {event_person_id}') log.info(f'Using Event Person ID: {event_person_id}')
data['event_person_id_random'] = f'%{event_person_id}%' data['event_person_id_random'] = f'%{event_person_id}%'
else: elif external_id and len(external_id) > 2:
log.info(f'Using External ID: {external_id}')
data['external_id'] = f'%{external_id}%'
elif query_str and len(query_str) > 1:
log.info(f'Using Query String: {query_str}')
# Strip (left right) whitespace then commas then semicolons
query_str = query_str.strip().strip(',').strip(';')
# Replace commas, semicolons, and then spaces with %
query_str_like = query_str.replace(',', ' ').replace(';', ' ').replace(' ', '%').replace(' ', '%')
# data['query_str'] = f'%{query_str}%'
log.debug(query_str_like)
data['query_str'] = f'%{query_str_like}%'
query_li = query_str.split()
data['query_li'] = query_li
elif len(given_name) > 1 or len(family_name) > 1 or len(email) > 1:
log.info(f'Using other data fields') log.info(f'Using other data fields')
data['external_id'] = '%'+external_id+'%' if given_name: data['given_name'] = '%'+given_name+'%'
data['given_name'] = '%'+given_name+'%' else: data['given_name'] = '%'
data['family_name'] = '%'+family_name+'%' if family_name: data['family_name'] = '%'+family_name+'%'
data['email'] = '%'+email+'%' # Adding the % symbol here because it turns certain combinations into special characters else: data['family_name'] = '%'
if email: data['email'] = '%'+email+'%'
else: data['email'] = '%'
else:
return mk_resp(data=None, status_code=404, status_message=f'Need more characters for query.', response=commons.response)
log.debug(data) log.debug(data)
sql_enabled, data['enable'] = sql_enable_part(table_name='event_badge', enabled=commons.enabled) # Reasonably safe return str and bool sql_enabled, data['enable'] = sql_enable_part(table_name='event_badge', enabled=commons.enabled) # Reasonably safe return str and bool
@@ -201,6 +229,52 @@ async def search_event_badge_obj_li(
ORDER BY event_badge.given_name ASC, event_badge.family_name ASC, event_badge.created_on DESC, event_badge.updated_on DESC ORDER BY event_badge.given_name ASC, event_badge.family_name ASC, event_badge.created_on DESC, event_badge.updated_on DESC
{sql_limit}; {sql_limit};
""" """
elif external_id and len(external_id) > 2:
sql = f"""
SELECT *
FROM `v_event_badge` AS event_badge
WHERE event_badge.event_id = :event_id
AND event_badge.external_id LIKE :external_id
{sql_enabled}
ORDER BY event_badge.given_name ASC, event_badge.family_name ASC, event_badge.created_on DESC, event_badge.updated_on DESC
{sql_limit};
"""
elif query_str and len(query_str) > 1:
# sql = f"""
# SELECT *
# FROM `v_event_badge` AS event_badge
# WHERE event_badge.event_id = :event_id
# AND (
# event_badge.given_name LIKE :query_str
# OR event_badge.family_name LIKE :query_str
# OR event_badge.email LIKE :query_str
# )
# {sql_enabled}
# ORDER BY event_badge.given_name ASC, event_badge.family_name ASC, event_badge.created_on DESC, event_badge.updated_on DESC
# {sql_limit};
# """
# sql = f"""
# SELECT *
# FROM `v_event_badge` AS event_badge
# WHERE event_badge.event_id = :event_id
# AND (
# event_badge.given_name IN (:query_li)
# OR event_badge.family_name IN (:query_li)
# OR event_badge.email IN (:query_li)
# )
# {sql_enabled}
# ORDER BY event_badge.given_name ASC, event_badge.family_name ASC, event_badge.created_on DESC, event_badge.updated_on DESC
# {sql_limit};
# """
sql = f"""
SELECT *
FROM `v_event_badge` AS event_badge
WHERE event_badge.event_id = :event_id
AND event_badge.query_str LIKE :query_str
{sql_enabled}
ORDER BY event_badge.given_name ASC, event_badge.family_name ASC, event_badge.created_on DESC, event_badge.updated_on DESC
{sql_limit};
"""
else: else:
# sql = f""" # sql = f"""
# SELECT * # SELECT *