From 04da0de2130ba035b145347f87bb7f5bf2e67998 Mon Sep 17 00:00:00 2001 From: malmans2 Date: Wed, 21 Jan 2026 14:52:51 +0100 Subject: [PATCH] add coordinates attribute --- tests/test_20_open_dataset.py | 8 +++++++- xarray_esgf/client.py | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/tests/test_20_open_dataset.py b/tests/test_20_open_dataset.py index ee4a669..2c14e0f 100644 --- a/tests/test_20_open_dataset.py +++ b/tests/test_20_open_dataset.py @@ -74,9 +74,15 @@ def test_open_dataset(tmp_path: Path, index_node: str, download: bool) -> None: ) # Data vars - assert set(ds.data_vars) == {"tas", "pr"} + assert set(ds.data_vars) == {"pr", "tas"} + assert ds["pr"].coordinates == "areacella experiment_id height lat lon time" + assert ds["tas"].coordinates == "areacella experiment_id height lat lon time" # Attributes + assert ( + ds.coordinates + == "areacella experiment_id height lat lat_bnds lon lon_bnds time time_bnds" + ) assert ds.dataset_ids == [ "CMIP6.ScenarioMIP.EC-Earth-Consortium.EC-Earth3-CC.ssp245.r1i1p1f1.Amon.pr.gr.v20210113", "CMIP6.ScenarioMIP.EC-Earth-Consortium.EC-Earth3-CC.ssp245.r1i1p1f1.Amon.tas.gr.v20210113", diff --git a/xarray_esgf/client.py b/xarray_esgf/client.py index bc43911..c6367ab 100644 --- a/xarray_esgf/client.py +++ b/xarray_esgf/client.py @@ -54,6 +54,13 @@ def combine_datasets(datasets: list[Dataset]) -> Dataset: return obj +def add_coordinates_attr_inplace(obj: Dataset | DataArray) -> None: + obj.attrs["coordinates"] = " ".join(sorted(str(coord) for coord in obj.coords)) + if isinstance(obj, Dataset): + for da in obj.data_vars.values(): + add_coordinates_attr_inplace(da) + + @dataclasses.dataclass class Client: selection: dict[str, str | list[str]] @@ -205,6 +212,6 @@ def open_dataset( if name not in obj.dims: var.encoding["preferred_chunks"] = dict(var.chunksizes) + add_coordinates_attr_inplace(obj) obj.attrs["dataset_ids"] = sorted(combined_datasets) - return obj