61 lines
1.3 KiB
Python
61 lines
1.3 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
|
|
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
|
|
target_scope: dict
|
|
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]
|