Harden V1 demo workflow smoke
GeoIntel CI / docs-smoke (push) Has been cancelled
GeoIntel CI / contract-smoke (push) Has been cancelled

This commit is contained in:
Codex
2026-06-17 00:33:09 +02:00
parent e330283fbe
commit be7705f6c5
13 changed files with 248 additions and 53 deletions
+66 -45
View File
@@ -1,6 +1,7 @@
from __future__ import annotations
import json
import os
from datetime import datetime, timezone
from pathlib import Path
from uuid import UUID, uuid4
@@ -30,6 +31,16 @@ class DemoWorkflowService:
@staticmethod
def _fixture_path(filename: str) -> Path:
roots: list[Path] = []
if os.getenv("GEOINTEL_FIXTURES_ROOT"):
roots.append(Path(os.environ["GEOINTEL_FIXTURES_ROOT"]))
roots.extend(parent / "fixtures" / "golden" for parent in Path(__file__).resolve().parents)
roots.append(Path("/app/fixtures/golden"))
for root in roots:
path = root / filename
if path.exists():
return path
return DemoWorkflowService._repo_root() / "fixtures" / "golden" / filename
@staticmethod
@@ -194,6 +205,8 @@ class DemoWorkflowService:
@staticmethod
def seed(db: Session) -> DemoWorkflowResponse:
existing = DemoWorkflowService._find_existing_project(db)
reference_payload, reference_raw = DemoWorkflowService._load_fixture("reference_buildings.geojson")
candidate_payload, candidate_raw = DemoWorkflowService._load_fixture("predicted_buildings.geojson")
if existing:
area = db.query(Area).filter(Area.project_id == existing.id).order_by(Area.created_at.asc()).first()
reference = (
@@ -229,51 +242,59 @@ class DemoWorkflowService:
message="Demo workflow already exists.",
created=False,
)
project = existing
created = True
else:
project = Project(
id=uuid4(),
name=DemoWorkflowService.PROJECT_NAME,
description="Offline fixture workflow: reference buildings, predicted buildings and persisted QA metrics.",
region="Kempen",
status="active",
)
db.add(project)
db.commit()
db.refresh(project)
area = None
reference = None
candidate = None
quality_check = None
created = True
project = Project(
id=uuid4(),
name=DemoWorkflowService.PROJECT_NAME,
description="Offline fixture workflow: reference buildings, predicted buildings and persisted QA metrics.",
region="Kempen",
status="active",
)
db.add(project)
db.commit()
db.refresh(project)
area = DemoWorkflowService._create_area(db, project.id)
reference_payload, reference_raw = DemoWorkflowService._load_fixture("reference_buildings.geojson")
candidate_payload, candidate_raw = DemoWorkflowService._load_fixture("predicted_buildings.geojson")
reference = DemoWorkflowService._create_dataset(
db=db,
project_id=project.id,
area_id=area.id,
filename=DemoWorkflowService.REFERENCE_FILENAME,
payload=reference_payload,
raw=reference_raw,
role="reference",
source_name="fixture",
reference_layer_name="buildings",
)
candidate = DemoWorkflowService._create_dataset(
db=db,
project_id=project.id,
area_id=area.id,
filename=DemoWorkflowService.CANDIDATE_FILENAME,
payload=candidate_payload,
raw=candidate_raw,
role="source",
source_name="fixture",
reference_layer_name=None,
)
quality_check = DemoWorkflowService._persist_qa(
db=db,
project_id=project.id,
candidate_dataset_id=candidate.id,
reference_dataset_id=reference.id,
area_id=area.id,
)
if not area:
area = DemoWorkflowService._create_area(db, project.id)
if not reference:
reference = DemoWorkflowService._create_dataset(
db=db,
project_id=project.id,
area_id=area.id,
filename=DemoWorkflowService.REFERENCE_FILENAME,
payload=reference_payload,
raw=reference_raw,
role="reference",
source_name="fixture",
reference_layer_name="buildings",
)
if not candidate:
candidate = DemoWorkflowService._create_dataset(
db=db,
project_id=project.id,
area_id=area.id,
filename=DemoWorkflowService.CANDIDATE_FILENAME,
payload=candidate_payload,
raw=candidate_raw,
role="source",
source_name="fixture",
reference_layer_name=None,
)
if not quality_check:
quality_check = DemoWorkflowService._persist_qa(
db=db,
project_id=project.id,
candidate_dataset_id=candidate.id,
reference_dataset_id=reference.id,
area_id=area.id,
)
return DemoWorkflowResponse(
project_id=project.id,
@@ -284,5 +305,5 @@ class DemoWorkflowService:
metric_count=6,
status="ready",
message="Demo workflow seeded from explicit local fixtures.",
created=True,
created=created,
)