|
|
|
@@ -2,7 +2,7 @@ from collections.abc import Sequence |
|
|
|
from typing import Any, Literal |
|
|
|
|
|
|
|
from core.file import FileAttribute, file_manager |
|
|
|
from core.variables.segments import ArrayFileSegment |
|
|
|
from core.variables import ArrayFileSegment |
|
|
|
from core.workflow.entities.variable_pool import VariablePool |
|
|
|
|
|
|
|
from .entities import Condition, SubCondition, SupportedComparisonOperator |
|
|
|
@@ -21,6 +21,8 @@ class ConditionProcessor: |
|
|
|
|
|
|
|
for condition in conditions: |
|
|
|
variable = variable_pool.get(condition.variable_selector) |
|
|
|
if variable is None: |
|
|
|
raise ValueError(f"Variable {condition.variable_selector} not found") |
|
|
|
|
|
|
|
if isinstance(variable, ArrayFileSegment) and condition.comparison_operator in { |
|
|
|
"contains", |
|
|
|
@@ -35,6 +37,15 @@ class ConditionProcessor: |
|
|
|
sub_conditions=condition.sub_variable_condition.conditions, |
|
|
|
operator=condition.sub_variable_condition.logical_operator, |
|
|
|
) |
|
|
|
elif condition.comparison_operator in { |
|
|
|
"exists", |
|
|
|
"not exists", |
|
|
|
}: |
|
|
|
result = _evaluate_condition( |
|
|
|
value=variable.value, |
|
|
|
operator=condition.comparison_operator, |
|
|
|
expected=None, |
|
|
|
) |
|
|
|
else: |
|
|
|
actual_value = variable.value if variable else None |
|
|
|
expected_value = condition.value |
|
|
|
@@ -103,6 +114,10 @@ def _evaluate_condition( |
|
|
|
return _assert_not_in(value=value, expected=expected) |
|
|
|
case "all of" if isinstance(expected, list): |
|
|
|
return _assert_all_of(value=value, expected=expected) |
|
|
|
case "exists": |
|
|
|
return _assert_exists(value=value) |
|
|
|
case "not exists": |
|
|
|
return _assert_not_exists(value=value) |
|
|
|
case _: |
|
|
|
raise ValueError(f"Unsupported operator: {operator}") |
|
|
|
|
|
|
|
@@ -338,6 +353,14 @@ def _assert_all_of(*, value: Any, expected: Sequence[str]) -> bool: |
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
def _assert_exists(*, value: Any) -> bool: |
|
|
|
return value is not None |
|
|
|
|
|
|
|
|
|
|
|
def _assert_not_exists(*, value: Any) -> bool: |
|
|
|
return value is None |
|
|
|
|
|
|
|
|
|
|
|
def _process_sub_conditions( |
|
|
|
variable: ArrayFileSegment, |
|
|
|
sub_conditions: Sequence[SubCondition], |