Preserve connector source runtime evidence

This commit is contained in:
2026-08-04 12:05:35 +02:00
parent 2d93ad07d2
commit 067c8273b6
8 changed files with 202 additions and 4 deletions
@@ -31,9 +31,12 @@ from govoplan_datasources.backend.schemas import (
DatasourceListResponse,
DatasourceMaterializationListResponse,
DatasourceMaterializationResponse,
DatasourceOriginHealthResponse,
DatasourceOriginListResponse,
DatasourceOriginPushdownResponse,
DatasourceOriginRegisterRequest,
DatasourceOriginResponse,
DatasourcePreviewDiagnosticResponse,
DatasourcePreviewResponse,
DatasourceResponse,
DatasourceRetireResponse,
@@ -383,6 +386,8 @@ def api_preview_datasource(
offset: int = Query(default=0, ge=0),
consistency: str = Query(default="current", pattern="^(current|live|frozen)$"),
materialization_ref: str | None = Query(default=None, max_length=120),
max_bytes: int = Query(default=1_000_000, ge=1_024, le=20_000_000),
timeout_ms: int = Query(default=2_000, ge=100, le=10_000),
session: Session = Depends(get_session),
principal: ApiPrincipal = Depends(get_api_principal),
) -> DatasourcePreviewResponse:
@@ -397,6 +402,8 @@ def api_preview_datasource(
consistency=consistency, # type: ignore[arg-type]
limit=limit,
offset=offset,
max_bytes=max_bytes,
timeout_ms=timeout_ms,
),
)
except DatasourceError as exc:
@@ -411,6 +418,20 @@ def api_preview_datasource(
if result.materialization
else None
),
returned_bytes=result.returned_bytes,
elapsed_ms=result.elapsed_ms,
effective_row_limit=result.effective_row_limit,
effective_byte_limit=result.effective_byte_limit,
effective_timeout_ms=result.effective_timeout_ms,
diagnostics=[
DatasourcePreviewDiagnosticResponse(
severity=item.severity,
code=item.code,
message=item.message,
details=dict(item.details),
)
for item in result.diagnostics
],
)
@@ -662,6 +683,23 @@ def _origin_response(item: DatasourceOrigin) -> DatasourceOriginResponse:
updated_at=item.updated_at.isoformat() if item.updated_at else None,
capabilities=list(item.capabilities),
metadata=dict(item.metadata),
source_mode=item.source_mode,
pushdown=DatasourceOriginPushdownResponse(
projections=item.pushdown.projections,
pagination=item.pushdown.pagination,
filters=list(item.pushdown.filters),
aggregations=list(item.pushdown.aggregations),
sorting=list(item.pushdown.sorting),
),
health=DatasourceOriginHealthResponse(
status=item.health.status,
code=item.health.code,
summary=item.health.summary,
checked_at=(
item.health.checked_at.isoformat() if item.health.checked_at else None
),
details=dict(item.health.details),
),
)