2025-03-17 14:58:05 +08:00

52 lines
2.2 KiB
Python

# utils/validator.py
from typing import Dict, Any, List, Optional, Callable
from core.exceptions import ValidationError
def validate_required_fields(data: Dict[str, Any], required_fields: List[str]) -> None:
"""验证必要字段"""
missing_fields = [field for field in required_fields if field not in data]
if missing_fields:
raise ValidationError(f"缺少必要字段: {', '.join(missing_fields)}")
def validate_field_type(data: Dict[str, Any], field: str, expected_type: type) -> None:
"""验证字段类型"""
if field in data and not isinstance(data[field], expected_type):
raise ValidationError(f"字段 {field} 类型错误,期望类型: {expected_type.__name__}")
def validate_field_value(data: Dict[str, Any], field: str, validator: Callable[[Any], bool], error_message: str) -> None:
"""验证字段值"""
if field in data and not validator(data[field]):
raise ValidationError(f"字段 {field} 值无效: {error_message}")
def validate_workflow_definition(workflow_data: Dict[str, Any]) -> None:
"""验证工作流定义"""
# 验证必要字段
validate_required_fields(workflow_data, ["name"])
# 验证字段类型
validate_field_type(workflow_data, "name", str)
validate_field_type(workflow_data, "workflow_type", str)
validate_field_type(workflow_data, "blocks", list)
validate_field_type(workflow_data, "variables", dict)
# 验证工作流类型
if "workflow_type" in workflow_data:
valid_types = ["normal", "scheduled"]
if workflow_data["workflow_type"] not in valid_types:
raise ValidationError(f"无效的工作流类型: {workflow_data['workflow_type']}, 有效类型: {', '.join(valid_types)}")
# 验证块定义
if "blocks" in workflow_data:
for i, block in enumerate(workflow_data["blocks"]):
validate_block_definition(block, i)
def validate_block_definition(block: Dict[str, Any], index: int) -> None:
"""验证块定义"""
# 验证必要字段
validate_required_fields(block, ["id", "type"])
# 验证字段类型
validate_field_type(block, "id", str)
validate_field_type(block, "type", str)
validate_field_type(block, "params", dict)