From 5e4b86c8284e1aba5424828ae7cfe7cfcaf7cfde Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Thu, 30 Jan 2025 03:40:25 +0800 Subject: [PATCH] WIP - Loop node advanced parameters + complete_if_empty (#1675) --- skyvern/forge/sdk/workflow/models/block.py | 6 +++++- skyvern/forge/sdk/workflow/models/yaml.py | 1 + skyvern/forge/sdk/workflow/service.py | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/skyvern/forge/sdk/workflow/models/block.py b/skyvern/forge/sdk/workflow/models/block.py index 2b514dd2..e7d696ff 100644 --- a/skyvern/forge/sdk/workflow/models/block.py +++ b/skyvern/forge/sdk/workflow/models/block.py @@ -765,6 +765,7 @@ class ForLoopBlock(Block): loop_blocks: list[BlockTypeVar] loop_over: PARAMETER_TYPE | None = None loop_variable_reference: str | None = None + complete_if_empty: bool = False def get_all_parameters( self, @@ -849,7 +850,10 @@ class ForLoopBlock(Block): raise NotImplementedError() else: - raise NoIterableValueFound() + if self.complete_if_empty: + return [] + else: + raise NoIterableValueFound() if isinstance(parameter_value, list): return parameter_value diff --git a/skyvern/forge/sdk/workflow/models/yaml.py b/skyvern/forge/sdk/workflow/models/yaml.py index 50e4e669..36a0d6bb 100644 --- a/skyvern/forge/sdk/workflow/models/yaml.py +++ b/skyvern/forge/sdk/workflow/models/yaml.py @@ -146,6 +146,7 @@ class ForLoopBlockYAML(BlockYAML): loop_blocks: list["BLOCK_YAML_SUBCLASSES"] loop_over_parameter_key: str = "" loop_variable_reference: str | None = None + complete_if_empty: bool = False class CodeBlockYAML(BlockYAML): diff --git a/skyvern/forge/sdk/workflow/service.py b/skyvern/forge/sdk/workflow/service.py index 894e16c4..a1cba6ce 100644 --- a/skyvern/forge/sdk/workflow/service.py +++ b/skyvern/forge/sdk/workflow/service.py @@ -1512,6 +1512,7 @@ class WorkflowService: loop_blocks=loop_blocks, output_parameter=output_parameter, continue_on_failure=block_yaml.continue_on_failure, + complete_if_empty=block_yaml.complete_if_empty, ) elif block_yaml.block_type == BlockType.CODE: return CodeBlock(