Work on exhibit tracking export and API badge ID lookup

This commit is contained in:
Scott Idem
2023-03-07 19:01:45 -05:00
parent ab8e1b8899
commit 461d547c09
4 changed files with 232 additions and 113 deletions

View File

@@ -55,6 +55,46 @@ def load_event_badge_obj(
return False
log.debug(event_badge_obj)
if return_basic_model:
if event_badge_obj.pronouns_override:
event_badge_obj.pronouns = event_badge_obj.pronouns_override
event_badge_obj.pronouns_override = None
if event_badge_obj.professional_title_override:
event_badge_obj.professional_title = event_badge_obj.professional_title_override
event_badge_obj.professional_title_override = None
# log.debug(event_badge_obj)
if event_badge_obj.full_name_override:
event_badge_obj.full_name = event_badge_obj.full_name_override
event_badge_obj.full_name_override = None
if event_badge_obj.affiliations_override:
event_badge_obj.affiliations = event_badge_obj.affiliations_override
event_badge_obj.affiliations_override = None
if event_badge_obj.email_override:
event_badge_obj.email = event_badge_obj.email_override
event_badge_obj.email_override = None
if event_badge_obj.phone_override:
event_badge_obj.phone = event_badge_obj.phone_override
event_badge_obj.phone_override = None
if event_badge_obj.location_override:
event_badge_obj.location = event_badge_obj.location_override
event_badge_obj.location_override = None
log.debug(event_badge_obj.dict(by_alias=True, exclude_unset=True, exclude={'pronouns_override', 'professional_title_override', 'full_name_override', 'affiliations_override', 'email_override', 'phone_override', 'location_override'}))
event_badge_dict = event_badge_obj.dict(by_alias=True, exclude_unset=True, exclude={'pronouns_override', 'professional_title_override', 'full_name_override', 'affiliations_override', 'email_override', 'phone_override', 'location_override'})
try:
event_badge_obj = Event_Badge_Basic_Base(**event_badge_dict)
except ValidationError as e:
log.error(e.json())
return False
log.debug(event_badge_obj)
# Updated 2022-03-14
if inc_event_badge_template:
log.info('Need to include event badge template data...')

View File

@@ -62,16 +62,11 @@ class Event_Badge_Base(BaseModel):
professional_title_override: Optional[str] # Override professional title
# title: Optional[str] # NOTE: Phasing out! Use *professional_title* instead.
display_name: Optional[str] # NOTE: Deprecated! Phasing out! Use *full_name_override* instead.
full_name_override: Optional[str] # # Override full_name; Actual name shown on badge and other "public" areas
# BEGIN # Auto created name variations
full_name: Optional[str] # title_names given_name middle_name family_name designations
full_name_override: Optional[str] # # Override full_name; Actual name shown on badge and other "public" areas
affiliations: Optional[str] # One or more affiliations with organizations, companies, and other groups
# affiliation: Optional[str] # NOTE: Phasing out! Use *affiliations* instead.
# affiliation_name: Optional[str] # NOTE: Phasing out! Use *affiliations* instead.
display_affiliations: Optional[str] # NOTE: Deprecated! Phasing out! Use *affiliations_override* instead.
affiliations_override: Optional[str] # Override affiliations
email: Optional[str]
@@ -100,10 +95,9 @@ class Event_Badge_Base(BaseModel):
# full_address: Optional[str]
location: Optional[str] # Actual location name shown on badge and other "public" areas
location_override: Optional[str] # Override location
location_short: Optional[str] # Auto generated short version
location_long: Optional[str] # Auto generated long version
display_location: Optional[str] # NOTE: Deprecated! Phasing out! Use *location_override* instead.
location_override: Optional[str] # Override location
# This is updated using SQL triggers and a SQL function
# Combines informal, given, middle, family, email
@@ -233,6 +227,8 @@ class Event_Badge_Basic_Base(BaseModel):
# external_reg_id: Optional[str] # Registration ID generated by external system (should be stable and not change)
pronouns: Optional[str] # Preferred pronouns
pronouns_override: Optional[str] # Preferred pronouns
informal_name: Optional[str]
title_names: Optional[str] # Title for generation, official position, or professional or academic qualification, other honorific, or other name prefix
@@ -242,17 +238,20 @@ class Event_Badge_Basic_Base(BaseModel):
designations: Optional[str] # Temporary or long-term designations related to family, relationships, person differentiation (Junior/Senior), location, social status, professional qualifications, legal status, or other name suffix
professional_title: Optional[str] # Professional title
display_professional_title: Optional[str] # Override professional title
display_name: Optional[str] # Override full_name; Actual name shown on badge and other "public" areas
professional_title_override: Optional[str] # Override professional title
# BEGIN # Auto created name variations
full_name: Optional[str] # title_names given_name middle_name family_name designations
full_name_override: Optional[str] # Override full_name; Actual name shown on badge and other "public" areas
affiliations: Optional[str] # One or more affiliations with organizations, companies, and other groups
display_affiliations: Optional[str] # Override affiliations
affiliations_override: Optional[str] # Override affiliations
email: Optional[str]
email_override: Optional[str]
phone: Optional[str]
phone_override: Optional[str]
# address_line_1: Optional[str]
# address_line_2: Optional[str]
@@ -272,10 +271,10 @@ class Event_Badge_Basic_Base(BaseModel):
country: Optional[str]
# full_address: Optional[str]
# location: Optional[str] # Actual location name shown on badge and other "public" areas
location: Optional[str] # Actual location name shown on badge and other "public" areas
location_override: Optional[str] # Override location
# location_short: Optional[str] # Auto generated short version
# location_long: Optional[str] # Auto generated long version
display_location: Optional[str] # Override location
# NOTE: More badge fields need to be added here once things are cleaned up
# badge_type_code: Optional[str]
@@ -289,7 +288,7 @@ class Event_Badge_Basic_Base(BaseModel):
# other_2: Optional[str]
# agree_to_tc: Optional[bool] # Agree to terms and conditions
allow_tracking: Optional[bool] # Allow tracking for lead retrival and other marketing
allow_tracking: Optional[bool] # Allow tracking for lead retrieval and other marketing
# print_first_datetime: Optional[datetime.datetime] = None
# print_last_datetime: Optional[datetime.datetime] = None
@@ -312,36 +311,6 @@ class Event_Badge_Basic_Base(BaseModel):
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
#@validator('event_badge_id_random', always=True)
# def event_badge_id_random_copy(cls, v, values, **kwargs):
# log.setLevel(logging.WARNING)
# log.debug(locals())
# if values['id_random']:
# return values['id_random']
# return None
# @validator('id', always=True)
# def event_badge_id_lookup(cls, v, values, **kwargs):
# if isinstance(v, int) and v > 0: return v
# elif id_random := values.get('id_random'):
# return redis_lookup_id_random(record_id_random=id_random, table_name='event_badge')
# return None
# @validator('event_badge_template_id', always=True)
# def event_badge_template_id_lookup(cls, v, values, **kwargs):
# if isinstance(v, int) and v > 0: return v
# elif id_random := values.get('event_badge_template_id_random'):
# return redis_lookup_id_random(record_id_random=id_random, table_name='event_badge_template')
# return None
# @validator('event_person_id', always=True)
# def event_person_id_lookup(cls, v, values, **kwargs):
# if isinstance(v, int) and v > 0: return v
# elif id_random := values.get('event_person_id_random'):
# return redis_lookup_id_random(record_id_random=id_random, table_name='event_person')
# return None
class Config:
underscore_attrs_are_private = True
allow_population_by_field_name = True

View File

@@ -58,21 +58,67 @@ class Event_Exhibit_Tracking_Base(BaseModel):
# 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_title_names: Optional[str]
event_badge_given_name: Optional[str]
event_badge_middle_name: Optional[str]
event_badge_family_name: Optional[str]
event_badge_full_name: Optional[str]
event_badge_full_name_override: Optional[str]
event_badge_pronouns: Optional[str] = Field(
alias = 'person_pronouns'
) # Preferred pronouns
event_badge_pronouns_override: Optional[str] = Field(
alias = 'person_pronouns_override'
) # Override pronouns
event_badge_designations: Optional[str]
event_badge_professional_title: Optional[str]
event_badge_professional_title_override: Optional[str]
event_badge_affiliations: Optional[str]
event_badge_affiliations_override: Optional[str]
event_badge_informal_name: Optional[str] = Field(
alias = 'person_informal_name'
)
event_badge_email: Optional[str]
event_badge_title_names: Optional[str] = Field(
# alias = 'person_title_names'
)
event_badge_given_name: Optional[str] = Field(
# alias = 'person_given_name'
)
event_badge_middle_name: Optional[str] = Field(
# alias = 'person_middle_name'
)
event_badge_family_name: Optional[str] = Field(
# alias = 'person_family_name'
)
event_badge_designations: Optional[str] = Field(
# alias = 'person_designations'
)
event_badge_professional_title: Optional[str] = Field(
# alias = 'person_pronouns_override'
)
event_badge_professional_title_override: Optional[str] = Field(
# alias = 'person_professional_title'
)
event_badge_full_name: Optional[str] = Field(
# alias = 'person_full_name'
)
event_badge_full_name_override: Optional[str] = Field(
# alias = 'person_full_name_override'
)
event_badge_affiliations: Optional[str] = Field(
# alias = 'person_affiliations'
)
event_badge_affiliations_override: Optional[str] = Field(
# alias = 'person_affiliations_override'
)
event_badge_email: Optional[str] = Field(
# alias = 'person_email'
)
event_badge_email_override: Optional[str] = Field(
# alias = 'person_email_override'
)
event_badge_phone: Optional[str] = Field(
# alias = 'person_phone'
)
event_badge_phone_override: Optional[str] = Field(
# alias = 'person_phone_override'
)
# event_badge_address_line_1: Optional[str]
# event_badge_address_line_2: Optional[str]
@@ -80,17 +126,27 @@ class Event_Exhibit_Tracking_Base(BaseModel):
# event_badge_city: Optional[str]
# event_badge_county: Optional[str] # NOTE: This is for a county within a state or province
# event_badge_country_subdivision_code: Optional[str]
# event_badge_state_province_abb: Optional[str]
# event_badge_state_province: Optional[str]
# event_badge_state_province_abb: Optional[str]
# event_badge_postal_code: Optional[str]
event_badge_country_alpha_2_code: Optional[str]
event_badge_country: Optional[str]
event_badge_country_alpha_2_code: Optional[str] = Field(
# alias = 'person_country_alpha_2_code'
)
event_badge_country: Optional[str] = Field(
# alias = 'person_country'
)
# event_badge_location: Optional[str]
event_badge_location_override: Optional[str]
event_badge_location: Optional[str] = Field(
# alias = 'person_location'
)
event_badge_location_override: Optional[str] = Field(
# alias = 'person_location_override'
)
event_person_informal_name: Optional[str]
event_person_given_name: Optional[str]

View File

@@ -1,7 +1,7 @@
import datetime, time
from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, Response, status
from fastapi.responses import FileResponse
from pydantic import BaseModel, EmailStr, Field
from pydantic import BaseModel, EmailStr, Field, ValidationError
from typing import Dict, List, Optional, Set, Union
from app.lib_general import create_export_file, return_full_tmp_path, log, logging, common_route_params, Common_Route_Params
@@ -237,7 +237,7 @@ async def get_event_exhibit_obj_tracking_list(
commons: Common_Route_Params = Depends(common_route_params),
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if event_exhibit_id := redis_lookup_id_random(record_id_random=event_exhibit_id, table_name='event_exhibit'): pass
@@ -259,77 +259,128 @@ async def get_event_exhibit_obj_tracking_list(
# inc_event_person = inc_event_person,
):
event_exhibit_tracking_result_list.append(load_event_exhibit_tracking_result)
event_exhibit_tracking_obj = load_event_exhibit_tracking_result
data_dict = load_event_exhibit_tracking_result.dict(by_alias=True, exclude_unset=False)
if event_exhibit_tracking_obj.event_badge_pronouns_override:
event_exhibit_tracking_obj.event_badge_pronouns = event_exhibit_tracking_obj.event_badge_pronouns_override
event_exhibit_tracking_obj.event_badge_pronouns_override = None
data_dict['person_informal_name'] = data_dict.pop('event_badge_informal_name')
data_dict['person_title_names'] = data_dict.pop('event_badge_title_names')
if event_exhibit_tracking_obj.event_badge_professional_title_override:
event_exhibit_tracking_obj.event_badge_professional_title = event_exhibit_tracking_obj.event_badge_professional_title_override
event_exhibit_tracking_obj.event_badge_professional_title_override = None
# log.debug(event_exhibit_tracking_obj)
data_dict['person_given_name'] = data_dict.pop('event_badge_given_name')
data_dict['person_middle_name'] = data_dict.pop('event_badge_middle_name')
data_dict['person_family_name'] = data_dict.pop('event_badge_family_name')
if event_exhibit_tracking_obj.event_badge_full_name_override:
event_exhibit_tracking_obj.event_badge_full_name = event_exhibit_tracking_obj.event_badge_full_name_override
event_exhibit_tracking_obj.event_badge_full_name_override = None
data_dict['person_designations'] = data_dict.pop('event_badge_designations')
data_dict['person_professional_title'] = data_dict.pop('event_badge_professional_title')
data_dict['person_professional_title_override'] = data_dict.pop('event_badge_professional_title_override')
if event_exhibit_tracking_obj.event_badge_affiliations_override:
event_exhibit_tracking_obj.event_badge_affiliations = event_exhibit_tracking_obj.event_badge_affiliations_override
event_exhibit_tracking_obj.event_badge_affiliations_override = None
data_dict['person_full_name'] = data_dict.pop('event_badge_full_name')
data_dict['person_full_name_override'] = data_dict.pop('event_badge_full_name_override')
if event_exhibit_tracking_obj.event_badge_email_override:
event_exhibit_tracking_obj.event_badge_email = event_exhibit_tracking_obj.event_badge_email_override
event_exhibit_tracking_obj.event_badge_email_override = None
data_dict['person_affiliations'] = data_dict.pop('event_badge_affiliations')
data_dict['person_affiliations_override'] = data_dict.pop('event_badge_affiliations_override')
if event_exhibit_tracking_obj.event_badge_phone_override:
event_exhibit_tracking_obj.event_badge_phone = event_exhibit_tracking_obj.event_badge_phone_override
event_exhibit_tracking_obj.event_badge_phone_override = None
data_dict['person_email'] = data_dict.pop('event_badge_email')
if event_exhibit_tracking_obj.event_badge_location_override:
event_exhibit_tracking_obj.event_badge_location = event_exhibit_tracking_obj.event_badge_location_override
event_exhibit_tracking_obj.event_badge_location_override = None
if 'event_badge_address_line_1' in data_dict:
data_dict['person_address_line_1'] = data_dict.pop('event_badge_address_line_1')
else: data_dict['person_address_line_1'] = None
if 'event_badge_address_line_2' in data_dict:
data_dict['person_address_line_2'] = data_dict.pop('event_badge_address_line_2')
else: data_dict['person_address_line_2'] = None
if 'event_badge_address_line_3' in data_dict:
data_dict['person_address_line_3'] = data_dict.pop('event_badge_address_line_3')
else: data_dict['person_address_line_3'] = None
# log.debug(event_exhibit_tracking_obj.dict(by_alias=True, exclude_unset=True, exclude={'pronouns_override', 'professional_title_override', 'full_name_override', 'affiliations_override', 'email_override', 'phone_override', 'location_override'}))
# event_exhibit_tracking_dict = event_exhibit_tracking_obj.dict(by_alias=True, exclude_unset=True, exclude={'pronouns_override', 'professional_title_override', 'full_name_override', 'affiliations_override', 'email_override', 'phone_override', 'location_override'})
event_exhibit_tracking_dict = event_exhibit_tracking_obj.dict(by_alias=True, exclude_unset=False)
# try:
# event_exhibit_tracking_obj = Event_Badge_Basic_Base(**event_badge_dict)
# except ValidationError as e:
# log.error(e.json())
# return False
data_dict = event_exhibit_tracking_dict
# data_dict = event_exhibit_tracking_obj.dict(by_alias=True, exclude_unset=False)
data_dict['exhibit_tracking_id'] = data_dict.pop('event_exhibit_tracking_id_random', None)
data_dict['badge_id'] = data_dict.pop('event_badge_id_random', None)
data_dict['person_informal_name'] = data_dict.pop('event_badge_informal_name', None)
data_dict['person_title_names'] = data_dict.pop('event_badge_title_names', None)
data_dict['person_given_name'] = data_dict.pop('event_badge_given_name', None)
data_dict['person_middle_name'] = data_dict.pop('event_badge_middle_name', None)
data_dict['person_family_name'] = data_dict.pop('event_badge_family_name', None)
data_dict['person_designations'] = data_dict.pop('event_badge_designations', None)
data_dict['person_professional_title'] = data_dict.pop('event_badge_professional_title', None)
# data_dict['person_professional_title_override'] = data_dict.pop('event_badge_professional_title_override', None)
data_dict['person_full_name'] = data_dict.pop('event_badge_full_name', None)
# data_dict['person_full_name_override'] = data_dict.pop('event_badge_full_name_override', None)
data_dict['person_affiliations'] = data_dict.pop('event_badge_affiliations', None)
# data_dict['person_affiliations_override'] = data_dict.pop('event_badge_affiliations_override', None)
data_dict['person_email'] = data_dict.pop('event_badge_email', None)
# if 'event_badge_address_line_1' in data_dict:
# data_dict['person_address_line_1'] = data_dict.pop('event_badge_address_line_1', None)
# else: data_dict['person_address_line_1'] = None
# if 'event_badge_address_line_2' in data_dict:
# data_dict['person_address_line_2'] = data_dict.pop('event_badge_address_line_2', None)
# else: data_dict['person_address_line_2'] = None
# if 'event_badge_address_line_3' in data_dict:
# data_dict['person_address_line_3'] = data_dict.pop('event_badge_address_line_3', None)
# else: data_dict['person_address_line_3'] = None
if 'event_badge_city' in data_dict:
data_dict['person_city'] = data_dict.pop('event_badge_city')
data_dict['person_city'] = data_dict.pop('event_badge_city', None)
else: data_dict['person_city'] = None
if 'event_badge_country_subdivision_code' in data_dict:
data_dict['person_country_subdivision_code'] = data_dict.pop('event_badge_country_subdivision_code')
data_dict['person_country_subdivision_code'] = data_dict.pop('event_badge_country_subdivision_code', None)
else: data_dict['person_country_subdivision_code'] = None
if 'event_badge_state_province_abb' in data_dict:
data_dict['person_state_province_abb'] = data_dict.pop('event_badge_state_province_abb')
data_dict['person_state_province_abb'] = data_dict.pop('event_badge_state_province_abb', None)
else: data_dict['person_state_province_abb'] = None
if 'event_badge_state_province' in data_dict:
data_dict['person_state_province'] = data_dict.pop('event_badge_state_province')
data_dict['person_state_province'] = data_dict.pop('event_badge_state_province', None)
else: data_dict['person_state_province'] = None
if 'event_badge_postal_code' in data_dict:
data_dict['person_postal_code'] = data_dict.pop('event_badge_postal_code')
data_dict['person_postal_code'] = data_dict.pop('event_badge_postal_code', None)
else: data_dict['person_postal_code'] = None
if 'event_badge_country_alpha_2_code' in data_dict:
data_dict['person_country_alpha_2_code'] = data_dict.pop('event_badge_country_alpha_2_code')
data_dict['person_country_alpha_2_code'] = data_dict.pop('event_badge_country_alpha_2_code', None)
else: data_dict['person_country_alpha_2_code'] = None
if 'event_badge_country' in data_dict:
data_dict['person_country'] = data_dict.pop('event_badge_country')
data_dict['person_country'] = data_dict.pop('event_badge_country', None)
else: data_dict['person_country'] = None
if 'event_badge_location' in data_dict:
data_dict['person_location'] = data_dict.pop('event_badge_location')
data_dict['person_location'] = data_dict.pop('event_badge_location', None)
else: data_dict['person_location'] = None
if 'event_badge_location_override' in data_dict:
data_dict['person_location_override'] = data_dict.pop('event_badge_location_override')
else: data_dict['person_location_override'] = None
# if 'event_badge_location_override' in data_dict:
# data_dict['person_location_override'] = data_dict.pop('event_badge_location_override', None)
# else: data_dict['person_location_override'] = None
log.debug(data_dict)
data_dict_list_for_export.append(data_dict)
else:
event_exhibit_tracking_result_list.append(None)
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
column_name_li = [
'event_exhibit_tracking_id_random',
'event_badge_id_random',
# 'event_exhibit_tracking_id_random',
'exhibit_tracking_id',
# 'event_badge_id_random',
'badge_id',
# 'person_pronouns',
'person_informal_name',
@@ -341,32 +392,32 @@ async def get_event_exhibit_obj_tracking_list(
'person_designations',
'person_professional_title',
'person_professional_title_override',
# 'person_professional_title_override',
'person_full_name',
'person_full_name_override',
# 'person_full_name_override',
'person_affiliations',
'person_affiliations_override',
# 'person_affiliations_override',
'person_email',
# 'person_address_line_1',
# 'person_address_line_2',
# 'person_address_line_3',
# # 'person_address_line_1',
# # 'person_address_line_2',
# # 'person_address_line_3',
# 'person_city',
# # 'person_city',
# 'person_country_subdivision_code', 'person_state_province_abb',
# 'person_state_province',
# # 'person_country_subdivision_code', 'person_state_province_abb',
# # 'person_state_province',
# 'person_postal_code',
# # 'person_postal_code',
'person_country_alpha_2_code',
'person_country',
'person_location',
'person_location_override',
# 'person_location_override',
'priority',
'sort',
@@ -377,6 +428,9 @@ async def get_event_exhibit_obj_tracking_list(
'updated_on',
]
log.debug(column_name_li)
log.debug(data_dict_list_for_export)
datetime_format='%Y-%m-%d_%H%M'
# current_datetime = datetime.datetime.now() # Servers timezone (Eastern)
@@ -388,7 +442,7 @@ async def get_event_exhibit_obj_tracking_list(
elif file_type == 'Excel':
filename_w_ext = filename+'.xlsx'
if result := create_export_file(data_dict_list=data_dict_list_for_export, column_name_li=column_name_li, subdir_path='event_exhibit', filename=filename, export_type=file_type):
if result := create_export_file(data_dict_list=data_dict_list_for_export, column_name_li=column_name_li, subdir_path='event_exhibit', filename=filename, rm_id=False, export_type=file_type):
tmp_file_path = result
else:
log.error('Something went wrong while creating or saving the export file')