From a716c607d72040dfad516fe3ac2e6375ce73aff7 Mon Sep 17 00:00:00 2001 From: mengyonghao <1533512157@qq.com> Date: Tue, 6 Jan 2026 18:44:40 +0800 Subject: [PATCH] fix(workflow): optimize input_type validation for loop variables --- .../core/workflow/nodes/cycle_graph/config.py | 22 ++++++++++++++++++- api/app/core/workflow/nodes/enums.py | 4 ++-- api/app/core/workflow/nodes/if_else/config.py | 10 +++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/api/app/core/workflow/nodes/cycle_graph/config.py b/api/app/core/workflow/nodes/cycle_graph/config.py index fcf65717..2e57536e 100644 --- a/api/app/core/workflow/nodes/cycle_graph/config.py +++ b/api/app/core/workflow/nodes/cycle_graph/config.py @@ -1,6 +1,6 @@ from typing import Any -from pydantic import Field, BaseModel +from pydantic import Field, BaseModel, field_validator from app.core.workflow.nodes.base_config import BaseNodeConfig, VariableType from app.core.workflow.nodes.enums import ComparisonOperator, LogicOperator, ValueInputType @@ -27,6 +27,16 @@ class CycleVariable(BaseNodeConfig): description="Initial or current value of the loop variable" ) + @field_validator("input_type", mode="before") + @classmethod + def lower_input_type(cls, v): + if isinstance(v, str): + try: + return ValueInputType(v.lower()) + except ValueError: + raise ValueError(f"Invalid input_type: {v}") + return v + class ConditionDetail(BaseModel): operator: ComparisonOperator = Field( @@ -49,6 +59,16 @@ class ConditionDetail(BaseModel): description="Input type of the loop variable" ) + @field_validator("input_type", mode="before") + @classmethod + def lower_input_type(cls, v): + if isinstance(v, str): + try: + return ValueInputType(v.lower()) + except ValueError: + raise ValueError(f"Invalid input_type: {v}") + return v + class ConditionsConfig(BaseModel): """Configuration for loop condition evaluation""" diff --git a/api/app/core/workflow/nodes/enums.py b/api/app/core/workflow/nodes/enums.py index fbbbf845..c294bb11 100644 --- a/api/app/core/workflow/nodes/enums.py +++ b/api/app/core/workflow/nodes/enums.py @@ -93,5 +93,5 @@ class HttpErrorHandle(StrEnum): class ValueInputType(StrEnum): - VARIABLE = "Variable" - CONSTANT = "Constant" + VARIABLE = "variable" + CONSTANT = "constant" diff --git a/api/app/core/workflow/nodes/if_else/config.py b/api/app/core/workflow/nodes/if_else/config.py index 4dcb00d1..90b4bcde 100644 --- a/api/app/core/workflow/nodes/if_else/config.py +++ b/api/app/core/workflow/nodes/if_else/config.py @@ -27,6 +27,16 @@ class ConditionDetail(BaseModel): description="Value input type for comparison" ) + @field_validator("input_type", mode="before") + @classmethod + def lower_input_type(cls, v): + if isinstance(v, str): + try: + return ValueInputType(v.lower()) + except ValueError: + raise ValueError(f"Invalid input_type: {v}") + return v + class ConditionBranchConfig(BaseModel): """Configuration for a conditional branch"""