Skip to content

Commit 2488bc2

Browse files
committed
Group supports item deletion; resolves #65
1 parent 96c34bb commit 2488bc2

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

docs/release.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
Release notes
22
=============
33

4+
* Group objects now support member deletion via ``del`` statement
5+
('#65 <https://github.com/alimanfoo/zarr/issues/65>'_)
6+
47
.. _release_2.0.1:
58

69
2.0.1

zarr/hierarchy.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from zarr.attrs import Attributes
1010
from zarr.core import Array
1111
from zarr.storage import contains_array, contains_group, init_group, \
12-
DictStore, DirectoryStore, group_meta_key, attrs_key, listdir
12+
DictStore, DirectoryStore, group_meta_key, attrs_key, listdir, rmdir
1313
from zarr.creation import array, create, empty, zeros, ones, full, \
1414
empty_like, zeros_like, ones_like, full_like
1515
from zarr.util import normalize_storage_path, normalize_shape
@@ -302,6 +302,17 @@ def __getitem__(self, item):
302302
else:
303303
raise KeyError(item)
304304

305+
def __setitem__(self, item, value):
306+
raise TypeError('item assignment not supported')
307+
308+
def __delitem__(self, item):
309+
path = self._item_path(item)
310+
if contains_array(self._store, path) or \
311+
contains_group(self._store, path):
312+
rmdir(self._store, path)
313+
else:
314+
raise KeyError(item)
315+
305316
def group_keys(self):
306317
"""Return an iterator over member names for groups only.
307318

zarr/tests/test_hierarchy.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,24 @@ def test_setitem(self):
485485
with assert_raises(TypeError):
486486
g['foo'] = 'bar'
487487

488+
def test_delitem(self):
489+
g = self.create_group()
490+
g.create_group('foo')
491+
g.create_dataset('bar/baz', shape=100, chunks=10)
492+
assert 'foo' in g
493+
assert 'bar' in g
494+
assert 'bar/baz' in g
495+
try:
496+
del g['bar']
497+
with assert_raises(KeyError):
498+
del g['xxx']
499+
except NotImplementedError:
500+
pass
501+
else:
502+
assert 'foo' in g
503+
assert 'bar' not in g
504+
assert 'bar/baz' not in g
505+
488506
def test_array_creation(self):
489507
grp = self.create_group()
490508

0 commit comments

Comments
 (0)