diff --git a/zarr/storage.py b/zarr/storage.py index 17c6a88b46..12154c29e4 100644 --- a/zarr/storage.py +++ b/zarr/storage.py @@ -1267,9 +1267,6 @@ def __setitem__(self, key, value): else: keyinfo.external_attr = 0o644 << 16 # ?rw-r--r-- - if isinstance(value, str): - value = value.encode("utf-8") - self.zf.writestr(keyinfo, value) def __delitem__(self, key): diff --git a/zarr/tests/test_storage.py b/zarr/tests/test_storage.py index 5488eeab52..31433c8eff 100644 --- a/zarr/tests/test_storage.py +++ b/zarr/tests/test_storage.py @@ -9,6 +9,7 @@ import unittest from contextlib import contextmanager from pickle import PicklingError +from zipfile import ZipFile import numpy as np import pytest @@ -947,6 +948,21 @@ def test_popitem(self): with pytest.raises(NotImplementedError): store.popitem() + def test_permissions(self): + store = ZipStore('data/store.zip', mode='w') + store['foo'] = b'bar' + store['baz/'] = b'' + store.flush() + store.close() + z = ZipFile('data/store.zip', 'r') + info = z.getinfo('foo') + perm = oct( info.external_attr >> 16 ) + assert perm == '0o644' + info = z.getinfo('baz/') + perm = oct( info.external_attr >> 16 ) + assert perm == '0o40775' + z.close() + class TestDBMStore(StoreTests, unittest.TestCase):