more examples of concurrent foreach

This commit is contained in:
lda
2026-05-23 22:07:05 +07:00 Verified
parent 88b17f6806
commit 10350e87f8
6 changed files with 233 additions and 9 deletions
@@ -6,6 +6,10 @@ from examples.raw_canonical_workflow import (
build_raw_canonical_workflow,
run_raw_canonical_example,
)
from examples.raw_concurrent_foreach import (
build_raw_concurrent_foreach_workflow,
run_raw_concurrent_foreach_example,
)
def test_raw_canonical_workflow_runs() -> None:
@@ -36,3 +40,31 @@ def test_raw_canonical_workflow_serializes_new_shape() -> None:
assert node["output"][0]["target"] == {"root": "state", "parts": ["message"]}
assert message_schema["type"] == "string"
assert message_schema["reducer"] == "wf.std.replace"
def test_raw_concurrent_foreach_workflow_runs() -> None:
run = run_raw_concurrent_foreach_example()
assert run.status == RunStatus.COMPLETED
assert run.output["seen"] == ["a", "c"]
assert len(run.output["errors"]) == 1
error = run.output["errors"][0]
assert error["index"] == 1
assert error["node_id"] == "record"
assert error["error_type"] == "ValueError"
assert error["message"] == "bad item"
def test_raw_concurrent_foreach_serializes_canonical_policy_shape() -> None:
workflow = build_raw_concurrent_foreach_workflow()
dumped = workflow.model_dump(mode="json")
foreach = dumped["nodes"][0]
assert foreach["mode"] == "concurrent"
assert foreach["concurrent"]["max_active"] == 2
assert foreach["item_error"]["action"] == "collect"
assert foreach["item_error"]["collect_to"] == {
"root": "state",
"parts": ["errors"],
}
assert "on_item_error" not in foreach