diff --git a/app/models/common_field_schema.py b/app/models/common_field_schema.py index 816fdbe..0480c7c 100644 --- a/app/models/common_field_schema.py +++ b/app/models/common_field_schema.py @@ -42,6 +42,7 @@ base_fields['event_location_id_random'] = xxx_id_random_field_schema base_fields['event_person_id_random'] = xxx_id_random_field_schema base_fields['event_person_detail_id_random'] = xxx_id_random_field_schema base_fields['event_person_profile_id_random'] = xxx_id_random_field_schema +base_fields['event_person_tracking_id_random'] = xxx_id_random_field_schema base_fields['event_presentation_id_random'] = xxx_id_random_field_schema base_fields['event_presenter_id_random'] = xxx_id_random_field_schema base_fields['event_registration_id_random'] = xxx_id_random_field_schema diff --git a/app/models/event_badge_template_models.py b/app/models/event_badge_template_models.py index e74fc18..b5474bb 100644 --- a/app/models/event_badge_template_models.py +++ b/app/models/event_badge_template_models.py @@ -33,6 +33,7 @@ class Event_Badge_Template_Base(BaseModel): description: Optional[str] logo_filename: Optional[str] + logo_path: Optional[str] header_row_1: Optional[str] header_row_2: Optional[str] header_background: Optional[str] @@ -55,6 +56,8 @@ class Event_Badge_Template_Base(BaseModel): wireless_password: Optional[str] style_filename: Optional[str] + style_href: Optional[str] + script_src: Optional[str] passcode: Optional[str] notes: Optional[str] diff --git a/app/models/event_person_tracking_models.py b/app/models/event_person_tracking_models.py new file mode 100644 index 0000000..78835f0 --- /dev/null +++ b/app/models/event_person_tracking_models.py @@ -0,0 +1,112 @@ +from __future__ import annotations +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 + + +class Event_Person_Tracking_Base(BaseModel): + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + id_random: Optional[str] = Field( + **base_fields['event_person_tracking_id_random'], + alias = 'event_person_tracking_id_random', + default_factory = lambda:secrets.token_urlsafe(default_num_bytes), + ) + id: Optional[int] = Field( + alias = 'event_person_tracking_id' + ) + + # account_id_random: Optional[str] + # account_id: Optional[int] + + event_id_random: Optional[str] + event_id: Optional[int] + + event_session_id_random: Optional[str] + event_session_id: Optional[int] + + event_person_id_random: Optional[str] + event_person_id: Optional[int] + + check_in_out: Optional[bool] + break_in_out: Optional[bool] + other_in_out: Optional[bool] + other_type: Optional[str] # For unknown client specific tracking (lunch, medical, pause, etc) + + in_datetime: datetime.datetime # This should generally default to the created datetime and be overridden as needed + out_datetime: Optional[datetime.datetime] # This should generally default to the updated datetime and be overridden as needed + + # Maybe add minutes or hours? + # Maybe add timezone? + + + check_in: Optional[bool] # Does this make sense to use instead? + break_out: Optional[bool] # Does this make sense to use instead? + break_in: Optional[bool] # Does this make sense to use instead? + check_out: Optional[bool] # Does this make sense to use instead? + datetime: datetime.datetime # This should generally default to the created datetime and be overridden as needed + + + notes: Optional[str] + created_on: Optional[datetime.datetime] = None + updated_on: Optional[datetime.datetime] = None + + _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) + + #@validator('event_person_tracking_id_random', always=True) + def event_person_tracking_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_person_tracking_id_lookup(cls, v, values, **kwargs): + log.setLevel(logging.WARNING) + log.debug(locals()) + + if values.get('id_random', None): + log.debug(values['id_random']) + return redis_lookup_id_random(record_id_random=values['id_random'], table_name='event_person_tracking') + return None + + @validator('event_id', always=True) + def event_id_lookup(cls, v, values, **kwargs): + log.setLevel(logging.WARNING) + log.debug(locals()) + + if values.get('event_id_random', None): + return redis_lookup_id_random(record_id_random=values['event_id_random'], table_name='event') + return None + + @validator('event_session_id', always=True) + def event_session_id_lookup(cls, v, values, **kwargs): + log.setLevel(logging.WARNING) + log.debug(locals()) + + if values.get('event_session_id_random', None): + return redis_lookup_id_random(record_id_random=values['event_session_id_random'], table_name='event_session') + return None + + @validator('event_person_id', always=True) + def event_person_id_lookup(cls, v, values, **kwargs): + log.setLevel(logging.WARNING) + log.debug(locals()) + + if values.get('event_person_id_random', None): + return redis_lookup_id_random(record_id_random=values['event_person_id_random'], table_name='event_person') + return None + + class Config: + underscore_attrs_are_private = True + allow_population_by_field_name = True + fields = base_fields