import datetime, pytz 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_exhibit_tracking_models import Event_Exhibit_Tracking_Base # ### BEGIN ### API Event Exhibit Models ### Event_Exhibit_Base() ### class Event_Exhibit_Base(BaseModel): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) id_random: Optional[str] = Field( **base_fields['event_exhibit_id_random'], alias = 'event_exhibit_id_random', ) id: Optional[int] = Field( alias = 'event_exhibit_id' ) code: Optional[str] # The assigned booth number or ID account_id_random: Optional[str] account_id: Optional[int] event_id_random: Optional[str] event_id: Optional[int] organization_id_random: Optional[str] organization_id: Optional[int] contact_id_random: Optional[str] contact_id: Optional[int] # Point of Contact person ID person_id_random: Optional[str] person_id: Optional[int] status_id_random: Optional[str] status_id: Optional[int] staff_passcode: Optional[str] name: Optional[str] tagline: Optional[str] description: Optional[str] logo_path: Optional[str] thumbnail_path: Optional[str] banner_image_path: Optional[str] banner_bg_color: Optional[str] background_image_path: Optional[str] background_bg_color: Optional[str] embed_html: Optional[str] staff_limit: Optional[int] hosted_file_limit: Optional[int] leads_api_access: Optional[bool] # NOTE: API access and use # Json type NOTE: All keys and values must be double quoted! # {"field_name": "The field value"} leads_custom_questions_json: Optional[Json] # NOTE: For now just using string instead of Json Pydantic data type. When getting the dict version for SQL this should be a string. leads_device_sm_qty: Optional[int] # NOTE: Cell phone sized devices rented by exhibitor. Should this be a separate linked table (event_device)? leads_device_lg_qty: Optional[int] # NOTE: Tablet (8 or 9 inch) sized devices rented by exhibitor. Should this be a separate linked table (event_device)? enable_organization_name_change: Optional[bool] enable_name_change: Optional[bool] enable_banner_image: Optional[bool] enable_background_image: Optional[bool] enable_embedded_content: Optional[bool] enable_staff_photo: Optional[bool] # access_key: Optional[str] # Maybe use in the future? # enable: Optional[bool] # Maybe use in the future? # enable_from: Optional[datetime.datetime] = None # Maybe use in the future? # enable_to: Optional[datetime.datetime] = None # Maybe use in the future? priority: Optional[bool] sort: Optional[int] group: Optional[str] notes: Optional[str] created_on: Optional[datetime.datetime] = None updated_on: Optional[datetime.datetime] = None # Including other related objects event_exhibit_tracking_list: Optional[list[Event_Exhibit_Tracking_Base]] _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) #@validator('event_exhibit_id_random', always=True) def event_exhibit_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_exhibit_id_lookup(cls, v, values, **kwargs): log.setLevel(logging.WARNING) log.debug(locals()) if values['id_random']: log.debug(values['id_random']) return redis_lookup_id_random(record_id_random=values['id_random'], table_name='event_exhibit') return None @validator('account_id', always=True) def account_id_lookup(cls, v, values, **kwargs): log.setLevel(logging.WARNING) log.debug(locals()) if values['account_id_random']: return redis_lookup_id_random(record_id_random=values['account_id_random'], table_name='account') return None @validator('event_id', always=True) def event_id_lookup(cls, v, values, **kwargs): log.setLevel(logging.WARNING) log.debug(locals()) if values['event_id_random']: return redis_lookup_id_random(record_id_random=values['event_id_random'], table_name='event') return None @validator('organization_id', always=True) def organization_id_lookup(cls, v, values, **kwargs): log.setLevel(logging.WARNING) log.debug(locals()) if values['organization_id_random']: return redis_lookup_id_random(record_id_random=values['organization_id_random'], table_name='organization') return None @validator('contact_id', always=True) def contact_id_lookup(cls, v, values, **kwargs): log.setLevel(logging.WARNING) log.debug(locals()) if values['contact_id_random']: return redis_lookup_id_random(record_id_random=values['contact_id_random'], table_name='contact') return None @validator('person_id', always=True) def person_id_lookup(cls, v, values, **kwargs): log.setLevel(logging.WARNING) log.debug(locals()) if values['person_id_random']: return redis_lookup_id_random(record_id_random=values['person_id_random'], table_name='person') return None # @validator('leads_custom_questions_json', always=True) # def leads_custom_questions_json_fix(cls, v, values, **kwargs): # if isinstance(v, str): # return json.loads(v) # # return v.dict() # else: # return v # return None class Config: underscore_attrs_are_private = True allow_population_by_field_name = True fields = base_fields # ### END ### API Event Exhibit Models ### Event_Exhibit_Base() ###