import json from pydantic import BaseModel, field_validator from typing import Optional, Any, Dict from datetime import datetime class TaskBase(BaseModel): command: str args: Optional[Dict[str, Any]] = None result: Optional[Dict[str, Any]] = None status: Optional[int] = 0 @field_validator("args", "result", mode="before") def normalize_json_field(cls, v): if v is None: return None if isinstance(v, str): try: return json.loads(v) except Exception: return {} return v class TaskCreate(TaskBase): pass class TaskUpdate(BaseModel): result: Optional[Dict[str, Any]] = None status: int class TaskOut(TaskBase): id: int create_at: datetime update_at: datetime model_config = { "from_attributes": True }