Skip to content

Commit a987dbe

Browse files
author
Martin Durant
committed
Add a couple of little tests
1 parent 203cf0c commit a987dbe

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
lines changed

zarr/storage.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -950,14 +950,17 @@ def atexit_rmglob(path,
950950
class FSStore(MutableMapping):
951951

952952
def __init__(self, url, normalize_keys=True, key_separator='.',
953-
mode='w', consolidated=False, metadata_key='.zmetadata', **storage_options):
953+
mode='w', consolidated=False, metadata_key='.zmetadata',
954+
exceptions=(KeyError, PermissionError, IOError),
955+
**storage_options):
954956
import fsspec
955957
self.path = url
956958
self.normalize_keys = normalize_keys
957959
self.key_separator = key_separator
958960
self.map = fsspec.get_mapper(url, **storage_options)
959961
self.fs = self.map.fs # for direct operations
960962
self.mode = mode
963+
self.exceptions = exceptions
961964
# TODO: should warn if consolidated and write mode?
962965
if self.fs.exists(url) and not self.fs.isdir(url):
963966
err_fspath_exists_notdir(url)
@@ -988,7 +991,10 @@ def __getitem__(self, key):
988991
if self.consolidated and self._is_meta(key):
989992
return self.meta[key]
990993
key = self._normalize_key(key)
991-
return self.map[key]
994+
try:
995+
return self.map[key]
996+
except self.exceptions as e:
997+
raise KeyError(key) from e
992998

993999
def __setitem__(self, key, value):
9941000
if self.mode == 'r':
@@ -1003,8 +1009,8 @@ def __setitem__(self, key, value):
10031009
if self.fs.isdir(path):
10041010
self.fs.rm(path, recursive=True)
10051011
self.map[key] = value
1006-
except IOError:
1007-
raise KeyError(key)
1012+
except self.exceptions as e:
1013+
raise KeyError(key) from e
10081014

10091015
def __delitem__(self, key):
10101016
if self.mode == 'r':

zarr/tests/test_storage.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -852,6 +852,18 @@ def test_complex(self):
852852
assert store["foo"] == b"hello"
853853
assert 'foo' in os.listdir(path2)
854854

855+
def test_consolidated(self):
856+
path = tempfile.mkdtemp()
857+
store = FSStore(path, consolidated=True)
858+
store[".zarray"] = b"{}"
859+
assert ".zmetadata" in os.listdir(path)
860+
861+
def test_not_fsspec(self):
862+
import zarr
863+
path = tempfile.mkdtemp()
864+
with pytest.raises(ValueError, match="storage_options"):
865+
zarr.open_array(path, mode='w', storage_options={"some": "kwargs"})
866+
855867

856868
class TestNestedDirectoryStore(TestDirectoryStore, unittest.TestCase):
857869

zarr/tests/util.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def skip_test_env_var(name):
5454
if LooseVersion(sys.version) >= LooseVersion("3.6"):
5555
import fsspec # noqa: F401
5656
have_fsspec = True
57-
else:
57+
else: # pragma: no cover
5858
have_fsspec = False
59-
except ImportError:
59+
except ImportError: # pragma: no cover
6060
have_fsspec = False

0 commit comments

Comments
 (0)