@@ -2275,10 +2275,10 @@ def create_zarr_target(self):
2275
2275
raise NotImplementedError
2276
2276
2277
2277
@contextlib .contextmanager
2278
- def create_store (self ):
2278
+ def create_store (self , cache_members : bool = True ):
2279
2279
with self .create_zarr_target () as store_target :
2280
2280
yield backends .ZarrStore .open_group (
2281
- store_target , mode = "w" , ** self .version_kwargs
2281
+ store_target , mode = "w" , cache_members = cache_members , ** self .version_kwargs
2282
2282
)
2283
2283
2284
2284
def save (self , dataset , store_target , ** kwargs ): # type: ignore[override]
@@ -2572,7 +2572,7 @@ def test_hidden_zarr_keys(self) -> None:
2572
2572
skip_if_zarr_format_3 ("This test is unnecessary; no hidden Zarr keys" )
2573
2573
2574
2574
expected = create_test_data ()
2575
- with self .create_store () as store :
2575
+ with self .create_store (cache_members = False ) as store :
2576
2576
expected .dump_to_store (store )
2577
2577
zarr_group = store .ds
2578
2578
@@ -2594,6 +2594,7 @@ def test_hidden_zarr_keys(self) -> None:
2594
2594
2595
2595
# put it back and try removing from a variable
2596
2596
del zarr_group ["var2" ].attrs [self .DIMENSION_KEY ]
2597
+
2597
2598
with pytest .raises (KeyError ):
2598
2599
with xr .decode_cf (store ):
2599
2600
pass
@@ -3258,40 +3259,45 @@ def test_chunked_cftime_datetime(self) -> None:
3258
3259
assert original [name ].chunks == actual_var .chunks
3259
3260
assert original .chunks == actual .chunks
3260
3261
3261
- @pytest .mark .parametrize ("cache_array_keys" , [True , False ])
3262
- def test_get_array_keys (self , cache_array_keys : bool ) -> None :
3262
+ def test_cache_members (self ) -> None :
3263
3263
"""
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.
3264
+ Ensure that if `ZarrStore` is created with `cache_members ` set to `True`,
3265
+ a `ZarrStore` only inspects the underlying zarr group once,
3266
+ and that the results of that inspection are cached.
3267
3267
3268
- Otherwise, `ZarrStore.get_array_keys` instance should invoke the `array_keys`
3269
- each time it is called.
3268
+ Otherwise, `ZarrStore.members` should inspect the underlying zarr group each time it is
3269
+ invoked
3270
3270
"""
3271
3271
with self .create_zarr_target () as store_target :
3272
- zstore = backends .ZarrStore .open_group (
3273
- store_target , mode = "w" , cache_members = cache_array_keys
3272
+ zstore_mut = backends .ZarrStore .open_group (
3273
+ store_target , mode = "w" , cache_members = False
3274
3274
)
3275
3275
3276
3276
# ensure that the keys are sorted
3277
3277
array_keys = sorted (("foo" , "bar" ))
3278
3278
3279
3279
# create some arrays
3280
3280
for ak in array_keys :
3281
- zstore .zarr_group .create (name = ak , shape = (1 ,), dtype = "uint8" )
3281
+ zstore_mut .zarr_group .create (name = ak , shape = (1 ,), dtype = "uint8" )
3282
+
3283
+ zstore_stat = backends .ZarrStore .open_group (
3284
+ store_target , mode = "r" , cache_members = True
3285
+ )
3282
3286
3283
- observed_keys_0 = sorted (zstore .array_keys ())
3287
+ observed_keys_0 = sorted (zstore_stat .array_keys ())
3284
3288
assert observed_keys_0 == array_keys
3285
3289
3286
3290
# create a new array
3287
3291
new_key = "baz"
3288
- zstore .zarr_group .create (name = new_key , shape = (1 ,), dtype = "uint8" )
3289
- observed_keys_1 = sorted (zstore .array_keys ())
3292
+ zstore_mut .zarr_group .create (name = new_key , shape = (1 ,), dtype = "uint8" )
3293
+
3294
+ observed_keys_1 = sorted (zstore_stat .array_keys ())
3295
+ assert observed_keys_1 == array_keys
3296
+
3297
+ observed_keys_2 = sorted (zstore_mut .array_keys ())
3298
+ assert observed_keys_2 == sorted (array_keys + [new_key ])
3299
+
3290
3300
3291
- if cache_array_keys :
3292
- assert observed_keys_1 == array_keys
3293
- else :
3294
- assert observed_keys_1 == sorted (array_keys + [new_key ])
3295
3301
3296
3302
3297
3303
@requires_zarr
@@ -3556,9 +3562,9 @@ def create_zarr_target(self):
3556
3562
yield tmp
3557
3563
3558
3564
@contextlib .contextmanager
3559
- def create_store (self ):
3565
+ def create_store (self , cache_members : bool = True ):
3560
3566
with self .create_zarr_target () as store_target :
3561
- group = backends .ZarrStore .open_group (store_target , mode = "a" )
3567
+ group = backends .ZarrStore .open_group (store_target , mode = "a" , cache_members = cache_members )
3562
3568
yield group
3563
3569
3564
3570
0 commit comments