from dataclasses import dataclass, field import uuid import time @dataclass class BaseModel: id: str = field(init=False) created_at: float = field(init=False) updated_at: float = field(init=False) def __post_init__(self): self.id = str(uuid.uuid4()) now = time.time() self.created_at = now self.updated_at = now def touch(self): self.updated_at = time.time() def to_dict(self): return { 'id': self.id, 'created_at': self.created_at, 'updated_at': self.updated_at } @classmethod def _apply_base_fields(cls, obj, d: dict): obj.id = d.get('id', obj.id) obj.created_at = d.get('created_at', obj.created_at) obj.updated_at = d.get('updated_at', obj.updated_at) return obj