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
+38
View File
@@ -345,6 +345,10 @@ def upload_layer(
"source_metadata_json": json.dumps(source_metadata, ensure_ascii=False),
"provenance_metadata_json": json.dumps(provenance_metadata, ensure_ascii=False),
"area_id": area_id,
"temporal_series_key": f"grb:{definition.key}:mol",
"observed_at": summary["generated_at"],
"temporal_granularity": "snapshot",
"source_version": summary["generated_at"][:10],
},
files={"file": (path.name, handle, "application/geo+json")},
timeout=timeout,
@@ -352,6 +356,31 @@ def upload_layer(
return response_data(response)
def ensure_temporal_metadata(
session: requests.Session,
base_url: str,
project_id: str,
dataset: dict[str, Any],
definition: LayerDefinition,
generated_at: str,
timeout: int,
) -> dict[str, Any]:
series_key = f"grb:{definition.key}:mol"
if dataset.get("temporal_series_key") == series_key and dataset.get("observed_at"):
return dataset
response = session.patch(
f"{base_url}/api/v1/projects/{project_id}/datasets/{dataset['id']}/temporal",
json={
"temporal_series_key": series_key,
"observed_at": generated_at,
"temporal_granularity": "snapshot",
"source_version": generated_at[:10],
},
timeout=timeout,
)
return response_data(response)
def main() -> int:
args = parse_args()
requested = {item.strip().lower() for item in args.layers.split(",") if item.strip()}
@@ -402,6 +431,15 @@ def main() -> int:
for definition, path, summary in prepared:
dataset = next((item for item in existing if item.get("original_filename") == path.name), None)
if dataset:
dataset = ensure_temporal_metadata(
api_session,
base_url,
project_id,
dataset,
definition,
summary["generated_at"],
args.import_timeout,
)
results.append(
{"layer": definition.key, "dataset_id": dataset["id"], "feature_count": dataset.get("feature_count"), "status": "existing"}
)