/
alexefan136
/
flowstack
Обзор
Документация
Войти
/
alexefan136
/
flowstack
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
core/engine/src/schemas/task.py
109 строк
4 KB
Alexander Efanov
upd fix
31 июл 2026, 19:17
31 июл 2026, 19:17
d146d86
Код
Авторство
О чём код?
"""Pydantic schemas для задач.""" from __future__ import annotations from datetime import datetime from typing import Literal from uuid import UUID from pydantic import BaseModel, ConfigDict, Field # ============================================================================ # Types # ============================================================================ TaskPriority = Literal["low", "medium", "high", "urgent"] UserTaskStatus = Literal["todo", "in_progress", "done", "cancelled"] TaskRunStatus = Literal["running", "completed", "failed"] # ============================================================================ # Task # ============================================================================ class TaskCreate(BaseModel): """Запрос на создание задачи.""" title: str = Field(..., min_length=1, max_length=500) description: str | None = Field(default=None, max_length=5000) priority: TaskPriority = Field(default="medium") deadline: datetime | None = None assigned_agent_id: UUID | None = None # сервис конвертирует в str skill_id: UUID | None = None workflow_id: str | None = Field(default=None, max_length=100) chat_id: UUID | None = None recurrence_pattern: str | None = Field(default=None, max_length=100) # cron tags: list[str] = Field(default_factory=list) estimated_duration_minutes: int | None = Field(default=None, ge=0) class TaskUpdate(BaseModel): """Запрос на обновление задачи (все поля опциональны).""" title: str | None = Field(default=None, min_length=1, max_length=500) description: str | None = Field(default=None, max_length=5000) status: UserTaskStatus | None = None priority: TaskPriority | None = None deadline: datetime | None = None assigned_agent_id: UUID | None = None skill_id: UUID | None = None workflow_id: str | None = Field(default=None, max_length=100) chat_id: UUID | None = None recurrence_pattern: str | None = Field(default=None, max_length=100) tags: list[str] | None = None estimated_duration_minutes: int | None = Field(default=None, ge=0) actual_duration_minutes: int | None = Field(default=None, ge=0) class TaskResponse(BaseModel): """Ответ с информацией о задаче.""" model_config = ConfigDict(from_attributes=True) id: UUID workspace_id: str user_id: UUID title: str description: str | None status: UserTaskStatus priority: TaskPriority deadline: datetime | None assigned_agent_id: str | None # в модели String(100) skill_id: UUID | None workflow_id: str | None chat_id: UUID | None recurrence_pattern: str | None tags: list[str] estimated_duration_minutes: int | None actual_duration_minutes: int | None runs: list[dict] = Field(default_factory=list) created_at: datetime updated_at: datetime completed_at: datetime | None # ============================================================================ # Task Run (запись в JSONB Task.runs) # ============================================================================ class TaskRunResponse(BaseModel): """ Запись о выполнении задачи (элемент JSONB ``Task.runs``). Не имеет отдельной таблицы — хранится как dict в ``Task.runs``. """ status: TaskRunStatus output: str = "" tokens_used: int | None = None error_message: str | None = None created_at: str | None = None # ISO-строка (из JSONB) class TaskWithRuns(BaseModel): """Задача с типизированной историей выполнений.""" task: TaskResponse runs: list[TaskRunResponse]