Skip to content

Commit 1464d90

Browse files
authored
Merge pull request #670 from jakirkham/simp_txt_coding_db_stores
2 parents a5dfc3b + ed1ffca commit 1464d90

File tree

1 file changed

+24
-38
lines changed

1 file changed

+24
-38
lines changed

zarr/storage.py

Lines changed: 24 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@
3535
import uuid
3636
import time
3737

38-
from numcodecs.compat import ensure_bytes, ensure_contiguous_ndarray
38+
from numcodecs.compat import (
39+
ensure_bytes,
40+
ensure_text,
41+
ensure_contiguous_ndarray
42+
)
3943
from numcodecs.registry import codec_registry
4044

4145
from zarr.errors import (
@@ -1573,18 +1577,6 @@ def migrate_1to2(store):
15731577
del store['attrs']
15741578

15751579

1576-
def _dbm_encode_key(key):
1577-
if hasattr(key, 'encode'):
1578-
key = key.encode('ascii')
1579-
return key
1580-
1581-
1582-
def _dbm_decode_key(key):
1583-
if hasattr(key, 'decode'):
1584-
key = key.decode('ascii')
1585-
return key
1586-
1587-
15881580
# noinspection PyShadowingBuiltins
15891581
class DBMStore(MutableMapping):
15901582
"""Storage class using a DBM-style database.
@@ -1730,17 +1722,20 @@ def __exit__(self, *args):
17301722
self.close()
17311723

17321724
def __getitem__(self, key):
1733-
key = _dbm_encode_key(key)
1725+
if isinstance(key, str):
1726+
key = key.encode("ascii")
17341727
return self.db[key]
17351728

17361729
def __setitem__(self, key, value):
1737-
key = _dbm_encode_key(key)
1730+
if isinstance(key, str):
1731+
key = key.encode("ascii")
17381732
value = ensure_bytes(value)
17391733
with self.write_mutex:
17401734
self.db[key] = value
17411735

17421736
def __delitem__(self, key):
1743-
key = _dbm_encode_key(key)
1737+
if isinstance(key, str):
1738+
key = key.encode("ascii")
17441739
with self.write_mutex:
17451740
del self.db[key]
17461741

@@ -1754,7 +1749,7 @@ def __eq__(self, other):
17541749
)
17551750

17561751
def keys(self):
1757-
return (_dbm_decode_key(k) for k in iter(self.db.keys()))
1752+
return (ensure_text(k, "ascii") for k in iter(self.db.keys()))
17581753

17591754
def __iter__(self):
17601755
return self.keys()
@@ -1763,20 +1758,11 @@ def __len__(self):
17631758
return sum(1 for _ in self.keys())
17641759

17651760
def __contains__(self, key):
1766-
key = _dbm_encode_key(key)
1761+
if isinstance(key, str):
1762+
key = key.encode("ascii")
17671763
return key in self.db
17681764

17691765

1770-
def _lmdb_decode_key_buffer(key):
1771-
# assume buffers=True
1772-
return key.tobytes().decode('ascii')
1773-
1774-
1775-
def _lmdb_decode_key_bytes(key):
1776-
# assume buffers=False
1777-
return key.decode('ascii')
1778-
1779-
17801766
class LMDBStore(MutableMapping):
17811767
"""Storage class using LMDB. Requires the `lmdb <http://lmdb.readthedocs.io/>`_
17821768
package to be installed.
@@ -1866,10 +1852,6 @@ def __init__(self, path, buffers=True, **kwargs):
18661852
self.db = lmdb.open(path, **kwargs)
18671853

18681854
# store properties
1869-
if buffers:
1870-
self.decode_key = _lmdb_decode_key_buffer
1871-
else:
1872-
self.decode_key = _lmdb_decode_key_bytes
18731855
self.buffers = buffers
18741856
self.path = path
18751857
self.kwargs = kwargs
@@ -1901,7 +1883,8 @@ def __exit__(self, *args):
19011883
self.close()
19021884

19031885
def __getitem__(self, key):
1904-
key = _dbm_encode_key(key)
1886+
if isinstance(key, str):
1887+
key = key.encode("ascii")
19051888
# use the buffers option, should avoid a memory copy
19061889
with self.db.begin(buffers=self.buffers) as txn:
19071890
value = txn.get(key)
@@ -1910,18 +1893,21 @@ def __getitem__(self, key):
19101893
return value
19111894

19121895
def __setitem__(self, key, value):
1913-
key = _dbm_encode_key(key)
1896+
if isinstance(key, str):
1897+
key = key.encode("ascii")
19141898
with self.db.begin(write=True, buffers=self.buffers) as txn:
19151899
txn.put(key, value)
19161900

19171901
def __delitem__(self, key):
1918-
key = _dbm_encode_key(key)
1902+
if isinstance(key, str):
1903+
key = key.encode("ascii")
19191904
with self.db.begin(write=True) as txn:
19201905
if not txn.delete(key):
19211906
raise KeyError(key)
19221907

19231908
def __contains__(self, key):
1924-
key = _dbm_encode_key(key)
1909+
if isinstance(key, str):
1910+
key = key.encode("ascii")
19251911
with self.db.begin(buffers=self.buffers) as txn:
19261912
with txn.cursor() as cursor:
19271913
return cursor.set_key(key)
@@ -1930,13 +1916,13 @@ def items(self):
19301916
with self.db.begin(buffers=self.buffers) as txn:
19311917
with txn.cursor() as cursor:
19321918
for k, v in cursor.iternext(keys=True, values=True):
1933-
yield self.decode_key(k), v
1919+
yield ensure_text(k, "ascii"), v
19341920

19351921
def keys(self):
19361922
with self.db.begin(buffers=self.buffers) as txn:
19371923
with txn.cursor() as cursor:
19381924
for k in cursor.iternext(keys=True, values=False):
1939-
yield self.decode_key(k)
1925+
yield ensure_text(k, "ascii")
19401926

19411927
def values(self):
19421928
with self.db.begin(buffers=self.buffers) as txn:

0 commit comments

Comments
 (0)