Files
OSIT-AE-API-FastAPI/app/models/event_model.py
2021-03-08 16:39:41 -05:00

137 lines
4.2 KiB
Python

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 ..lib_general import *
from ..log import *
from .common_field_schema import base_fields, default_num_bytes
class Event_Base(BaseModel):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
id_random: Optional[str] = Field(
**base_fields['event_id_random'],
alias='event_id_random',
default_factory=lambda:secrets.token_urlsafe(default_num_bytes),
)
id: Optional[int] = Field(
#alias='event_id'
)
account_id_random: Optional[str]
account_id: Optional[int]
user_id_random: Optional[str]
user_id: Optional[int]
lu_event_type_id: Optional[int]
#lu_event_type: Optional[str] # Needs to be reviewed
type_name: Optional[str] = Field(
alias='type'
)
name: Optional[str]
summary: Optional[str]
description: Optional[str]
format: Optional[str]
lu_time_zone_id: Optional[int]
timezone: Optional[str]
start_datetime: Optional[datetime.datetime] = None
end_datetime: Optional[datetime.datetime] = None
recurring: Optional[bool]
recurring_pattern: Optional[str]
recurring_start_time: Optional[datetime.time]
recurring_end_time: Optional[datetime.time]
recurring_text: Optional[str]
weekday_sunday: Optional[bool]
weekday_monday: Optional[bool]
weekday_tuesday: Optional[bool]
weekday_wednesday: Optional[bool]
weekday_thursday: Optional[bool]
weekday_friday: Optional[bool]
weekday_saturday: Optional[bool]
address_location_id: Optional[int]
location_text: Optional[str]
online_start: Optional[datetime.datetime] = None
online_end: Optional[datetime.datetime] = None
reg_deadline_1: Optional[datetime.datetime] = None
reg_deadline_2: Optional[datetime.datetime] = None
reg_deadline_3: Optional[datetime.datetime] = None
reg_deadline_4: Optional[datetime.datetime] = None
max_registrants: Optional[int]
private: Optional[bool] # invite only
physical: Optional[bool] # physical in person event
virtual: Optional[bool] # virtual remote access event
# NOT FINISHED YET
# access_key: Optional[str] # Maybe use in the future?
enable: Optional[bool]
enable_from: Optional[datetime.datetime] = None
enable_to: Optional[datetime.datetime] = None
priority: Optional[bool]
sort: Optional[int]
group: Optional[str]
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_id_random', always=True)
def event_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_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')
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('user_id', always=True)
def user_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['user_id_random']:
return redis_lookup_id_random(record_id_random=values['user_id_random'], table_name='user')
return None
class Config:
underscore_attrs_are_private = True
fields = base_fields
Event_Base.update_forward_refs()