@@ -2275,13 +2275,10 @@ def create_zarr_target(self):
22752275 raise NotImplementedError
22762276
22772277 @contextlib .contextmanager
2278- def create_store (self , cache_members : bool = True ):
2278+ def create_store (self ):
22792279 with self .create_zarr_target () as store_target :
22802280 yield backends .ZarrStore .open_group (
2281- store_target ,
2282- mode = "w" ,
2283- cache_members = cache_members ,
2284- ** self .version_kwargs ,
2281+ store_target , mode = "w" , ** self .version_kwargs
22852282 )
22862283
22872284 def save (self , dataset , store_target , ** kwargs ): # type: ignore[override]
@@ -2575,7 +2572,7 @@ def test_hidden_zarr_keys(self) -> None:
25752572 skip_if_zarr_format_3 ("This test is unnecessary; no hidden Zarr keys" )
25762573
25772574 expected = create_test_data ()
2578- with self .create_store (cache_members = False ) as store :
2575+ with self .create_store () as store :
25792576 expected .dump_to_store (store )
25802577 zarr_group = store .ds
25812578
@@ -2597,7 +2594,6 @@ def test_hidden_zarr_keys(self) -> None:
25972594
25982595 # put it back and try removing from a variable
25992596 del zarr_group ["var2" ].attrs [self .DIMENSION_KEY ]
2600-
26012597 with pytest .raises (KeyError ):
26022598 with xr .decode_cf (store ):
26032599 pass
@@ -3262,43 +3258,40 @@ def test_chunked_cftime_datetime(self) -> None:
32623258 assert original [name ].chunks == actual_var .chunks
32633259 assert original .chunks == actual .chunks
32643260
3265- def test_cache_members (self ) -> None :
3261+ @pytest .mark .parametrize ("cache_array_keys" , [True , False ])
3262+ def test_get_array_keys (self , cache_array_keys : bool ) -> None :
32663263 """
3267- Ensure that if `ZarrStore` is created with `cache_members ` set to `True`,
3268- a `ZarrStore` only inspects the underlying zarr group once,
3269- and that the results of that inspection are cached.
3264+ Ensure that if `ZarrStore` is created with `cache_array_keys ` set to `True`,
3265+ a `ZarrStore.get_array_keys ` only invokes the `array_keys` function on the
3266+ `ZarrStore.zarr_group` instance once, and that the results of that call are cached.
32703267
3271- Otherwise, `ZarrStore.members` should inspect the underlying zarr group each time it is
3272- invoked
3268+ Otherwise, `ZarrStore.get_array_keys` instance should invoke the `array_keys`
3269+ each time it is called.
32733270 """
32743271 with self .create_zarr_target () as store_target :
3275- zstore_mut = backends .ZarrStore .open_group (
3276- store_target , mode = "w" , cache_members = False
3272+ zstore = backends .ZarrStore .open_group (
3273+ store_target , mode = "w" , cache_array_keys = cache_array_keys
32773274 )
32783275
32793276 # ensure that the keys are sorted
32803277 array_keys = sorted (("foo" , "bar" ))
32813278
32823279 # create some arrays
32833280 for ak in array_keys :
3284- zstore_mut .zarr_group .create (name = ak , shape = (1 ,), dtype = "uint8" )
3285-
3286- zstore_stat = backends .ZarrStore .open_group (
3287- store_target , mode = "r" , cache_members = True
3288- )
3281+ zstore .zarr_group .create (name = ak , shape = (1 ,), dtype = "uint8" )
32893282
3290- observed_keys_0 = sorted (zstore_stat . array_keys ())
3283+ observed_keys_0 = sorted (zstore . get_array_keys ())
32913284 assert observed_keys_0 == array_keys
32923285
32933286 # create a new array
32943287 new_key = "baz"
3295- zstore_mut .zarr_group .create (name = new_key , shape = (1 ,), dtype = "uint8" )
3296-
3297- observed_keys_1 = sorted (zstore_stat .array_keys ())
3298- assert observed_keys_1 == array_keys
3288+ zstore .zarr_group .create (name = new_key , shape = (1 ,), dtype = "uint8" )
3289+ observed_keys_1 = sorted (zstore .get_array_keys ())
32993290
3300- observed_keys_2 = sorted (zstore_mut .array_keys ())
3301- assert observed_keys_2 == sorted (array_keys + [new_key ])
3291+ if cache_array_keys :
3292+ assert observed_keys_1 == array_keys
3293+ else :
3294+ assert observed_keys_1 == sorted (array_keys + [new_key ])
33023295
33033296
33043297@requires_zarr
@@ -3378,11 +3371,11 @@ def test_append(self) -> None:
33783371 }
33793372 else :
33803373 expected = {
3381- "iter" : 2 ,
3374+ "iter" : 3 ,
33823375 "contains" : 18 ,
33833376 "setitem" : 10 ,
33843377 "getitem" : 13 ,
3385- "listdir" : 1 ,
3378+ "listdir" : 2 ,
33863379 "list_prefix" : 2 ,
33873380 }
33883381
@@ -3480,11 +3473,11 @@ def test_region_write(self) -> None:
34803473 }
34813474 else :
34823475 expected = {
3483- "iter" : 1 ,
3476+ "iter" : 2 ,
34843477 "contains" : 4 ,
34853478 "setitem" : 1 ,
3486- "getitem" : 5 ,
3487- "listdir" : 1 ,
3479+ "getitem" : 4 ,
3480+ "listdir" : 2 ,
34883481 "list_prefix" : 0 ,
34893482 }
34903483
@@ -3563,11 +3556,9 @@ def create_zarr_target(self):
35633556 yield tmp
35643557
35653558 @contextlib .contextmanager
3566- def create_store (self , cache_members : bool = True ):
3559+ def create_store (self ):
35673560 with self .create_zarr_target () as store_target :
3568- group = backends .ZarrStore .open_group (
3569- store_target , mode = "a" , cache_members = cache_members
3570- )
3561+ group = backends .ZarrStore .open_group (store_target , mode = "a" )
35713562 yield group
35723563
35733564
0 commit comments