from datetime import date, datetime from decimal import Decimal from typing import Optional from brewman.schemas import to_camel from pydantic import BaseModel, validator class LockInformation(BaseModel): lock_older: bool lock_newer: bool older_rolling: Optional[bool] older_days: Optional[int] older_date: Optional[date] newer_rolling: Optional[bool] newer_days: Optional[int] newer_date: Optional[date] class Config: alias_generator = to_camel json_encoders = { date: lambda v: v.strftime("%d-%b-%Y"), } @validator("older_date", pre=True) def parse_older_date(cls, value): if isinstance(value, date): return value return datetime.strptime(value, "%d-%b-%Y").date() @validator("newer_date", pre=True) def parse_newer_date(cls, value): if isinstance(value, date): return value return datetime.strptime(value, "%d-%b-%Y").date() class Maintenance(BaseModel): enabled: bool user: Optional[str] class ResetStock(BaseModel): quantity: Decimal stock_date: date reset_date: date class Config: alias_generator = to_camel json_encoders = { date: lambda v: v.strftime("%d-%b-%Y"), } @validator("stock_date", pre=True) def parse_stock_date(cls, value): if isinstance(value, date): return value return datetime.strptime(value, "%d-%b-%Y").date() @validator("reset_date", pre=True) def parse_reset_date(cls, value): if isinstance(value, date): return value return datetime.strptime(value, "%d-%b-%Y").date()