Skip to content

Commit 6dee888

Browse files
committed
add test and use a view instead of a copy
1 parent 317de6f commit 6dee888

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

zarr/storage.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1551,7 +1551,7 @@ def __getitem__(self, key):
15511551
def __setitem__(self, key, value):
15521552
if self.mode == 'r':
15531553
raise ReadOnlyError()
1554-
value = ensure_contiguous_ndarray(value)
1554+
value = ensure_contiguous_ndarray(value).view("u1")
15551555
with self.mutex:
15561556
# writestr(key, value) writes with default permissions from
15571557
# zipfile (600) that are too restrictive, build ZipInfo for
@@ -1565,7 +1565,7 @@ def __setitem__(self, key, value):
15651565
else:
15661566
keyinfo.external_attr = 0o644 << 16 # ?rw-r--r--
15671567

1568-
self.zf.writestr(keyinfo, value.tobytes())
1568+
self.zf.writestr(keyinfo, value)
15691569

15701570
def __delitem__(self, key):
15711571
raise NotImplementedError

zarr/tests/test_storage.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,6 +1549,13 @@ def test_permissions(self):
15491549
assert perm == '0o40775'
15501550
z.close()
15511551

1552+
def test_store_and_retrieve_ndarray(self):
1553+
store = ZipStore('data/store.zip')
1554+
x = np.array([[1, 2], [3, 4]])
1555+
store['foo'] = x
1556+
y = np.frombuffer(store['foo'], dtype=x.dtype).reshape(x.shape)
1557+
assert np.array_equiv(y, x)
1558+
15521559

15531560
class TestDBMStore(StoreTests):
15541561

0 commit comments

Comments
 (0)