Skip to content

Commit 660d312

Browse files
committed
Enhance STAC titles with product type and version
Modified the STAC generation script and discovery notebook to include the specific product (e.g., Analysis, Forecast) and version string in the Item titles. This ensures different datasets are clearly distinguishable in the catalog browser.
1 parent 2892180 commit 660d312

2 files changed

Lines changed: 27 additions & 3 deletions

File tree

examples/build_dynamical_catalog_full.ipynb

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,15 +230,27 @@
230230
" end_dt = datetime.fromisoformat(str(ds[time_dim].max().values[()]).split(\".\")[0])\n",
231231
" \n",
232232
" # 3. Create Item\n",
233-
" item_id = f\"{prefix.split('/')[0]}-{prefix.split('/')[1].replace('.icechunk', '').replace('.', '-')}\"\n",
233+
" dataset_name = prefix.split(\"/\")[0]\n",
234+
" version_str = prefix.split(\"/\")[1]\n",
235+
" item_id = f\"{dataset_name}-{version_str.replace('.icechunk', '').replace('.', '-')}\"\n",
236+
"\n",
237+
" # Prettier title including version and sub-product\n",
238+
" base_name = entry.get(\"Name\", dataset_name).split(\"(\")[0].strip()\n",
239+
" sub_prod = dataset_name.replace(\"noaa-\", \"\").replace(\"nasa-\", \"\").replace(\"-\", \" \").title()\n",
240+
" for word in base_name.split():\n",
241+
" sub_prod = sub_prod.replace(word, \"\").strip()\n",
242+
" \n",
243+
" clean_version = version_str.replace(\".icechunk\", \"\")\n",
244+
" item_title = f\"{base_name} ({sub_prod.title()}, {clean_version})\"\n",
245+
"\n",
234246
" item = pystac.Item(\n",
235247
" id=item_id,\n",
236248
" geometry=_bbox_to_geometry(bbox),\n",
237249
" bbox=bbox,\n",
238250
" datetime=None,\n",
239251
" start_datetime=start_dt,\n",
240252
" end_datetime=end_dt,\n",
241-
" properties={\"title\": entry.get(\"Name\", item_id), \"description\": entry.get(\"Description\", \"\")},\n",
253+
" properties={\"title\": item_title, \"description\": entry.get(\"Description\", \"\")},\n",
242254
" stac_extensions=ICECHUNK_STAC_EXTENSIONS,\n",
243255
" )\n",
244256
" \n",

scripts/build_dynamical_stac.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,18 @@ def build_item_for_store(
419419
version_slug = version_str.replace(".icechunk", "").replace(".", "-")
420420
item_id = f"{dataset_name}-{version_slug}"
421421

422+
# Prettier title including version and sub-product
423+
# Example: "NOAA HRRR (Analysis, v0.1.0)"
424+
base_name = entry.get("Name", dataset_name).split("(")[0].strip()
425+
sub_prod = dataset_name.replace("noaa-", "").replace("nasa-", "").replace("-", " ").title()
426+
# If sub_prod is redundant (e.g. "Hrrr Analysis" when base_name is "NOAA HRRR"),
427+
# we simplify to just "Analysis"
428+
for word in base_name.split():
429+
sub_prod = sub_prod.replace(word, "").strip()
430+
431+
clean_version = version_str.replace(".icechunk", "")
432+
item_title = f"{base_name} ({sub_prod.title()}, {clean_version})"
433+
422434
temporal_dim = detect_temporal_dimension(ds)
423435

424436
description = entry.get("Description", "").strip()
@@ -440,7 +452,7 @@ def build_item_for_store(
440452
icechunk_href=store_uri,
441453
snapshot_id=snap,
442454
storage_schemes=storage_schemes,
443-
title=entry.get("Name", item_id),
455+
title=item_title,
444456
description=description,
445457
providers=[DYNAMICAL_PROVIDER],
446458
virtual=False,

0 commit comments

Comments
 (0)