tianfeng_task_modules/config/task_config.py

531 lines
15 KiB
Python
Raw Normal View History

2025-03-17 14:58:05 +08:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
任务配置模块
2025-03-17 18:31:20 +08:00
包含任务类型状态输入参数等配置信息
2025-03-17 14:58:05 +08:00
"""
from enum import Enum
2025-03-17 18:31:20 +08:00
from typing import Dict, Any, List, Optional
#################################################
# 任务类型相关配置
#################################################
2025-03-17 14:58:05 +08:00
class TaskType(str, Enum):
2025-03-17 18:31:20 +08:00
"""任务类型枚举"""
2025-03-17 14:58:05 +08:00
NORMAL = "NORMAL"
SCHEDULED = "SCHEDULED"
class TaskTypeConfig:
"""任务类型配置"""
NORMAL = TaskType.NORMAL.value
SCHEDULED = TaskType.SCHEDULED.value
# 任务类型详细信息
DETAILS = {
NORMAL: {
"name": "普通任务",
"description": "立即执行的一次性任务"
},
SCHEDULED: {
"name": "定时任务",
"description": "按照预设时间执行的任务"
}
}
@classmethod
def get_name(cls, task_type_key):
"""
获取任务类型的显示名称
Args:
task_type_key (str): 任务类型的键名
Returns:
str: 任务类型的显示名称
"""
return cls.DETAILS.get(task_type_key, {}).get("name", task_type_key)
@classmethod
def get_description(cls, task_type_key):
"""
获取任务类型的描述
Args:
task_type_key (str): 任务类型的键名
Returns:
str: 任务类型的描述
"""
return cls.DETAILS.get(task_type_key, {}).get("description", "")
@classmethod
def get_all(cls):
"""
获取所有任务类型
Returns:
list: 任务类型列表每个元素包含keyname和description
"""
task_types = []
for key, config in cls.DETAILS.items():
task_types.append({
"key": key,
"name": config["name"],
"description": config["description"]
})
return task_types
2025-03-17 18:31:20 +08:00
#################################################
# 任务状态相关配置
#################################################
class TaskStatus(str, Enum):
"""任务状态枚举"""
PENDING = "PENDING"
RUNNING = "RUNNING"
COMPLETED = "COMPLETED"
CANCELLED = "CANCELLED"
FAILED = "FAILED"
PAUSED = "PAUSED"
WAITING = "WAITING"
2025-03-17 14:58:05 +08:00
class TaskStatusConfig:
"""任务状态配置"""
PENDING = TaskStatus.PENDING.value
RUNNING = TaskStatus.RUNNING.value
COMPLETED = TaskStatus.COMPLETED.value
CANCELLED = TaskStatus.CANCELLED.value
FAILED = TaskStatus.FAILED.value
PAUSED = TaskStatus.PAUSED.value
WAITING = TaskStatus.WAITING.value
# 任务状态详细信息
DETAILS = {
PENDING: {
"name": "待执行",
"description": "任务已创建但尚未开始执行"
},
RUNNING: {
"name": "执行中",
"description": "任务正在执行"
},
COMPLETED: {
"name": "已完成",
"description": "任务已成功完成"
},
CANCELLED: {
"name": "已取消",
"description": "任务被用户取消"
},
FAILED: {
"name": "执行失败",
"description": "任务执行过程中出现错误"
},
PAUSED: {
"name": "暂停中",
"description": "任务被暂停"
},
WAITING: {
"name": "等待中",
"description": "任务正在等待某些条件满足"
}
}
@classmethod
def get_name(cls, task_status_key):
"""
获取任务状态的显示名称
Args:
task_status_key (str): 任务状态的键名
Returns:
str: 任务状态的显示名称
"""
return cls.DETAILS.get(task_status_key, {}).get("name", task_status_key)
@classmethod
def get_description(cls, task_status_key):
"""
获取任务状态的描述
Args:
task_status_key (str): 任务状态的键名
Returns:
str: 任务状态的描述
"""
return cls.DETAILS.get(task_status_key, {}).get("description", "")
@classmethod
def get_all(cls):
"""
获取所有任务状态
Returns:
list: 任务状态列表每个元素包含keyname和description
"""
task_statuses = []
for key, config in cls.DETAILS.items():
task_statuses.append({
"key": key,
"name": config["name"],
"description": config["description"]
})
return task_statuses
2025-03-17 18:31:20 +08:00
#################################################
# 任务输入参数相关配置
#################################################
class TaskInputParamType(str, Enum):
"""任务输入参数类型枚举"""
STRING = "string"
INTEGER = "integer"
FLOAT = "float"
BOOLEAN = "boolean"
DATETIME = "datetime"
JSON = "json"
ARRAY = "array"
OBJECT = "object"
2025-03-18 18:34:03 +08:00
# 任务输入参数类型UI显示名称
PARAM_TYPE_DISPLAY_NAMES = {
TaskInputParamType.STRING.value: "字符串",
TaskInputParamType.INTEGER.value: "整数",
TaskInputParamType.FLOAT.value: "浮点数",
TaskInputParamType.BOOLEAN.value: "布尔",
TaskInputParamType.DATETIME.value: "日期时间",
TaskInputParamType.JSON.value: "JSON对象",
TaskInputParamType.ARRAY.value: "JSON数组",
TaskInputParamType.OBJECT.value: "对象"
}
2025-03-17 18:31:20 +08:00
class SystemParamKey(str, Enum):
"""系统参数键名枚举"""
TASK_ID = "task_id"
INSTANCE_ID = "instance_id"
TASK_NAME = "task_name"
CREATED_AT = "created_at"
VARIABLES = "variables"
PRIORITY = "priority"
class TaskInputParamConfig:
"""任务输入参数配置类"""
# 系统默认参数配置
SYSTEM_PARAMS = [
{
"key": SystemParamKey.TASK_ID,
"name": "任务ID",
"type": TaskInputParamType.STRING,
"is_system": True,
"is_readonly": True,
"description": "任务的唯一标识符"
},
{
"key": SystemParamKey.INSTANCE_ID,
"name": "任务实例ID",
"type": TaskInputParamType.STRING,
"is_system": True,
"is_readonly": True,
"description": "任务实例的唯一标识符"
},
{
"key": SystemParamKey.TASK_NAME,
"name": "任务名称",
"type": TaskInputParamType.STRING,
"is_system": True,
"is_readonly": True,
"description": "任务的名称"
},
{
"key": SystemParamKey.CREATED_AT,
"name": "创建时间",
"type": TaskInputParamType.DATETIME,
"is_system": True,
"is_readonly": True,
"description": "任务实例的创建时间"
},
{
"key": SystemParamKey.VARIABLES,
"name": "任务变量",
"type": TaskInputParamType.JSON,
"is_system": True,
"is_readonly": False,
"description": "任务的变量集合"
},
{
"key": SystemParamKey.PRIORITY,
"name": "任务优先级",
"type": TaskInputParamType.INTEGER,
"is_system": True,
"is_readonly": False,
"description": "任务的优先级,数值越大优先级越高"
}
]
@classmethod
def get_system_params(cls) -> List[Dict[str, Any]]:
"""获取系统默认参数配置"""
return cls.SYSTEM_PARAMS
@classmethod
def get_system_param_by_key(cls, key: str) -> Optional[Dict[str, Any]]:
"""根据键名获取系统参数配置"""
for param in cls.SYSTEM_PARAMS:
if param["key"] == key:
return param
return None
2025-03-18 18:34:03 +08:00
@classmethod
def build_system_params(cls, task_id: str) -> List[Dict[str, Any]]:
"""
构建系统参数列表不带值
Args:
task_id: 任务ID
Returns:
系统参数列表不带值
"""
params = []
# 复制系统参数配置但不添加具体值
for param_config in cls.SYSTEM_PARAMS:
param = param_config.copy()
# 只为任务ID设置值其他参数保持不变
if param["key"] == SystemParamKey.TASK_ID:
param["value"] = task_id
params.append(param)
return params
2025-03-17 18:31:20 +08:00
@classmethod
def build_system_params_with_values(cls, task_id: str, instance: Dict[str, Any]) -> List[Dict[str, Any]]:
"""
构建带有值的系统参数列表
Args:
task_id: 任务ID
instance: 任务实例数据
Returns:
带有值的系统参数列表
"""
params = []
# 复制系统参数配置并添加值
for param_config in cls.SYSTEM_PARAMS:
param = param_config.copy()
# 根据参数键名设置值
if param["key"] == SystemParamKey.TASK_ID:
param["value"] = task_id
elif param["key"] == SystemParamKey.INSTANCE_ID:
param["value"] = instance.get("instance_id")
elif param["key"] == SystemParamKey.TASK_NAME:
param["value"] = instance.get("name")
elif param["key"] == SystemParamKey.CREATED_AT:
param["value"] = instance.get("created_at")
elif param["key"] == SystemParamKey.VARIABLES:
param["value"] = instance.get("variables")
elif param["key"] == SystemParamKey.PRIORITY:
param["value"] = instance.get("priority", 1)
params.append(param)
return params
2025-03-18 18:34:03 +08:00
@classmethod
def get_input_params_form_fields(cls) -> List[Dict[str, Any]]:
"""
获取任务输入参数表单字段定义
Returns:
表单字段定义列表
"""
# 构建参数类型选项
param_type_options = []
for param_type in TaskInputParamType:
param_type_options.append({
"value": param_type.value,
"label": PARAM_TYPE_DISPLAY_NAMES.get(param_type.value, param_type.value)
})
# 返回表单字段定义
return [
{
"field_name": "param_name",
"label": "变量名",
"field_type": "input",
"required": True,
"description": "参数的唯一标识符,用于在任务执行过程中引用该参数"
},
{
"field_name": "label",
"label": "标签",
"field_type": "input",
"required": True,
"description": "参数的显示名称,用于在界面上展示"
},
{
"field_name": "param_type",
"label": "类型",
"field_type": "select",
"required": True,
"default": TaskInputParamType.STRING.value,
"options": param_type_options,
"description": "参数的数据类型"
},
{
"field_name": "required",
"label": "是否必填",
"field_type": "checkbox",
"required": False,
"default": False,
"description": "标记参数是否为必填项"
},
{
"field_name": "default_value",
"label": "默认值",
"field_type": "input",
"required": False,
"description": "参数的默认值,当用户未提供值时使用"
},
{
"field_name": "description",
"label": "说明",
"field_type": "textarea",
"required": False,
"description": "参数的详细说明,用于帮助用户理解参数的用途"
}
]
2025-03-17 14:58:05 +08:00
2025-03-17 18:31:20 +08:00
#################################################
2025-03-17 14:58:05 +08:00
# 默认值配置
2025-03-17 18:31:20 +08:00
#################################################
2025-03-17 14:58:05 +08:00
class DefaultConfig:
"""默认值配置"""
TASK_DESCRIPTION = "" # 默认任务描述(备注)
TEMPLATE_DESCRIPTION = "用户自有模板" # 默认模板描述
2025-03-17 18:31:20 +08:00
#################################################
# 向后兼容的常量和函数
#################################################
2025-03-17 14:58:05 +08:00
2025-03-17 18:31:20 +08:00
# 任务类型和状态配置常量
2025-03-17 14:58:05 +08:00
TASK_TYPE_CONFIG = TaskTypeConfig.DETAILS
TASK_STATUS_CONFIG = TaskStatusConfig.DETAILS
# 任务类型常量
TASK_TYPE_NORMAL = TaskTypeConfig.NORMAL
TASK_TYPE_SCHEDULED = TaskTypeConfig.SCHEDULED
# 默认值配置
DEFAULT_TASK_DESCRIPTION = DefaultConfig.TASK_DESCRIPTION
DEFAULT_TEMPLATE_DESCRIPTION = DefaultConfig.TEMPLATE_DESCRIPTION
# 获取任务类型名称
def get_task_type_name(task_type_key):
"""
获取任务类型的显示名称
Args:
task_type_key (str): 任务类型的键名
Returns:
str: 任务类型的显示名称
"""
return TaskTypeConfig.get_name(task_type_key)
# 获取任务类型描述
def get_task_type_description(task_type_key):
"""
获取任务类型的描述
Args:
task_type_key (str): 任务类型的键名
Returns:
str: 任务类型的描述
"""
return TaskTypeConfig.get_description(task_type_key)
# 获取任务状态名称
def get_task_status_name(task_status_key):
"""
获取任务状态的显示名称
Args:
task_status_key (str): 任务状态的键名
Returns:
str: 任务状态的显示名称
"""
return TaskStatusConfig.get_name(task_status_key)
# 获取任务状态描述
def get_task_status_description(task_status_key):
"""
获取任务状态的描述
Args:
task_status_key (str): 任务状态的键名
Returns:
str: 任务状态的描述
"""
return TaskStatusConfig.get_description(task_status_key)
# 获取所有任务类型
def get_all_task_types():
"""
获取所有任务类型
Returns:
list: 任务类型列表每个元素包含keyname和description
"""
return TaskTypeConfig.get_all()
# 获取所有任务状态
def get_all_task_statuses():
"""
获取所有任务状态
Returns:
list: 任务状态列表每个元素包含keyname和description
"""
return TaskStatusConfig.get_all()
# 获取任务类型枚举
def get_task_type_enum(task_type_key):
"""
获取任务类型的枚举值
Args:
task_type_key (str): 任务类型的键名
Returns:
str: 任务类型的枚举值小写
"""
return task_type_key.lower()
# 获取任务状态枚举
def get_task_status_enum(task_status_key):
"""
获取任务状态的枚举值
Args:
task_status_key (str): 任务状态的键名
Returns:
str: 任务状态的枚举值小写
"""
return task_status_key.lower()