Skip to content

Commit a32f33f

Browse files
committed
check dest is group
1 parent 95372cc commit a32f33f

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

zarr/convenience.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,11 @@ def copy_store(source, dest, source_path='', dest_path='', excludes=None,
636636
return n_copied, n_skipped, n_bytes_copied
637637

638638

639+
def _check_dest_is_group(dest):
640+
if not hasattr(dest, 'create_dataset'):
641+
raise ValueError('dest must be a group, got {!r}'.format(dest))
642+
643+
639644
def copy(source, dest, name=None, shallow=False, without_attrs=False, log=None,
640645
if_exists='raise', dry_run=False, **create_kws):
641646
"""Copy the `source` array or group into the `dest` group.
@@ -708,6 +713,9 @@ def copy(source, dest, name=None, shallow=False, without_attrs=False, log=None,
708713
709714
"""
710715

716+
# value checks
717+
_check_dest_is_group(dest)
718+
711719
# setup logging
712720
with _LogWriter(log) as log:
713721

@@ -973,6 +981,9 @@ def copy_all(source, dest, shallow=False, without_attrs=False, log=None,
973981
974982
"""
975983

984+
# value checks
985+
_check_dest_is_group(dest)
986+
976987
# setup counting variables
977988
n_copied = n_skipped = n_bytes_copied = 0
978989

zarr/tests/test_convenience.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,14 @@ def test_copy_array(self):
335335
copy(source['spam'], dest)
336336
check_copied_array(source['spam'], dest['spam'])
337337

338+
def test_copy_bad_dest(self):
339+
source = self.source
340+
341+
# try to copy to an array, dest must be a group
342+
dest = self.new_dest().create_dataset('eggs', shape=(100,))
343+
with pytest.raises(ValueError):
344+
copy(source['foo/bar/baz'], dest)
345+
338346
def test_copy_array_name(self):
339347
source = self.source
340348
dest = self.new_dest()

0 commit comments

Comments
 (0)