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.account_cfg_models import Account_Cfg_Base # from app.models.address_models import Address_Base # from app.models.contact_models import Contact_Base # from app.models.event_models import Event_Base from app.models.fundraising_cfg_models import Fundraising_Cfg_Base from app.models.membership_cfg_models import Membership_Cfg_Base # from app.models.person_models import Person_Base # from app.models.user_models import User_Base # ### BEGIN ### API Account Models ### Account_Base() ### class Account_Base(BaseModel): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) id_random: Optional[str] = Field( **base_fields['account_id_random'], alias = 'account_id_random', # default_factory = lambda:secrets.token_urlsafe(default_num_bytes), ) id: Optional[int] = Field( alias = 'account_id' ) # account_id: Optional[int] = Field( # ) code: Optional[str] name: Optional[str] short_name: Optional[str] description: Optional[str] enable: Optional[bool] enable_from: Optional[datetime.datetime] = None enable_to: Optional[datetime.datetime] = None notes: Optional[str] created_on: Optional[datetime.datetime] = None updated_on: Optional[datetime.datetime] = None # testing: Optional[str] # Including other related objects account_cfg: Optional[Account_Cfg_Base] # Priority l1 address_list: Optional[list] # Address_Base() # Priority l3 archive_list: Optional[list] # Archive_Base() # Priority l1 contact_list: Optional[list] # Contact_Base() # Priority l3 event_list: Optional[list] # Event_Base() # Priority l1 fundraising_cfg: Optional[Fundraising_Cfg_Base] # Priority l2 hosted_file_list: Optional[list] # Hosted_File_Base() # Priority l2 journal_list: Optional[list] # Journal_Base() # Priority l3 membership_cfg: Optional[Membership_Cfg_Base] # Priority l2 membership_group_list: Optional[list] # Membership_Group_Base() # Priority l2 membership_person_list: Optional[list] # Membership_Person_Base() # Priority l2 membership_type_list: Optional[list] # Membership_Type_Base() # Priority l2 order_list: Optional[list] # Order_Base() # Priority l2 organization_list: Optional[list] # Organization_Base() # Priority l3 page_list: Optional[list] # Page_Base() # Priority l3 person_list: Optional[list] # Person_Base() # Priority l2 post_list: Optional[list] # Post_Base() # Priority l1 product_list: Optional[list] # Product_Base() # Priority l3 site_list: Optional[list] # Site_Base() # Priority l3 user_list: Optional[list] # User_Base() # Priority l2 _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) @validator('id', always=True) def account_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='account') return None # @validator('account_id', always=True) # def account_id_duplicate(cls, v, values, **kwargs): # log.setLevel(logging.DEBUG) # log.debug(locals()) # if values['id']: # log.debug(values['id']) # return values['id'] # return None class Config: underscore_attrs_are_private = True fields = base_fields # ### END ### API Account Models ### Account_Base() ###