From a51edfc1e4e920b36cf46cab5f5cc5d5582d76d5 Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Wed, 29 Jan 2025 19:38:12 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=84=20synced=20local=20'skyvern/'=20wi?= =?UTF-8?q?th=20remote=20'skyvern/'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > [!IMPORTANT] > Add `complete_if_empty` parameter to `ForLoopBlock` to allow loop completion if iterable is empty, with updates in `block.py`, `yaml.py`, and `service.py`. > > - **Behavior**: > - Add `complete_if_empty` parameter to `ForLoopBlock` in `block.py` to allow loop completion if iterable is empty. > - Modify `get_loop_over_parameter_values()` in `block.py` to return an empty list if `complete_if_empty` is `True` and no iterable is found. > - **YAML Models**: > - Add `complete_if_empty` to `ForLoopBlockYAML` in `yaml.py`. > - **Service Layer**: > - Update `block_yaml_to_block()` in `service.py` to handle `complete_if_empty` for `ForLoopBlock`. > > This description was created by [Ellipsis](https://www.ellipsis.dev?ref=Skyvern-AI%2Fskyvern-cloud&utm_source=github&utm_medium=referral) for 2a825f4ec0dd5deab5305312cdecbb370e09cab0. It will automatically update as commits are pushed. --- 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 2b514dd203..e7d696ff2b 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 @@ def get_loop_over_parameter_values(self, workflow_run_context: WorkflowRunContex 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 50e4e6693d..36a0d6bb4e 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 894e16c491..a1cba6ce41 100644 --- a/skyvern/forge/sdk/workflow/service.py +++ b/skyvern/forge/sdk/workflow/service.py @@ -1512,6 +1512,7 @@ async def block_yaml_to_block( 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(