From a8dfb64e80960cc9a0044d9a103051bdb870841c Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 30 Nov 2020 14:51:35 -0800 Subject: [PATCH] Forward mode option through normalize store args. Closes #269 --- docs/release.rst | 3 +++ zarr/creation.py | 8 ++++---- zarr/hierarchy.py | 10 ++++++---- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/docs/release.rst b/docs/release.rst index af0b1ab38..5bf15034e 100644 --- a/docs/release.rst +++ b/docs/release.rst @@ -10,6 +10,9 @@ This release will be the first release of Zarr not supporting Python 3.5. * End Python 3.5 support. By :user:`Chris Barnes `; :issue:`602`. +* Fix ``open_group/open_array`` to allow opening of readonly store with + ``mode='r'`` :issue:`269` + * Add `Array` tests for FSStore. By :user:`Andrew Fulton `; :issue: `644`. diff --git a/zarr/creation.py b/zarr/creation.py index 95d529305..5b4e97bc7 100644 --- a/zarr/creation.py +++ b/zarr/creation.py @@ -129,11 +129,11 @@ def create(shape, chunks=True, dtype=None, compressor='default', return z -def normalize_store_arg(store, clobber=False, storage_options=None): +def normalize_store_arg(store, clobber=False, storage_options=None, mode='w'): if store is None: return dict() elif isinstance(store, str): - mode = 'w' if clobber else 'r' + mode = mode if clobber else "r" if "://" in store or "::" in store: return FSStore(store, mode=mode, **(storage_options or {})) elif storage_options: @@ -450,8 +450,8 @@ def open_array(store=None, mode='a', shape=None, chunks=True, dtype=None, # a : read/write if exists, create otherwise (default) # handle polymorphic store arg - clobber = mode == 'w' - store = normalize_store_arg(store, clobber=clobber, storage_options=storage_options) + clobber = (mode == 'w') + store = normalize_store_arg(store, clobber=clobber, storage_options=storage_options, mode=mode) if chunk_store is not None: chunk_store = normalize_store_arg(chunk_store, clobber=clobber, storage_options=storage_options) diff --git a/zarr/hierarchy.py b/zarr/hierarchy.py index 71851252c..39dc82c72 100644 --- a/zarr/hierarchy.py +++ b/zarr/hierarchy.py @@ -1035,11 +1035,11 @@ def move(self, source, dest): self._write_op(self._move_nosync, source, dest) -def _normalize_store_arg(store, clobber=False, storage_options=None): +def _normalize_store_arg(store, *, clobber=False, storage_options=None, mode=None): if store is None: return MemoryStore() return normalize_store_arg(store, clobber=clobber, - storage_options=storage_options) + storage_options=storage_options, mode=mode) def group(store=None, overwrite=False, chunk_store=None, @@ -1148,8 +1148,10 @@ def open_group(store=None, mode='a', cache_attrs=True, synchronizer=None, path=N """ # handle polymorphic store arg - clobber = mode != 'r' - store = _normalize_store_arg(store, clobber=clobber, storage_options=storage_options) + clobber = mode != "r" + store = _normalize_store_arg( + store, clobber=clobber, storage_options=storage_options, mode=mode + ) if chunk_store is not None: chunk_store = _normalize_store_arg(chunk_store, clobber=clobber, storage_options=storage_options)