Files
OSIT-AE-API-FastAPI/app/models/membership_models.py
2021-06-17 16:54:46 -04:00

105 lines
4.0 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 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.membership_cfg_models import Membership_Cfg_Base
class Membership_Base(BaseModel):
log.setLevel(logging.WARNING)
log.debug(locals())
id_random: Optional[str] = Field(
**base_fields['membership_id_random'],
alias='membership_id_random',
default_factory=lambda:secrets.token_urlsafe(default_num_bytes),
)
id: Optional[int] = Field(
#alias='membership_id'
)
account_id_random: Optional[str]
account_id: Optional[int]
name: Optional[str]
description: Optional[str]
cycle_type: Optional[str] # Override membership_cfg
membership_length: Optional[int] = Field(0, ge=0, lt=150) # Override membership_cfg
prorate: Optional[bool] = False # Override membership_cfg
calendar_year_start_buffer_days: Optional[int] = Field(0, ge=0, lt=150) # Override membership_cfg
calendar_year_start_buffer_on: Optional[datetime.datetime] # Override membership_cfg
calendar_year_start_on: Optional[datetime.datetime] # Override membership_cfg
calendar_year_end_on: Optional[datetime.datetime] # Override membership_cfg
calendar_year_end_buffer_days: Optional[int] = Field(0, ge=0, lt=150) # Override membership_cfg
calendar_year_end_buffer_on: Optional[datetime.datetime] # Override membership_cfg
enable_privacy_view: Optional[bool] # Override membership_cfg
renew_warning_hours: Optional[int] # Override membership_cfg
accept_message: Optional[str] # Override membership_cfg
reject_message: Optional[str] # Override membership_cfg
renew_message: Optional[str] # Override membership_cfg
default_no_reply_email: Optional[str] # Override membership_cfg
default_no_reply_name: Optional[str] # Override membership_cfg
confirm_email: Optional[str] # Override membership_cfg
confirm_name: Optional[str] # Override membership_cfg
enable: Optional[bool]
enable_from: Optional[datetime.datetime] = None
enable_to: Optional[datetime.datetime] = None
priority: Optional[bool]
sort: Optional[int] = Field(0, ge=0, lt=100) # Essentially the membership level. Should there be a range limit?
group: Optional[str]
notes: Optional[str]
created_on: Optional[datetime.datetime] = None
updated_on: Optional[datetime.datetime] = None
# Including JSON data
# additional_terms_conditions: Optional[dict] = {} # Is this useful?
# Including other related objects
product: Optional[list] # Product_Base() List of products (for_type and for_id) that get this membership option
cfg: Optional[Membership_Cfg_Base] = Membership_Cfg_Base()
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
#@validator('membership_id_random', always=True)
def membership_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 membership_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['id_random']:
return redis_lookup_id_random(record_id_random=values['id_random'], table_name='membership')
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
# Membership_Base.update_forward_refs()