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 ..db_sql import redis_lookup_id_random from ..lib_general import * from .common_field_schema import base_fields, default_num_bytes class Core_Object_Base(BaseModel): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) obj_type: str obj_id_random: str # alias this one based on obj_type? obj_id_rand: str # alias this one based on obj_type? obj_id: int # alias this one? obj_name: Optional[str] id_random: str # alias this one? id: int # alias this one? account_id_random: Optional[str] account_id: 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) class Example_Object_Base(Core_Object_Base): # Based on Core_Object_Base title: Optional[str] = None description: Optional[str] = None password_set_on: Optional[datetime.datetime] = None archive_on: Optional[datetime.datetime] = None logged_in_on: Optional[datetime.datetime] = None last_activity_on: Optional[datetime.datetime] = None other_random_fields: dict list_of_: Optional[dict] = {} # Create, Read/Get, Update, Delete # CRUD or CGUD # def create_object(object_data): # return False # True, False, or None or object_data # def get_object(object_id): # return object_data # False or None # def update_object(object_id, object_data): # return False # True, False, or None or object_data # def delete_object(object_id): # return False # True, False, or None or object_data