@@ -436,12 +436,10 @@ def create_group(self, name, overwrite=False):
436
436
def _create_group_nosync (self , name , overwrite = False ):
437
437
path = self ._item_path (name )
438
438
439
- # create intermediate groups
440
- self ._require_parent_group (path , overwrite = overwrite )
441
-
442
439
# create terminal group
443
440
init_group (self ._store , path = path , chunk_store = self ._chunk_store ,
444
441
overwrite = overwrite )
442
+
445
443
return Group (self ._store , path = path , read_only = self ._read_only ,
446
444
chunk_store = self ._chunk_store ,
447
445
synchronizer = self ._synchronizer )
@@ -450,13 +448,15 @@ def create_groups(self, *names, **kwargs):
450
448
"""Convenience method to create multiple groups in a single call."""
451
449
return tuple (self .create_group (name , ** kwargs ) for name in names )
452
450
453
- def require_group (self , name ):
451
+ def require_group (self , name , overwrite = False ):
454
452
"""Obtain a sub-group, creating one if it doesn't exist.
455
453
456
454
Parameters
457
455
----------
458
456
name : string
459
457
Group name.
458
+ overwrite : bool, optional
459
+ Overwrite any existing array with given `name` if present.
460
460
461
461
Returns
462
462
-------
@@ -473,20 +473,17 @@ def require_group(self, name):
473
473
474
474
"""
475
475
476
- return self ._write_op (self ._require_group_nosync , name )
477
-
478
- def _require_group_nosync (self , name ):
476
+ return self ._write_op (self ._require_group_nosync , name ,
477
+ overwrite = overwrite )
479
478
479
+ def _require_group_nosync (self , name , overwrite = False ):
480
480
path = self ._item_path (name )
481
481
482
- # require all intermediate groups
483
- segments = path .split ('/' )
484
- for i in range (len (segments ) + 1 ):
485
- p = '/' .join (segments [:i ])
486
- if contains_array (self ._store , p ):
487
- raise KeyError (name )
488
- elif not contains_group (self ._store , p ):
489
- init_group (self ._store , path = p , chunk_store = self ._chunk_store )
482
+ # create terminal group if necessary
483
+ if not contains_group (self ._store , path ):
484
+ init_group (store = self ._store , path = path ,
485
+ chunk_store = self ._chunk_store ,
486
+ overwrite = overwrite )
490
487
491
488
return Group (self ._store , path = path , read_only = self ._read_only ,
492
489
chunk_store = self ._chunk_store ,
@@ -496,16 +493,6 @@ def require_groups(self, *names):
496
493
"""Convenience method to require multiple groups in a single call."""
497
494
return tuple (self .require_group (name ) for name in names )
498
495
499
- def _require_parent_group (self , path , overwrite = False ):
500
- segments = path .split ('/' )
501
- for i in range (len (segments )):
502
- p = '/' .join (segments [:i ])
503
- if contains_array (self ._store , p ):
504
- init_group (self ._store , path = p ,
505
- chunk_store = self ._chunk_store , overwrite = overwrite )
506
- elif not contains_group (self ._store , p ):
507
- init_group (self ._store , path = p , chunk_store = self ._chunk_store )
508
-
509
496
def create_dataset (self , name , data = None , shape = None , chunks = None ,
510
497
dtype = None , compressor = 'default' , fill_value = None ,
511
498
order = 'C' , synchronizer = None , filters = None ,
@@ -569,7 +556,6 @@ def _create_dataset_nosync(self, name, data=None, shape=None, chunks=None,
569
556
filters = None , overwrite = False , ** kwargs ):
570
557
571
558
path = self ._item_path (name )
572
- self ._require_parent_group (path , overwrite = overwrite )
573
559
574
560
# determine synchronizer
575
561
if synchronizer is None :
@@ -647,8 +633,6 @@ def create(self, name, **kwargs):
647
633
648
634
def _create_nosync (self , name , ** kwargs ):
649
635
path = self ._item_path (name )
650
- overwrite = kwargs .get ('overwrite' , False )
651
- self ._require_parent_group (path , overwrite = overwrite )
652
636
kwargs .setdefault ('synchronizer' , self ._synchronizer )
653
637
return create (store = self ._store , path = path ,
654
638
chunk_store = self ._chunk_store , ** kwargs )
@@ -660,8 +644,6 @@ def empty(self, name, **kwargs):
660
644
661
645
def _empty_nosync (self , name , ** kwargs ):
662
646
path = self ._item_path (name )
663
- overwrite = kwargs .get ('overwrite' , False )
664
- self ._require_parent_group (path , overwrite = overwrite )
665
647
kwargs .setdefault ('synchronizer' , self ._synchronizer )
666
648
return empty (store = self ._store , path = path ,
667
649
chunk_store = self ._chunk_store , ** kwargs )
@@ -673,8 +655,6 @@ def zeros(self, name, **kwargs):
673
655
674
656
def _zeros_nosync (self , name , ** kwargs ):
675
657
path = self ._item_path (name )
676
- overwrite = kwargs .get ('overwrite' , False )
677
- self ._require_parent_group (path , overwrite = overwrite )
678
658
kwargs .setdefault ('synchronizer' , self ._synchronizer )
679
659
return zeros (store = self ._store , path = path ,
680
660
chunk_store = self ._chunk_store , ** kwargs )
@@ -686,8 +666,6 @@ def ones(self, name, **kwargs):
686
666
687
667
def _ones_nosync (self , name , ** kwargs ):
688
668
path = self ._item_path (name )
689
- overwrite = kwargs .get ('overwrite' , False )
690
- self ._require_parent_group (path , overwrite = overwrite )
691
669
kwargs .setdefault ('synchronizer' , self ._synchronizer )
692
670
return ones (store = self ._store , path = path ,
693
671
chunk_store = self ._chunk_store , ** kwargs )
@@ -699,8 +677,6 @@ def full(self, name, fill_value, **kwargs):
699
677
700
678
def _full_nosync (self , name , fill_value , ** kwargs ):
701
679
path = self ._item_path (name )
702
- overwrite = kwargs .get ('overwrite' , False )
703
- self ._require_parent_group (path , overwrite = overwrite )
704
680
kwargs .setdefault ('synchronizer' , self ._synchronizer )
705
681
return full (store = self ._store , path = path ,
706
682
chunk_store = self ._chunk_store ,
@@ -713,8 +689,6 @@ def array(self, name, data, **kwargs):
713
689
714
690
def _array_nosync (self , name , data , ** kwargs ):
715
691
path = self ._item_path (name )
716
- overwrite = kwargs .get ('overwrite' , False )
717
- self ._require_parent_group (path , overwrite = overwrite )
718
692
kwargs .setdefault ('synchronizer' , self ._synchronizer )
719
693
return array (data , store = self ._store , path = path ,
720
694
chunk_store = self ._chunk_store , ** kwargs )
@@ -726,8 +700,6 @@ def empty_like(self, name, data, **kwargs):
726
700
727
701
def _empty_like_nosync (self , name , data , ** kwargs ):
728
702
path = self ._item_path (name )
729
- overwrite = kwargs .get ('overwrite' , False )
730
- self ._require_parent_group (path , overwrite = overwrite )
731
703
kwargs .setdefault ('synchronizer' , self ._synchronizer )
732
704
return empty_like (data , store = self ._store , path = path ,
733
705
chunk_store = self ._chunk_store , ** kwargs )
@@ -739,8 +711,6 @@ def zeros_like(self, name, data, **kwargs):
739
711
740
712
def _zeros_like_nosync (self , name , data , ** kwargs ):
741
713
path = self ._item_path (name )
742
- overwrite = kwargs .get ('overwrite' , False )
743
- self ._require_parent_group (path , overwrite = overwrite )
744
714
kwargs .setdefault ('synchronizer' , self ._synchronizer )
745
715
return zeros_like (data , store = self ._store , path = path ,
746
716
chunk_store = self ._chunk_store , ** kwargs )
@@ -752,8 +722,6 @@ def ones_like(self, name, data, **kwargs):
752
722
753
723
def _ones_like_nosync (self , name , data , ** kwargs ):
754
724
path = self ._item_path (name )
755
- overwrite = kwargs .get ('overwrite' , False )
756
- self ._require_parent_group (path , overwrite = overwrite )
757
725
kwargs .setdefault ('synchronizer' , self ._synchronizer )
758
726
return ones_like (data , store = self ._store , path = path ,
759
727
chunk_store = self ._chunk_store , ** kwargs )
@@ -765,8 +733,6 @@ def full_like(self, name, data, **kwargs):
765
733
766
734
def _full_like_nosync (self , name , data , ** kwargs ):
767
735
path = self ._item_path (name )
768
- overwrite = kwargs .get ('overwrite' , False )
769
- self ._require_parent_group (path , overwrite = overwrite )
770
736
kwargs .setdefault ('synchronizer' , self ._synchronizer )
771
737
return full_like (data , store = self ._store , path = path ,
772
738
chunk_store = self ._chunk_store , ** kwargs )
@@ -819,12 +785,8 @@ def group(store=None, overwrite=False, chunk_store=None, synchronizer=None):
819
785
store = DictStore ()
820
786
821
787
# require group
822
- if overwrite :
823
- init_group (store , overwrite = True , chunk_store = chunk_store )
824
- elif contains_array (store ):
825
- raise ValueError ('store contains an array' )
826
- elif not contains_group (store ):
827
- init_group (store , chunk_store = chunk_store )
788
+ if overwrite or not contains_group (store ):
789
+ init_group (store , overwrite = overwrite , chunk_store = chunk_store )
828
790
829
791
return Group (store , read_only = False , chunk_store = chunk_store ,
830
792
synchronizer = synchronizer )
@@ -887,7 +849,7 @@ def open_group(path, mode='a', synchronizer=None):
887
849
elif mode == 'a' :
888
850
if contains_array (store ):
889
851
raise ValueError ('store contains array' )
890
- elif not contains_group (store ):
852
+ if not contains_group (store ):
891
853
init_group (store )
892
854
893
855
elif mode in ['w-' , 'x' ]:
0 commit comments