#!/usr/bin/env python # -*- coding: utf-8 -*- """ API模型模块 包含API请求和响应的数据模型 """ from typing import Dict, Any, List, Optional, Literal from pydantic import BaseModel, Field, validator from config.component_config import ComponentDiscovery from config.task_config import TASK_TYPE_CONFIG, TaskType, TaskStatus from enum import Enum # 获取所有任务类型的key值 TASK_TYPE_KEYS = list(TASK_TYPE_CONFIG.keys()) # 排序字段枚举 class SortField(str, Enum): CREATED_AT = "created_at" UPDATED_AT = "updated_at" NAME = "name" # 排序方式枚举 class SortOrder(str, Enum): ASC = "asc" DESC = "desc" # 通用响应模型 class ApiResponse(BaseModel): code: int = Field(..., description="状态码") message: str = Field(..., description="消息") data: Optional[dict] = Field(None, description="数据") # 任务相关模型 class TaskInput(BaseModel): name: str = Field(..., description="任务名称") task_type: TaskType = Field( ..., description="任务类型,可选值为:" + ", ".join([t.value for t in TaskType]), example=TaskType.NORMAL ) class TaskBatchInput(BaseModel): tasks: List[TaskInput] class TaskIdList(BaseModel): task_ids: List[str] class TaskTypeInfo(BaseModel): key: str name: str description: str # 工作流相关模型 class WorkflowInput(BaseModel): name: str workflow_type: Optional[str] = "normal" description: Optional[str] = "" blocks: Optional[List[Dict[str, Any]]] = [] variables: Optional[Dict[str, Any]] = {} schedule: Optional[Dict[str, Any]] = None class WorkflowUpdateInput(BaseModel): name: Optional[str] = None description: Optional[str] = None blocks: Optional[List[Dict[str, Any]]] = None variables: Optional[Dict[str, Any]] = None schedule: Optional[Dict[str, Any]] = None class WorkflowExecuteInput(BaseModel): task_inputs: Optional[Dict[str, Any]] = None class WorkflowImportInput(BaseModel): workflow_json: str # 组件相关模型 class ComponentDiscoverInput(BaseModel): package_name: Optional[str] = ComponentDiscovery.DEFAULT_PACKAGE # 任务编辑相关模型 class TaskUpdateInput(BaseModel): name: Optional[str] = None description: Optional[str] = None task_type: Optional[TaskType] = None blocks: Optional[List[Dict[str, Any]]] = None variables: Optional[Dict[str, Any]] = None schedule: Optional[Dict[str, Any]] = None class TaskEditInput(BaseModel): task_id: str blocks: List[Dict[str, Any]] variables: Optional[Dict[str, Any]] = {}