Add typed Arrow execution backend boundary

This commit is contained in:
2026-07-29 16:47:14 +02:00
parent 69509d5cc2
commit 8a11d7571b
17 changed files with 2264 additions and 49 deletions
+32
View File
@@ -18,6 +18,7 @@ from govoplan_core.core.datasources import (
DatasourcePublicationResult,
)
from govoplan_core.db.base import Base
from govoplan_dataflow.backend.backends.duckdb import DuckDbExecutionBackend
from govoplan_dataflow.backend.db.models import (
DataflowPipeline,
DataflowPipelineRevision,
@@ -320,6 +321,37 @@ class DataflowServiceTests(unittest.TestCase):
self.session.scalar(select(func.count()).select_from(DataflowRun)),
)
@unittest.skipUnless(
DuckDbExecutionBackend().available(),
"analytics extra is not installed",
)
def test_saved_preview_can_use_isolated_duckdb_backend(self) -> None:
pipeline = self._create()
response = preview_pipeline(
self.session,
tenant_id="tenant-1",
actor_id="user-1",
payload=PipelinePreviewRequest(
pipeline_id=pipeline.id,
execution_backend="duckdb",
),
principal=principal(),
)
self.session.commit()
run = self.session.get(DataflowRun, response.run_id)
self.assertEqual("succeeded", response.status)
self.assertEqual(
[{"id": 2, "amount": 15}, {"id": 3, "amount": 25}],
response.rows,
)
self.assertEqual(2, response.total_rows)
self.assertFalse(response.truncated)
self.assertEqual(3, response.input_row_count)
self.assertTrue(response.executor_version.startswith("duckdb-isolated-v1"))
self.assertEqual(response.executor_version, run.executor_version)
def test_failed_preview_keeps_upstream_lineage_and_failed_node_diagnostic(self) -> None:
graph = sample_graph()
graph.nodes[0].config["rows"] = [{"id": 1, "amount": "not-a-number"}]