163 lines
8.0 KiB
Python
163 lines
8.0 KiB
Python
|
#!/usr/bin/env python
|
|||
|
# -*- coding: utf-8 -*-
|
|||
|
|
|||
|
"""
|
|||
|
在线脚本管理API模型定义
|
|||
|
包含请求和响应的数据模型
|
|||
|
"""
|
|||
|
|
|||
|
from typing import Dict, List, Optional, Any, Union
|
|||
|
from pydantic import BaseModel, Field, RootModel
|
|||
|
from datetime import datetime
|
|||
|
|
|||
|
# 请求模型
|
|||
|
class ScriptListParams(BaseModel):
|
|||
|
"""脚本列表查询参数"""
|
|||
|
page: int = Field(1, description="页码,默认为1")
|
|||
|
pageSize: int = Field(20, description="每页记录数,默认为20")
|
|||
|
name: Optional[str] = Field(None, description="脚本名称,支持模糊查询")
|
|||
|
status: Optional[int] = Field(None, description="脚本状态(1:启用, 0:禁用)")
|
|||
|
folderPath: Optional[str] = Field(None, description="脚本所在目录路径")
|
|||
|
tags: Optional[str] = Field(None, description="标签,支持模糊查询")
|
|||
|
isPublic: Optional[int] = Field(None, description="是否公开(1:是, 0:否)")
|
|||
|
createdBy: Optional[str] = Field(None, description="创建者")
|
|||
|
startTime: Optional[str] = Field(None, description="创建时间范围的开始时间")
|
|||
|
endTime: Optional[str] = Field(None, description="创建时间范围的结束时间")
|
|||
|
sortField: str = Field("updated_on", description="排序字段")
|
|||
|
sortOrder: str = Field("desc", description="排序方式(asc/desc)")
|
|||
|
|
|||
|
class CreateScriptRequest(BaseModel):
|
|||
|
"""创建脚本请求"""
|
|||
|
folderPath: Optional[str] = Field("/", description="脚本所在目录路径,默认为根目录")
|
|||
|
fileName: str = Field(..., description="脚本文件名,必须以.py结尾")
|
|||
|
code: str = Field(..., description="脚本代码内容")
|
|||
|
name: Optional[str] = Field(None, description="脚本名称,默认使用文件名(不含扩展名)")
|
|||
|
description: Optional[str] = Field(None, description="脚本功能描述")
|
|||
|
status: Optional[int] = Field(1, description="状态(1:启用, 0:禁用)")
|
|||
|
isPublic: Optional[int] = Field(1, description="是否公开(1:是, 0:否)")
|
|||
|
tags: Optional[str] = Field(None, description="标签,用于分类查询")
|
|||
|
testParams: Optional[str] = Field(None, description="测试参数(JSON格式)")
|
|||
|
|
|||
|
class UpdateScriptRequest(BaseModel):
|
|||
|
"""更新脚本请求"""
|
|||
|
folderPath: Optional[str] = Field(None, description="脚本所在目录路径")
|
|||
|
fileName: Optional[str] = Field(None, description="脚本文件名,必须以.py结尾")
|
|||
|
code: Optional[str] = Field(None, description="脚本代码内容")
|
|||
|
name: Optional[str] = Field(None, description="脚本名称")
|
|||
|
description: Optional[str] = Field(None, description="脚本功能描述")
|
|||
|
status: Optional[int] = Field(None, description="状态(1:启用, 0:禁用)")
|
|||
|
isPublic: Optional[int] = Field(None, description="是否公开(1:是, 0:否)")
|
|||
|
tags: Optional[str] = Field(None, description="标签,用于分类查询")
|
|||
|
testParams: Optional[str] = Field(None, description="测试参数(JSON格式)")
|
|||
|
changeLog: Optional[str] = Field(None, description="版本变更说明")
|
|||
|
|
|||
|
class RunScriptRequest(BaseModel):
|
|||
|
"""运行脚本请求"""
|
|||
|
params: Optional[Dict[str, Any]] = Field(None, description="脚本执行参数,JSON对象")
|
|||
|
taskRecordId: Optional[str] = Field(None, description="关联的任务记录ID")
|
|||
|
blockRecordId: Optional[str] = Field(None, description="关联的任务块记录ID")
|
|||
|
|
|||
|
class StopScriptRequest(BaseModel):
|
|||
|
"""停止脚本执行请求"""
|
|||
|
logId: str = Field(..., description="脚本执行日志ID")
|
|||
|
|
|||
|
class RestoreScriptVersionRequest(BaseModel):
|
|||
|
"""恢复脚本版本请求"""
|
|||
|
changeLog: Optional[str] = Field(None, description="版本变更说明")
|
|||
|
|
|||
|
# 响应模型
|
|||
|
class ScriptInfo(BaseModel):
|
|||
|
"""脚本信息"""
|
|||
|
id: str = Field(..., description="脚本ID")
|
|||
|
name: str = Field(..., description="脚本名称")
|
|||
|
folderPath: str = Field(..., description="脚本所在目录路径")
|
|||
|
fileName: str = Field(..., description="脚本文件名")
|
|||
|
description: Optional[str] = Field(None, description="脚本功能描述")
|
|||
|
version: int = Field(..., description="当前版本号")
|
|||
|
status: int = Field(..., description="状态(1:启用, 0:禁用)")
|
|||
|
isPublic: bool = Field(..., description="是否公开")
|
|||
|
tags: Optional[str] = Field(None, description="标签")
|
|||
|
createdBy: Optional[str] = Field(None, description="创建者")
|
|||
|
createdOn: Optional[str] = Field(None, description="创建时间")
|
|||
|
updatedBy: Optional[str] = Field(None, description="最后更新者")
|
|||
|
updatedOn: Optional[str] = Field(None, description="最后更新时间")
|
|||
|
|
|||
|
class ScriptDetail(ScriptInfo):
|
|||
|
"""脚本详情,包含代码内容"""
|
|||
|
code: str = Field(..., description="脚本代码内容")
|
|||
|
testParams: Optional[str] = Field(None, description="测试参数(JSON格式)")
|
|||
|
|
|||
|
class ScriptVersionInfo(BaseModel):
|
|||
|
"""脚本版本信息"""
|
|||
|
id: str = Field(..., description="版本记录ID")
|
|||
|
scriptId: str = Field(..., description="关联的脚本ID")
|
|||
|
version: int = Field(..., description="版本号")
|
|||
|
changeLog: Optional[str] = Field(None, description="版本变更说明")
|
|||
|
createdBy: Optional[str] = Field(None, description="创建者")
|
|||
|
createdOn: Optional[str] = Field(None, description="创建时间")
|
|||
|
|
|||
|
class ScriptVersionDetail(ScriptVersionInfo):
|
|||
|
"""脚本版本详情,包含代码内容"""
|
|||
|
code: str = Field(..., description="该版本代码")
|
|||
|
|
|||
|
class ScriptLogInfo(BaseModel):
|
|||
|
"""脚本执行日志信息"""
|
|||
|
id: str = Field(..., description="日志ID")
|
|||
|
scriptId: str = Field(..., description="关联的脚本ID")
|
|||
|
version: int = Field(..., description="使用的脚本版本")
|
|||
|
taskRecordId: Optional[str] = Field(None, description="关联的任务记录ID")
|
|||
|
blockRecordId: Optional[str] = Field(None, description="关联的任务块记录ID")
|
|||
|
inputParams: Optional[str] = Field(None, description="输入参数(JSON格式)")
|
|||
|
outputResult: Optional[str] = Field(None, description="输出结果(JSON格式)")
|
|||
|
status: int = Field(..., description="执行状态(1:成功, 0:失败)")
|
|||
|
errorMessage: Optional[str] = Field(None, description="错误信息")
|
|||
|
executionTime: Optional[int] = Field(None, description="执行耗时(毫秒)")
|
|||
|
startedOn: Optional[str] = Field(None, description="开始时间")
|
|||
|
endedOn: Optional[str] = Field(None, description="结束时间")
|
|||
|
|
|||
|
class ScriptLogDetail(ScriptLogInfo):
|
|||
|
"""脚本执行日志详情"""
|
|||
|
scriptName: Optional[str] = Field(None, description="脚本名称")
|
|||
|
code: Optional[str] = Field(None, description="执行的脚本代码")
|
|||
|
|
|||
|
class FolderNode(BaseModel):
|
|||
|
"""脚本目录节点"""
|
|||
|
name: str = Field(..., description="目录名称")
|
|||
|
path: str = Field(..., description="目录路径")
|
|||
|
children: List["FolderNode"] = Field(default_factory=list, description="子目录")
|
|||
|
|
|||
|
class ScriptCreateResponse(BaseModel):
|
|||
|
"""创建脚本响应"""
|
|||
|
id: str = Field(..., description="脚本ID")
|
|||
|
|
|||
|
class ScriptUpdateResponse(BaseModel):
|
|||
|
"""更新脚本响应"""
|
|||
|
version: int = Field(..., description="脚本版本号")
|
|||
|
|
|||
|
class ScriptRunResponse(BaseModel):
|
|||
|
"""运行脚本响应"""
|
|||
|
logId: str = Field(..., description="脚本执行日志ID")
|
|||
|
result: Dict[str, Any] = Field(..., description="脚本执行结果")
|
|||
|
executionTime: int = Field(..., description="执行耗时(毫秒)")
|
|||
|
|
|||
|
class ScriptListResponse(BaseModel):
|
|||
|
"""脚本列表响应"""
|
|||
|
total: int = Field(..., description="总记录数")
|
|||
|
list: List[ScriptInfo] = Field(..., description="脚本列表")
|
|||
|
|
|||
|
class ScriptVersionListResponse(BaseModel):
|
|||
|
"""脚本版本列表响应"""
|
|||
|
total: int = Field(..., description="总记录数")
|
|||
|
list: List[ScriptVersionInfo] = Field(..., description="脚本版本列表")
|
|||
|
|
|||
|
class ScriptLogListResponse(BaseModel):
|
|||
|
"""脚本执行日志列表响应"""
|
|||
|
total: int = Field(..., description="总记录数")
|
|||
|
list: List[ScriptLogInfo] = Field(..., description="脚本执行日志列表")
|
|||
|
|
|||
|
class FolderTreeResponse(RootModel):
|
|||
|
"""脚本目录树响应"""
|
|||
|
root: List[FolderNode] = Field(..., description="目录树")
|
|||
|
|
|||
|
# 解决循环引用
|
|||
|
FolderNode.update_forward_refs()
|