From 3fc9d5579e40cec47ea89c3c0e656e493789f80f Mon Sep 17 00:00:00 2001 From: Vincent Levasseur Date: Mon, 1 Jul 2024 08:19:49 +0200 Subject: [PATCH 1/2] Add `storage_options` to set cloud storage credentials when opening a datatree from the ZarrStore (Issue #9197) --- xarray/backends/zarr.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 9796fcbf9e2..95c51681a99 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -1223,9 +1223,11 @@ def open_datatree( from xarray.core.treenode import NodePath filename_or_obj = _normalize_path(filename_or_obj) + if storage_options: + kwargs["backend_kwargs"] = {"storage_options": storage_options} if group: parent = NodePath("/") / NodePath(group) - stores = ZarrStore.open_store(filename_or_obj, group=parent) + stores = ZarrStore.open_store(filename_or_obj, group=parent, storage_options=storage_options) if not stores: ds = open_dataset( filename_or_obj, group=parent, engine="zarr", **kwargs @@ -1233,7 +1235,8 @@ def open_datatree( return DataTree.from_dict({str(parent): ds}) else: parent = NodePath("/") - stores = ZarrStore.open_store(filename_or_obj, group=parent) + stores = ZarrStore.open_store(filename_or_obj, group=parent, storage_options=storage_options) + ds = open_dataset(filename_or_obj, group=parent, engine="zarr", **kwargs) tree_root = DataTree.from_dict({str(parent): ds}) for path_group, store in stores.items(): From 22f917d3a52488bd0bc88533f5c6d777dcefe215 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 06:35:26 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- xarray/backends/zarr.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 95c51681a99..c222f7f5b14 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -1227,7 +1227,9 @@ def open_datatree( kwargs["backend_kwargs"] = {"storage_options": storage_options} if group: parent = NodePath("/") / NodePath(group) - stores = ZarrStore.open_store(filename_or_obj, group=parent, storage_options=storage_options) + stores = ZarrStore.open_store( + filename_or_obj, group=parent, storage_options=storage_options + ) if not stores: ds = open_dataset( filename_or_obj, group=parent, engine="zarr", **kwargs @@ -1235,8 +1237,10 @@ def open_datatree( return DataTree.from_dict({str(parent): ds}) else: parent = NodePath("/") - stores = ZarrStore.open_store(filename_or_obj, group=parent, storage_options=storage_options) - + stores = ZarrStore.open_store( + filename_or_obj, group=parent, storage_options=storage_options + ) + ds = open_dataset(filename_or_obj, group=parent, engine="zarr", **kwargs) tree_root = DataTree.from_dict({str(parent): ds}) for path_group, store in stores.items():