Harden V1 demo workflow smoke
This commit is contained in:
@@ -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,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user