Files
OSIT-AE-API-FastAPI/app/models/event_badge_models.py
2022-04-15 18:25:06 -04:00

315 lines
12 KiB
Python

import datetime, hashlib, logging, os, pytz, redis, secrets
from typing import Dict, List, Optional, Set, Union
from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationError, validator
from app.db_sql import redis_lookup_id_random
from app.lib_general import log, logging
from app.models.common_field_schema import base_fields, default_num_bytes
from app.models.event_badge_template_models import Event_Badge_Template_Base
from app.models.order_models import Order_Base
class Event_Badge_Base(BaseModel):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
id_random: Optional[str] = Field(
**base_fields['event_badge_id_random'],
alias = 'event_badge_id_random',
default_factory = lambda:secrets.token_urlsafe(default_num_bytes),
)
id: Optional[int] = Field(
alias = 'event_badge_id'
)
# account_id_random: Optional[str]
# account_id: Optional[int]
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_badge_template_id_random: Optional[str]
event_badge_template_id: Optional[int]
event_person_id_random: Optional[str]
event_person_id: Optional[int]
person_id_random: Optional[str]
person_id: Optional[int]
external_id: Optional[str] # Generated internally or externally. Needs to be stable. It should not change.
external_sys_id: Optional[str] # Person ID generated by external system (should be stable and not change)
external_reg_id: Optional[str] # Registration ID generated by external system (should be stable and not change)
pronouns: 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
given_name: Optional[str]
middle_name: Optional[str]
family_name: Optional[str]
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
degree: Optional[str] # NOTE: Phasing out! Use *designations* instead.
degrees: Optional[str] # NOTE: Phasing out! Use *designations* instead.
credentials: Optional[str] # NOTE: Phasing out! Use *designations* instead.
professional_title: Optional[str] # Professional title
title: Optional[str] # NOTE: Phasing out! Use *professional_title* instead.
display_name: 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
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] # Override affiliations
email: Optional[str]
city: Optional[str]
county: Optional[str] # NOTE: This is for a county within a state or province
country_subdivision_code: Optional[str]
state_province: Optional[str]
state_province_abb: Optional[str]
country_alpha_2_code: Optional[str]
country: Optional[str]
# full_address: Optional[str]
location: Optional[str] # Actual location name shown on badge and other "public" areas
location_short: Optional[str] # Auto generated short version
location_long: Optional[str] # Auto generated long version
display_location: Optional[str] # Override location
# 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]
member_type_code: Optional[str]
member_type: Optional[str]
registration_type_code: Optional[str]
registration_type: Optional[str]
other_1: Optional[str]
other_2: Optional[str]
ticket_0_code: Optional[str]
ticket_1_code: Optional[str]
ticket_2_code: Optional[str]
ticket_3_code: Optional[str]
ticket_4_code: Optional[str]
ticket_5_code: Optional[str]
ticket_6_code: Optional[str]
ticket_7_code: Optional[str]
ticket_8_code: Optional[str]
ticket_9_code: Optional[str]
ticket_10_code: Optional[str]
agree_to_tc: Optional[bool] # Agree to terms and conditions
allow_tracking: Optional[bool] # Allow tracking for lead retrival and other marketing
print_first_datetime: Optional[datetime.datetime] = None
print_last_datetime: Optional[datetime.datetime] = None
print_count: Optional[int]
priority: Optional[bool]
sort: Optional[int]
group: Optional[str]
enable: Optional[bool]
notes: Optional[str]
created_on: Optional[datetime.datetime] = None
updated_on: Optional[datetime.datetime] = None
# Including other related objects
order: Optional[Union[Order_Base, None]]
ticket_list: Optional[list]
event_badge_template: Optional[Union[Event_Badge_Template_Base, None]]
_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_id', always=True)
def event_id_lookup(cls, v, values, **kwargs):
if isinstance(v, int) and v > 0: return v
elif id_random := values.get('event_id_random'):
return redis_lookup_id_random(record_id_random=id_random, table_name='event')
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
@validator('person_id', always=True)
def person_id_lookup(cls, v, values, **kwargs):
if isinstance(v, int) and v > 0: return v
elif id_random := values.get('person_id_random'):
return redis_lookup_id_random(record_id_random=id_random, table_name='person')
return None
class Config:
underscore_attrs_are_private = True
allow_population_by_field_name = True
fields = base_fields
class Event_Badge_Basic_Base(BaseModel):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
id_random: Optional[str] = Field(
**base_fields['event_badge_id_random'],
alias = 'event_badge_id_random',
)
event_badge_template_id_random: Optional[str]
# event_badge_template_id: Optional[int]
event_person_id_random: Optional[str]
# event_person_id: Optional[int]
external_id: Optional[str] # Generated internally or externally. Needs to be stable. It should not change.
# external_sys_id: Optional[str] # Person ID generated by external system (should be stable and not change)
# external_reg_id: Optional[str] # Registration ID generated by external system (should be stable and not change)
pronouns: 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
given_name: Optional[str]
middle_name: Optional[str]
family_name: Optional[str]
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_name: 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
affiliations: Optional[str] # One or more affiliations with organizations, companies, and other groups
display_affiliations: Optional[str] # Override affiliations
email: Optional[str]
city: Optional[str]
county: Optional[str] # NOTE: This is for a county within a state or province
country_subdivision_code: Optional[str]
state_province: Optional[str]
state_province_abb: Optional[str]
country_alpha_2_code: Optional[str]
country: Optional[str]
# full_address: Optional[str]
location: Optional[str] # Actual location name shown on badge and other "public" areas
# 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]
badge_type: Optional[str]
member_type_code: Optional[str]
member_type: Optional[str]
registration_type_code: Optional[str]
registration_type: Optional[str]
# other_1: Optional[str]
# 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
# print_first_datetime: Optional[datetime.datetime] = None
# print_last_datetime: Optional[datetime.datetime] = None
# print_count: Optional[int]
# priority: Optional[bool]
# sort: Optional[int]
# group: Optional[str]
enable: Optional[bool]
# notes: Optional[str]
created_on: Optional[datetime.datetime] = None
updated_on: Optional[datetime.datetime] = None
# Including other related objects
# order: Optional[Union[Order_Base, None]]
# ticket_list: Optional[list]
event_badge_template: Optional[Union[Event_Badge_Template_Base, None]]
_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
fields = base_fields