feat: add temporal Mol explorer
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s

This commit is contained in:
Codex
2026-07-14 15:19:42 +02:00
parent 0ec1ab4970
commit c0943fe7d4
39 changed files with 3065 additions and 163 deletions
+2
View File
@@ -77,6 +77,7 @@ from .operations import (
VectorSelectionDeriveRequest,
VectorSelectionRequest,
VectorSelectionResponse,
VectorSelectionSummary,
VectorStatsRequest,
VectorStatsResponse,
)
@@ -134,6 +135,7 @@ __all__ = [
"VectorSelectionDeriveRequest",
"VectorSelectionRequest",
"VectorSelectionResponse",
"VectorSelectionSummary",
"RasterClipRequest",
"RasterStatsResponse",
"RasterReprojectRequest",
+32
View File
@@ -36,6 +36,12 @@ class DatasetCreateResponse(BaseModel):
source_metadata: dict | None = None
provenance_metadata: dict | None = None
imported_at: datetime | None = None
temporal_series_key: str | None = None
observed_at: datetime | None = None
valid_from: datetime | None = None
valid_to: datetime | None = None
temporal_granularity: str | None = None
source_version: str | None = None
project_id: UUID
area_id: UUID | None = None
storage_path: str | None = None
@@ -70,6 +76,32 @@ class DatasetMetadataRefresh(BaseModel):
crs: str | None = None
class DatasetTemporalUpdate(BaseModel):
temporal_series_key: str
observed_at: datetime
valid_from: datetime | None = None
valid_to: datetime | None = None
temporal_granularity: str = "snapshot"
source_version: str | None = None
class DatasetVersionRead(BaseModel):
id: UUID
dataset_id: UUID
version: int
storage_path: str | None = None
source_version: str | None = None
observed_at: datetime | None = None
valid_from: datetime | None = None
valid_to: datetime | None = None
checksum_sha256: str | None = None
source_metadata: dict | None = None
provenance_metadata: dict | None = None
created_at: datetime | None = None
model_config = {"from_attributes": True}
class ExportRequest(BaseModel):
dataset_id: UUID
name: str | None = None
+11
View File
@@ -217,6 +217,16 @@ class VectorSelectionDeriveRequest(VectorSelectionRequest):
output_name: str | None = None
class VectorSelectionSummary(BaseModel):
metric_label: str
metric_value: float
metric_unit: str
aggregation_method: str
feature_count: int
is_estimate: bool = False
warning: str | None = None
class VectorSelectionResponse(BaseModel):
selection_bbox: VectorSelectionBBox
feature_count: int
@@ -224,3 +234,4 @@ class VectorSelectionResponse(BaseModel):
limit: int
truncated: bool
geojson: dict
summary: VectorSelectionSummary | None = None
+71
View File
@@ -0,0 +1,71 @@
from __future__ import annotations
from datetime import datetime
from uuid import UUID
from pydantic import BaseModel, Field
from app.schemas.operations import VectorSelectionBBox
class TemporalComparisonRequest(BaseModel):
earlier_dataset_id: UUID
later_dataset_id: UUID
bbox: VectorSelectionBBox
preview_limit: int = Field(default=500, ge=1, le=1000)
class TemporalDatasetRef(BaseModel):
id: UUID
name: str
observed_at: datetime
source_version: str | None = None
class TemporalMetricComparison(BaseModel):
label: str
unit: str
aggregation_method: str
earlier_value: float
later_value: float
absolute_change: float
percent_change: float | None = None
is_estimate: bool = False
class TemporalObjectChanges(BaseModel):
available: bool
added_count: int | None = None
removed_count: int | None = None
modified_count: int | None = None
unchanged_count: int | None = None
class TemporalComparisonResponse(BaseModel):
temporal_series_key: str
earlier: TemporalDatasetRef
later: TemporalDatasetRef
selection_bbox: VectorSelectionBBox
metric: TemporalMetricComparison
object_changes: TemporalObjectChanges
geojson: dict
warnings: list[str]
generated_at: datetime
class TemporalSeriesDataset(BaseModel):
id: UUID
name: str
observed_at: datetime
source_version: str | None = None
feature_count: int | None = None
class TemporalSeriesRead(BaseModel):
temporal_series_key: str
source_name: str | None = None
reference_layer_name: str | None = None
dataset_count: int
first_observed_at: datetime
last_observed_at: datetime
datasets: list[TemporalSeriesDataset]