Files
OSIT-AE-API-FastAPI/app/models/event_badge_models.py
2022-02-23 18:34:21 -05:00

153 lines
5.7 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]
event_person_id_random: Optional[str]
event_person_id: Optional[int]
person_id_random: Optional[str]
person_id: Optional[int]
external_id: Optional[str]
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] # 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.
email: Optional[str]
city: Optional[str]
county: Optional[str] # NOTE: This is for a county within a state or province
state_province: Optional[str]
country: Optional[str]
location_name: Optional[str] # Actual location name shown on badge and other "public" areas
full_address: 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]
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]
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_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