Prefer governed orthophoto editions in source status
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s

This commit is contained in:
Codex
2026-07-17 02:33:15 +02:00
parent 0c2ebc1ffc
commit 0befca02f8
4 changed files with 84 additions and 10 deletions
@@ -4,6 +4,7 @@ from collections import defaultdict
from dataclasses import dataclass
from datetime import datetime, timedelta, timezone
from pathlib import Path
import re
from typing import Iterable
from uuid import UUID
@@ -51,6 +52,7 @@ SOURCE_POLICIES: dict[str, SourcePolicy] = {
}
DEFAULT_POLICY = SourcePolicy("Niet-geclassificeerde bron", "edition")
_ORTHOPHOTO_EDITION = re.compile(r"^20\d{2}\.\d{2}$")
def _as_utc(value: datetime | None) -> datetime | None:
@@ -81,10 +83,16 @@ def _latest_dataset(datasets: list[Dataset]) -> Dataset:
)
def _latest_source_version(policy: SourcePolicy, datasets: list[Dataset]) -> str | None:
def _latest_source_version(source_name: str, policy: SourcePolicy, datasets: list[Dataset]) -> str | None:
versioned = [item for item in datasets if item.source_version]
if not versioned:
return None
if source_name == "digitaal_vlaanderen_orthophoto":
official_editions = [
item for item in versioned if _ORTHOPHOTO_EDITION.fullmatch((item.source_version or "").strip())
]
if official_editions:
return _latest_dataset(official_editions).source_version
if policy.refresh_policy == "rolling_snapshot":
named_current = [
item
@@ -258,7 +266,7 @@ class SourceFreshnessService:
version_count=sum(len(versions_by_dataset.get(item.id, [])) for item in source_datasets),
latest_imported_at=_latest_datetime(item.imported_at for item in source_datasets),
latest_observed_at=_latest_datetime(item.observed_at for item in source_datasets),
latest_source_version=_latest_source_version(policy, source_datasets),
latest_source_version=_latest_source_version(source_name, policy, source_datasets),
refresh_policy=policy.refresh_policy,
review_interval_days=policy.review_interval_days,
next_review_at=next_review_at,
@@ -157,6 +157,33 @@ def test_rolling_orthophoto_prefers_explicit_current_snapshot_over_historical_ob
assert report.items[0].latest_source_version == "most_recent_at_2026-07-14"
def test_orthophoto_freshness_prefers_governed_official_edition_over_rolling_marker() -> None:
legacy = _dataset(
"digitaal_vlaanderen_orthophoto",
imported_at=NOW - timedelta(days=2),
observed_at=datetime(2026, 7, 15, tzinfo=timezone.utc),
source_version="most_recent_at_2026-07-15",
)
official = _dataset(
"digitaal_vlaanderen_orthophoto",
imported_at=NOW - timedelta(days=1),
observed_at=datetime(2025, 4, 5, tzinfo=timezone.utc),
source_version="2025.04",
)
report = SourceFreshnessService.build_report(
legacy.project_id,
[legacy, official],
[_version(legacy), _version(official)],
now=NOW,
)
item = report.items[0]
assert item.latest_source_version == "2025.04"
assert item.refresh_policy == "rolling_snapshot"
assert item.review_interval_days == 180
def test_spatial_partitions_do_not_become_a_false_historical_series() -> None:
first = _dataset(
"dov_soil_map",