import uuid from datetime import date, datetime from pydantic import BaseModel, Field, validator from . import to_camel class GuestBookIn(BaseModel): name: str phone: str address: str | None pax: int = Field(ge=0) date_: datetime @validator("date_", pre=True) def parse_date(cls, value): if isinstance(value, datetime): return value return datetime.strptime(value, "%d-%b-%Y %H:%M") class Config: fields = {"id_": "id"} anystr_strip_whitespace = True alias_generator = to_camel json_encoders = {datetime: lambda v: v.strftime("%d-%b-%Y %H:%M")} class GuestBook(GuestBookIn): id_: uuid.UUID @validator("date_", pre=True) def parse_date(cls, value): if isinstance(value, datetime): return value return datetime.strptime(value, "%d-%b-%Y %H:%M") class Config: fields = {"id_": "id"} anystr_strip_whitespace = True alias_generator = to_camel json_encoders = {datetime: lambda v: v.strftime("%d-%b-%Y %H:%M")} class GuestBookListItem(BaseModel): id_: uuid.UUID serial: int name: str phone: str pax: int date_: datetime status: str | None table_id: uuid.UUID | None voucher_id: uuid.UUID | None table_name: str | None @validator("date_", pre=True) def parse_date(cls, value): if isinstance(value, datetime): return value return datetime.strptime(value, "%d-%b-%Y %H:%M") class Config: fields = {"id_": "id"} anystr_strip_whitespace = True alias_generator = to_camel json_encoders = {datetime: lambda v: v.strftime("%d-%b-%Y %H:%M"), date: lambda v: v.strftime("%d-%b-%Y")} class GuestBookList(BaseModel): date_: date list: list[GuestBookListItem] @validator("date_", pre=True) def parse_date(cls, value): if isinstance(value, date): return value return datetime.strptime(value, "%d-%b-%Y").date() class Config: fields = {"id_": "id"} anystr_strip_whitespace = True alias_generator = to_camel json_encoders = {datetime: lambda v: v.strftime("%d-%b-%Y %H:%M"), date: lambda v: v.strftime("%d-%b-%Y")}