#!/usr/bin/env python # -*- coding: utf-8 -*- """ 任务配置模块 包含任务类型、状态、输入参数等配置信息 """ from enum import Enum from typing import Dict, Any, List, Optional ################################################# # 任务类型相关配置 ################################################# class TaskType(str, Enum): """任务类型枚举""" 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: 任务类型列表,每个元素包含key、name和description """ task_types = [] for key, config in cls.DETAILS.items(): task_types.append({ "key": key, "name": config["name"], "description": config["description"] }) return task_types ################################################# # 任务状态相关配置 ################################################# class TaskStatus(str, Enum): """任务状态枚举""" PENDING = "PENDING" RUNNING = "RUNNING" COMPLETED = "COMPLETED" CANCELLED = "CANCELLED" FAILED = "FAILED" PAUSED = "PAUSED" WAITING = "WAITING" 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: 任务状态列表,每个元素包含key、name和description """ task_statuses = [] for key, config in cls.DETAILS.items(): task_statuses.append({ "key": key, "name": config["name"], "description": config["description"] }) return task_statuses ################################################# # 任务输入参数相关配置 ################################################# class TaskInputParamType(str, Enum): """任务输入参数类型枚举""" STRING = "string" INTEGER = "integer" FLOAT = "float" BOOLEAN = "boolean" DATETIME = "datetime" JSON = "json" ARRAY = "array" OBJECT = "object" 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 @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 ################################################# # 默认值配置 ################################################# class DefaultConfig: """默认值配置""" TASK_DESCRIPTION = "" # 默认任务描述(备注) TEMPLATE_DESCRIPTION = "用户自有模板" # 默认模板描述 ################################################# # 向后兼容的常量和函数 ################################################# # 任务类型和状态配置常量 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: 任务类型列表,每个元素包含key、name和description """ return TaskTypeConfig.get_all() # 获取所有任务状态 def get_all_task_statuses(): """ 获取所有任务状态 Returns: list: 任务状态列表,每个元素包含key、name和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()