Work on Impexium and badges for ISHLT
This commit is contained in:
@@ -179,6 +179,7 @@ def get_events(page=1):
|
||||
# Updated 2021-10-07
|
||||
def get_event_registrants(
|
||||
event_code: str,
|
||||
details: bool = False,
|
||||
page: int = 0,
|
||||
# return_all: bool = False
|
||||
):
|
||||
@@ -209,7 +210,7 @@ def get_event_registrants(
|
||||
# pass
|
||||
endpoint = f'/Events/{event_code}/Registrations/{page}'
|
||||
uri = api['base_url']+endpoint
|
||||
params = {}
|
||||
params = { 'includeDetails': details }
|
||||
|
||||
if resp := requests.get(url=uri, params=params, headers=api['headers']): pass
|
||||
else: break
|
||||
|
||||
@@ -30,6 +30,10 @@ class Event_Badge_Base(BaseModel):
|
||||
event_id_random: Optional[str]
|
||||
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: Optional[int]
|
||||
|
||||
@@ -73,6 +77,10 @@ class Event_Badge_Base(BaseModel):
|
||||
|
||||
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
|
||||
badge_type_code: Optional[str]
|
||||
badge_type: Optional[str]
|
||||
|
||||
@@ -26,6 +26,7 @@ router = APIRouter()
|
||||
@router.get('/event/{e_impexium_event_id}/import_reg', response_model=Resp_Body_Base)
|
||||
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)
|
||||
details: bool = False,
|
||||
page: int = 0, # 250 per page from Impexium
|
||||
event_id: str = Query(..., min_length=11, max_length=22), # For ISHLT: ZDzTBlevhZs (2022-04)
|
||||
# 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
|
||||
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))
|
||||
|
||||
# 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['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['pronouns'] = event_registrant.get('gender')
|
||||
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')
|
||||
|
||||
if email: event_person_profile_data['email'] = email
|
||||
|
||||
event_person_data['event_person_profile'] = {}
|
||||
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')
|
||||
|
||||
if email: event_badge_data['email'] = email
|
||||
|
||||
event_badge_data['city'] = event_registrant.get('badgeCity')
|
||||
event_badge_data['state_province'] = event_registrant.get('badgeState')
|
||||
|
||||
|
||||
@@ -142,15 +142,17 @@ async def search_event_badge_obj_li(
|
||||
event_badge_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),
|
||||
family_name: str = Query('%', max_length=25),
|
||||
email: str = Query('%', max_length=50),
|
||||
query_str: 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),
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
# 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
|
||||
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['account_id'] = account_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:
|
||||
log.info(f'Using Event Badge ID: {event_badge_id}')
|
||||
data['event_badge_id_random'] = f'%{event_badge_id}%'
|
||||
elif event_person_id and len(event_person_id) > 2:
|
||||
log.info(f'Using Event Person ID: {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')
|
||||
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
|
||||
if given_name: data['given_name'] = '%'+given_name+'%'
|
||||
else: data['given_name'] = '%'
|
||||
if family_name: data['family_name'] = '%'+family_name+'%'
|
||||
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)
|
||||
|
||||
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
|
||||
{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:
|
||||
# sql = f"""
|
||||
# SELECT *
|
||||
|
||||
Reference in New Issue
Block a user