vas_task.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. # app/schemas/task.py
  2. import json
  3. from pydantic import BaseModel, field_validator
  4. from typing import Optional, Dict, Any, Literal, List
  5. from datetime import datetime
  6. class VasTaskBase(BaseModel):
  7. status: Optional[Literal['pending','grabbed','running','cancelled','completed']] = None
  8. priority: Optional[int] = 10
  9. config: Optional[Dict[str, Any]] = None
  10. user_inputs: Optional[Dict[str, Any]] = None
  11. grabbed_history: Optional[Dict[str, Any]] = None
  12. meta: Optional[Dict[str, Any]] = None
  13. @field_validator("config", "user_inputs", "grabbed_history", "meta", mode="before")
  14. def normalize_json_field(cls, v):
  15. if v is None:
  16. return None
  17. if isinstance(v, str):
  18. try:
  19. return json.loads(v)
  20. except Exception:
  21. return {}
  22. return v
  23. class VasTaskCreate(VasTaskBase):
  24. order_id: str
  25. routing_key: str
  26. script_version: Optional[str] = None
  27. expire_at: datetime
  28. class VasTaskUpdate(VasTaskBase):
  29. pass
  30. class VasTaskOut(VasTaskBase):
  31. id: int
  32. order_id: str
  33. routing_key: str
  34. script_version: Optional[str] = None
  35. attempt_count: int
  36. notify_count: int
  37. created_at: datetime
  38. updated_at: datetime
  39. expire_at: datetime
  40. model_config = {
  41. "from_attributes": True
  42. }