@@ -88,7 +88,8 @@ def test_group_members(store: MemoryStore | LocalStore, zarr_format: ZarrFormat)
88
88
members_expected ["subgroup" ] = group .create_group ("subgroup" )
89
89
# make a sub-sub-subgroup, to ensure that the children calculation doesn't go
90
90
# too deep in the hierarchy
91
- _ = members_expected ["subgroup" ].create_group ("subsubgroup" ) # type: ignore
91
+ subsubgroup = members_expected ["subgroup" ].create_group ("subsubgroup" ) # type: ignore
92
+ subsubsubgroup = subsubgroup .create_group ("subsubsubgroup" ) # type: ignore
92
93
93
94
members_expected ["subarray" ] = group .create_array (
94
95
"subarray" , shape = (100 ,), dtype = "uint8" , chunk_shape = (10 ,), exists_ok = True
@@ -101,10 +102,25 @@ def test_group_members(store: MemoryStore | LocalStore, zarr_format: ZarrFormat)
101
102
# this creates a directory with a random key in it
102
103
# this should not show up as a member
103
104
sync (store .set (f"{ path } /extra_directory/extra_object-2" , Buffer .from_bytes (b"000000" )))
104
- members_observed = group .members
105
+ members_observed = group .members ()
105
106
# members are not guaranteed to be ordered, so sort before comparing
106
107
assert sorted (dict (members_observed )) == sorted (members_expected )
107
108
109
+ # partial
110
+ members_observed = group .members (max_depth = 1 )
111
+ members_expected ["subgroup/subsubgroup" ] = subsubgroup
112
+ # members are not guaranteed to be ordered, so sort before comparing
113
+ assert sorted (dict (members_observed )) == sorted (members_expected )
114
+
115
+ # total
116
+ members_observed = group .members (max_depth = None )
117
+ members_expected ["subgroup/subsubgroup/subsubsubgroup" ] = subsubsubgroup
118
+ # members are not guaranteed to be ordered, so sort before comparing
119
+ assert sorted (dict (members_observed )) == sorted (members_expected )
120
+
121
+ with pytest .raises (ValueError , match = "max_depth" ):
122
+ members_observed = group .members (max_depth = - 1 )
123
+
108
124
109
125
def test_group (store : MemoryStore | LocalStore , zarr_format : ZarrFormat ) -> None :
110
126
"""
@@ -349,7 +365,8 @@ def test_group_create_array(
349
365
if method == "create_array" :
350
366
array = group .create_array (name = "array" , shape = shape , dtype = dtype , data = data )
351
367
elif method == "array" :
352
- array = group .array (name = "array" , shape = shape , dtype = dtype , data = data )
368
+ with pytest .warns (DeprecationWarning ):
369
+ array = group .array (name = "array" , shape = shape , dtype = dtype , data = data )
353
370
else :
354
371
raise AssertionError
355
372
@@ -358,7 +375,7 @@ def test_group_create_array(
358
375
with pytest .raises (ContainsArrayError ):
359
376
group .create_array (name = "array" , shape = shape , dtype = dtype , data = data )
360
377
elif method == "array" :
361
- with pytest .raises (ContainsArrayError ):
378
+ with pytest .raises (ContainsArrayError ), pytest . warns ( DeprecationWarning ) :
362
379
group .array (name = "array" , shape = shape , dtype = dtype , data = data )
363
380
assert array .shape == shape
364
381
assert array .dtype == np .dtype (dtype )
@@ -653,3 +670,56 @@ async def test_asyncgroup_update_attributes(
653
670
654
671
agroup_new_attributes = await agroup .update_attributes (attributes_new )
655
672
assert agroup_new_attributes .attrs == attributes_new
673
+
674
+
675
+ async def test_group_members_async (store : LocalStore | MemoryStore ):
676
+ group = AsyncGroup (
677
+ GroupMetadata (),
678
+ store_path = StorePath (store = store , path = "root" ),
679
+ )
680
+ a0 = await group .create_array ("a0" , (1 ,))
681
+ g0 = await group .create_group ("g0" )
682
+ a1 = await g0 .create_array ("a1" , (1 ,))
683
+ g1 = await g0 .create_group ("g1" )
684
+ a2 = await g1 .create_array ("a2" , (1 ,))
685
+ g2 = await g1 .create_group ("g2" )
686
+
687
+ # immediate children
688
+ children = sorted ([x async for x in group .members ()], key = lambda x : x [0 ])
689
+ assert children == [
690
+ ("a0" , a0 ),
691
+ ("g0" , g0 ),
692
+ ]
693
+
694
+ nmembers = await group .nmembers ()
695
+ assert nmembers == 2
696
+
697
+ # partial
698
+ children = sorted ([x async for x in group .members (max_depth = 1 )], key = lambda x : x [0 ])
699
+ expected = [
700
+ ("a0" , a0 ),
701
+ ("g0" , g0 ),
702
+ ("g0/a1" , a1 ),
703
+ ("g0/g1" , g1 ),
704
+ ]
705
+ assert children == expected
706
+ nmembers = await group .nmembers (max_depth = 1 )
707
+ assert nmembers == 4
708
+
709
+ # all children
710
+ all_children = sorted ([x async for x in group .members (max_depth = None )], key = lambda x : x [0 ])
711
+ expected = [
712
+ ("a0" , a0 ),
713
+ ("g0" , g0 ),
714
+ ("g0/a1" , a1 ),
715
+ ("g0/g1" , g1 ),
716
+ ("g0/g1/a2" , a2 ),
717
+ ("g0/g1/g2" , g2 ),
718
+ ]
719
+ assert all_children == expected
720
+
721
+ nmembers = await group .nmembers (max_depth = None )
722
+ assert nmembers == 6
723
+
724
+ with pytest .raises (ValueError , match = "max_depth" ):
725
+ [x async for x in group .members (max_depth = - 1 )]
0 commit comments