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 Membership_Cfg_Base(BaseModel): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) account_name: Optional[str] cycle_type: Optional[str] membership_length: Optional[int] = Field(0, ge=0, lt=150) prorate: Optional[bool] = False calendar_year_start_buffer_days: Optional[int] = Field(0, ge=0, lt=150) calendar_year_start_buffer_on: Optional[datetime.datetime] = None calendar_year_start_on: Optional[datetime.datetime] = None calendar_year_end_on: Optional[datetime.datetime] = None calendar_year_end_buffer_days: Optional[int] = Field(0, ge=0, lt=150) calendar_year_end_buffer_on: Optional[datetime.datetime] = None enable_privacy_view: Optional[bool] = False renew_warning_hours: Optional[int] accept_message: Optional[str] reject_message: Optional[str] renew_message: Optional[str] default_no_reply_email: Optional[str] default_no_reply_name: Optional[str] confirm_email: Optional[str] confirm_name: Optional[str] # Including JSON data # extended_membership_member_profile: Optional[str] # list of dicts outlining extended (custom) membership profile fields for client # extended_membership_member_profile: Optional[Json] = '[]' # list of dicts outlining extended (custom) membership profile fields for client # extended_membership_member_profile: Optional[Json] # list of dicts outlining extended (custom) membership profile fields for client extended_membership_member_profile: Optional[str] # list of dicts outlining extended (custom) membership profile fields for client Membership_Cfg_Base.update_forward_refs()