Add intermediate previews and graph reconnection

This commit is contained in:
2026-07-28 16:31:12 +02:00
parent 2084540ab1
commit 521829a7fc
14 changed files with 520 additions and 61 deletions

View File

@@ -446,6 +446,43 @@ class DataflowGraphAndSqlTests(unittest.TestCase):
self.assertEqual(3, result.total_rows)
self.assertTrue(result.truncated)
def test_preview_can_return_a_bounded_intermediate_node_result(self) -> None:
source = inline_source()
filter_node = GraphNode(
id="filter",
type="filter",
label="Open cases",
position=GraphPosition(x=240, y=160),
config={"column": "status", "operator": "eq", "value": "open"},
)
output = GraphNode(
id="output",
type="output",
label="Output",
position=GraphPosition(x=440, y=160),
config={},
)
graph = PipelineGraph(
nodes=[source, filter_node, output],
edges=[
GraphEdge(id="source-filter", source="source", target="filter"),
GraphEdge(id="filter-output", source="filter", target="output"),
],
)
result = execute_preview(
graph,
row_limit=1,
preview_node_id="source",
)
self.assertEqual(2, result.total_rows)
self.assertIsNotNone(result.node_preview)
self.assertEqual("source", result.node_preview.node_id)
self.assertEqual(3, result.node_preview.total_rows)
self.assertEqual(1, len(result.node_preview.rows))
self.assertTrue(result.node_preview.truncated)
def test_empty_aggregate_and_null_sort_are_deterministic(self) -> None:
graph, _, _ = compile_sql(
"""
@@ -524,7 +561,7 @@ class DataflowGraphAndSqlTests(unittest.TestCase):
)
with self.assertRaises(PipelineExecutionError) as raised:
execute_preview(graph, row_limit=100)
execute_preview(graph, row_limit=100, preview_node_id="source")
self.assertEqual("filter-1", raised.exception.node_id)
self.assertIn("Cannot apply", str(raised.exception))
@@ -536,6 +573,12 @@ class DataflowGraphAndSqlTests(unittest.TestCase):
],
)
self.assertEqual(1, len(raised.exception.source_fingerprints))
self.assertIsNotNone(raised.exception.node_preview)
self.assertEqual("source", raised.exception.node_preview.node_id)
self.assertEqual(
[{"amount": "not-a-number"}],
raised.exception.node_preview.rows,
)
if __name__ == "__main__":