task.py 879 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import json
  2. from pydantic import BaseModel, field_validator
  3. from typing import Optional, Any, Dict
  4. from datetime import datetime
  5. class TaskBase(BaseModel):
  6. command: str
  7. args: Optional[Dict[str, Any]] = None
  8. result: Optional[Dict[str, Any]] = None
  9. status: Optional[int] = 0
  10. @field_validator("args", "result", mode="before")
  11. def normalize_json_field(cls, v):
  12. if v is None:
  13. return None
  14. if isinstance(v, str):
  15. try:
  16. return json.loads(v)
  17. except Exception:
  18. return {}
  19. return v
  20. class TaskCreate(TaskBase):
  21. pass
  22. class TaskUpdate(BaseModel):
  23. result: Optional[Dict[str, Any]] = None
  24. status: int
  25. class TaskOut(TaskBase):
  26. id: int
  27. create_at: datetime
  28. update_at: datetime
  29. model_config = {
  30. "from_attributes": True
  31. }