utp_service/backend/app/schemas/task.py

78 lines
1.8 KiB
Python

from datetime import datetime
from typing import Any, Optional
from pydantic import BaseModel
class TaskCreate(BaseModel):
type: str
target_scope: dict # {"type": "device", "id": 42} | {"type": "object", "id": 5} | etc.
params: dict[str, Any] = {}
class TaskEventRead(BaseModel):
id: int
message: str
level: str
created_at: datetime
model_config = {"from_attributes": True}
class TaskResultRead(BaseModel):
id: int
device_id: int
device_ip: Optional[str] = None
device_hostname: Optional[str] = None
object_id: Optional[int] = None
object_name: Optional[str] = None
rack_id: Optional[int] = None
rack_name: Optional[str] = None
status: str
stdout: Optional[str] = None
stderr: Optional[str] = None
exit_code: Optional[int] = None
data: Optional[dict] = None
duration_ms: Optional[int] = None
executed_at: Optional[datetime] = None
model_config = {"from_attributes": True}
class TaskRead(BaseModel):
id: str
type: str
status: str
cancel_requested: bool = False
target_scope: dict
target_label: Optional[str] = None
params: dict
result: Optional[dict] = None
error_message: Optional[str] = None
created_by: Optional[int] = None
created_at: datetime
started_at: Optional[datetime] = None
finished_at: Optional[datetime] = None
model_config = {"from_attributes": True}
class TaskDetail(TaskRead):
events: list[TaskEventRead] = []
device_results: list[TaskResultRead] = []
class ActionInfo(BaseModel):
name: str
display_name: str
compatible_categories: list[str]
params_schema: list[dict]
class TaskPreviewResponse(BaseModel):
total: int
compatible: int
skipped: int
by_category: dict[str, int]
compatible_by_category: dict[str, int]
skipped_categories: list[str]