From 575f24d513f041985a08f4ffc18483302686857a Mon Sep 17 00:00:00 2001 From: malmans2 Date: Mon, 19 Jan 2026 16:50:49 +0100 Subject: [PATCH 1/2] make sure time dim is sorted --- xarray_esgf/client.py | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/xarray_esgf/client.py b/xarray_esgf/client.py index 5d7e6a5..40935c4 100644 --- a/xarray_esgf/client.py +++ b/xarray_esgf/client.py @@ -43,6 +43,17 @@ def dataset_id_to_dict(dataset_id: str) -> dict[DATASET_ID_KEYS, str]: return dict(zip(keys, dataset_id.split("."), strict=True)) +def combine_datasets(datasets: list[Dataset]) -> Dataset: + obj = xr.combine_by_coords( + datasets, + join="exact", + combine_attrs="drop_conflicts", + ) + if isinstance(obj, DataArray): + obj = obj.to_dataset() + return obj + + @dataclasses.dataclass class Client: selection: dict[str, str | list[str]] @@ -154,14 +165,7 @@ def _open_datasets( if len(datasets) == 1: (ds,) = datasets else: - ds = xr.concat( - datasets, - dim="time", - data_vars="minimal", - coords="minimal", - compat="override", - combine_attrs="drop_conflicts", - ) + ds = combine_datasets(datasets) ds = ds.set_coords([ name for name, da in ds.variables.items() @@ -190,13 +194,7 @@ def open_dataset( sel=sel or {}, ) - obj = xr.combine_by_coords( - [ds.reset_coords() for ds in combined_datasets.values()], - join="exact", - combine_attrs="drop_conflicts", - ) - if isinstance(obj, DataArray): - obj = obj.to_dataset() + obj = combine_datasets([ds.reset_coords() for ds in combined_datasets.values()]) coords: set[Hashable] = set() for ds in combined_datasets.values(): From d45de88bbbf8cfd9bffd4e8443c1b20dc852618c Mon Sep 17 00:00:00 2001 From: malmans2 Date: Mon, 19 Jan 2026 16:51:48 +0100 Subject: [PATCH 2/2] cleanup --- xarray_esgf/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray_esgf/client.py b/xarray_esgf/client.py index 40935c4..bc43911 100644 --- a/xarray_esgf/client.py +++ b/xarray_esgf/client.py @@ -50,7 +50,7 @@ def combine_datasets(datasets: list[Dataset]) -> Dataset: combine_attrs="drop_conflicts", ) if isinstance(obj, DataArray): - obj = obj.to_dataset() + return obj.to_dataset() return obj