brewman/brewman/brewman/schemas/client.py

57 lines
1.6 KiB
Python

import uuid
from datetime import datetime
from pydantic import (
BaseModel,
ConfigDict,
FieldSerializationInfo,
field_serializer,
field_validator,
)
from . import to_camel
class ClientIn(BaseModel):
name: str
enabled: bool
otp: int | None = None
class Client(ClientIn):
id_: uuid.UUID
code: int
creation_date: datetime
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
@field_validator("creation_date", mode="before")
@classmethod
def parse_creation_date(cls, value: datetime | str) -> datetime | None:
if isinstance(value, datetime):
return value
return datetime.strptime(value, "%d-%b-%Y %H:%M")
@field_serializer("creation_date")
def serialize_creation_date(self, value: datetime, info: FieldSerializationInfo) -> str:
return value.strftime("%d-%b-%Y %H:%M")
class ClientList(Client):
last_user: str
last_date: datetime | None = None
model_config = ConfigDict(str_strip_whitespace=True, alias_generator=to_camel, populate_by_name=True)
@field_validator("last_date", mode="before")
@classmethod
def parse_last_date(cls, value: datetime | str | None) -> datetime | None:
if value is None or value == "":
return None
if isinstance(value, datetime):
return value
return datetime.strptime(value, "%d-%b-%Y %H:%M")
@field_serializer("last_date")
def serialize_last_date(self, value: datetime | None, info: FieldSerializationInfo) -> str | None:
return None if value is None else value.strftime("%d-%b-%Y %H:%M")