attempt to allow nested blocks in the debugger (#3060)
This commit is contained in:
@@ -2989,6 +2989,26 @@ class HttpRequestBlock(Block):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_all_blocks(blocks: list[BlockTypeVar]) -> list[BlockTypeVar]:
|
||||||
|
"""
|
||||||
|
Recursively get "all blocks" in a workflow definition.
|
||||||
|
|
||||||
|
At time of writing, blocks can be nested via the ForLoop block. This function
|
||||||
|
returns all blocks, flattened.
|
||||||
|
"""
|
||||||
|
|
||||||
|
all_blocks: list[BlockTypeVar] = []
|
||||||
|
|
||||||
|
for block in blocks:
|
||||||
|
all_blocks.append(block)
|
||||||
|
|
||||||
|
if block.block_type == BlockType.FOR_LOOP:
|
||||||
|
nested_blocks = get_all_blocks(block.loop_blocks)
|
||||||
|
all_blocks.extend(nested_blocks)
|
||||||
|
|
||||||
|
return all_blocks
|
||||||
|
|
||||||
|
|
||||||
BlockSubclasses = Union[
|
BlockSubclasses = Union[
|
||||||
ForLoopBlock,
|
ForLoopBlock,
|
||||||
TaskBlock,
|
TaskBlock,
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ from skyvern.forge.sdk.workflow.models.block import (
|
|||||||
UrlBlock,
|
UrlBlock,
|
||||||
ValidationBlock,
|
ValidationBlock,
|
||||||
WaitBlock,
|
WaitBlock,
|
||||||
|
get_all_blocks,
|
||||||
)
|
)
|
||||||
from skyvern.forge.sdk.workflow.models.parameter import (
|
from skyvern.forge.sdk.workflow.models.parameter import (
|
||||||
PARAMETER_TYPE,
|
PARAMETER_TYPE,
|
||||||
@@ -330,12 +331,12 @@ class WorkflowService:
|
|||||||
)
|
)
|
||||||
return workflow_run
|
return workflow_run
|
||||||
|
|
||||||
all_blocks = workflow.workflow_definition.blocks
|
top_level_blocks = workflow.workflow_definition.blocks
|
||||||
|
all_blocks = get_all_blocks(top_level_blocks)
|
||||||
|
|
||||||
if block_labels and len(block_labels):
|
if block_labels and len(block_labels):
|
||||||
blocks: list[BlockTypeVar] = []
|
blocks: list[BlockTypeVar] = []
|
||||||
all_labels = {block.label: block for block in all_blocks}
|
all_labels = {block.label: block for block in all_blocks}
|
||||||
|
|
||||||
for label in block_labels:
|
for label in block_labels:
|
||||||
if label not in all_labels:
|
if label not in all_labels:
|
||||||
raise BlockNotFound(block_label=label)
|
raise BlockNotFound(block_label=label)
|
||||||
@@ -350,7 +351,7 @@ class WorkflowService:
|
|||||||
)
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
blocks = all_blocks
|
blocks = top_level_blocks
|
||||||
|
|
||||||
if not blocks:
|
if not blocks:
|
||||||
raise SkyvernException(f"No blocks found for the given block labels: {block_labels}")
|
raise SkyvernException(f"No blocks found for the given block labels: {block_labels}")
|
||||||
|
|||||||
Reference in New Issue
Block a user