common.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from typing import Annotated, Generic, List, Optional, TypeVar
  2. from datetime import datetime
  3. from pydantic import BaseModel, ConfigDict, PlainSerializer
  4. from pydantic.alias_generators import to_camel
  5. T = TypeVar("T")
  6. def _dt_to_str(v: Optional[datetime]) -> Optional[str]:
  7. if v is None:
  8. return None
  9. return v.strftime("%Y-%m-%d %H:%M:%S")
  10. DatetimeToStr = Annotated[datetime, PlainSerializer(_dt_to_str, return_type=str)]
  11. OptDatetimeToStr = Annotated[Optional[datetime], PlainSerializer(_dt_to_str, return_type=Optional[str])]
  12. class PagedQuery(BaseModel):
  13. model_config = ConfigDict(populate_by_name=True, alias_generator=to_camel)
  14. page: int = 1
  15. page_size: int = 10
  16. class ApiResponse(BaseModel, Generic[T]):
  17. code: int = 0
  18. msg: str = "success"
  19. data: Optional[T] = None
  20. class PagedData(BaseModel, Generic[T]):
  21. model_config = ConfigDict(populate_by_name=True, alias_generator=to_camel)
  22. rows: List[T]
  23. total: int
  24. page: int
  25. page_size: int
  26. class PagedResponse(BaseModel, Generic[T]):
  27. code: int = 0
  28. msg: str = "success"
  29. data: Optional[PagedData[T]] = None
  30. class TokenResponse(BaseModel):
  31. model_config = ConfigDict(populate_by_name=True, alias_generator=to_camel)
  32. access_token: str
  33. token_type: str = "bearer"