@@ -132,30 +132,6 @@ def _parse_async_node(
132
132
raise TypeError (f"Unknown node type, got { type (node )} " )
133
133
134
134
135
- async def _get_zarr_version (store_path : StorePath ) -> Literal [2 , 3 ]:
136
- """
137
- Guess Zarr format from present metadata files in a Store.
138
- """
139
- (
140
- zarr_json_bytes ,
141
- zgroup_bytes ,
142
- ) = await asyncio .gather (
143
- (store_path / ZARR_JSON ).exists (),
144
- (store_path / ZGROUP_JSON ).exists (),
145
- )
146
- if zarr_json_bytes and zgroup_bytes :
147
- # warn and favor v3
148
- msg = f"Both zarr.json (Zarr format 3) and .zgroup (Zarr format 2) metadata objects exist at { store_path } . Zarr format 3 will be used."
149
- warnings .warn (msg , category = ZarrUserWarning , stacklevel = 1 )
150
- if not zarr_json_bytes and not zgroup_bytes :
151
- raise FileNotFoundError (f"could not find zarr.json or .zgroup objects in { store_path } " )
152
- # set zarr_format based on which keys were found
153
- if zarr_json_bytes :
154
- return 3
155
- else :
156
- return 2
157
-
158
-
159
135
@dataclass (frozen = True )
160
136
class ConsolidatedMetadata :
161
137
"""
@@ -537,12 +513,32 @@ async def open(
537
513
to load consolidated metadata from a non-default key.
538
514
"""
539
515
store_path = await make_store_path (store )
516
+
517
+ zarr_json_bytes = None
518
+ zarr_group_bytes = None
519
+
540
520
# Guess zarr_format if not passed explicitly
541
521
if zarr_format is None :
542
- zarr_format = await _get_zarr_version (store_path )
543
- return await cls .open (
544
- store = store , zarr_format = zarr_format , use_consolidated = use_consolidated
522
+ (
523
+ zarr_json_bytes ,
524
+ zarr_group_bytes ,
525
+ ) = await asyncio .gather (
526
+ (store_path / ZARR_JSON ).get (),
527
+ (store_path / ZGROUP_JSON ).get (),
545
528
)
529
+ # set zarr_format based on which keys were found
530
+ if zarr_json_bytes is not None :
531
+ zarr_format = 3
532
+ if zarr_group_bytes is not None :
533
+ msg = f"Both zarr.json (Zarr format 3) and .zgroup (Zarr format 2) metadata objects exist at { store_path } . Zarr format 3 will be used."
534
+ warnings .warn (msg , category = ZarrUserWarning , stacklevel = 1 )
535
+ elif zarr_group_bytes is not None :
536
+ zarr_format = 2
537
+ else :
538
+ raise FileNotFoundError (
539
+ f"could not find zarr.json or .zgroup objects in { store_path } "
540
+ )
541
+
546
542
assert zarr_format is not None
547
543
548
544
if not store_path .store .supports_consolidated_metadata :
@@ -561,37 +557,36 @@ async def open(
561
557
if isinstance (use_consolidated , str ):
562
558
consolidated_key = use_consolidated
563
559
564
- paths = [store_path / ZGROUP_JSON , store_path / ZATTRS_JSON ]
565
- if use_consolidated or use_consolidated is None :
566
- paths .append (store_path / consolidated_key )
560
+ if zarr_group_bytes is None :
561
+ zarr_group_bytes = await (store_path / ZGROUP_JSON ).get ()
562
+ if zarr_group_bytes is None :
563
+ raise FileNotFoundError (store_path )
567
564
568
- zgroup_bytes , zattrs_bytes , * rest = await asyncio .gather (
569
- * [path .get () for path in paths ]
570
- )
571
- if zgroup_bytes is None :
565
+ zattrs_bytes = await (store_path / ZATTRS_JSON ).get ()
566
+ if zattrs_bytes is None :
572
567
raise FileNotFoundError (store_path )
573
568
574
569
if use_consolidated or use_consolidated is None :
575
- maybe_consolidated_metadata_bytes = rest [0 ]
576
-
570
+ consolidated_metadata_bytes = await (store_path / consolidated_key ).get ()
577
571
else :
578
- maybe_consolidated_metadata_bytes = None
572
+ consolidated_metadata_bytes = None
579
573
580
- if use_consolidated and maybe_consolidated_metadata_bytes is None :
574
+ if use_consolidated and consolidated_metadata_bytes is None :
581
575
# the user requested consolidated metadata, but it was missing
582
576
raise ValueError (consolidated_key )
583
577
584
578
elif use_consolidated is False :
585
579
# the user explicitly opted out of consolidated_metadata.
586
580
# Discard anything we might have read.
587
- maybe_consolidated_metadata_bytes = None
581
+ consolidated_metadata_bytes = None
588
582
589
583
return cls ._from_bytes_v2 (
590
- store_path , zgroup_bytes , zattrs_bytes , maybe_consolidated_metadata_bytes
584
+ store_path , zarr_group_bytes , zattrs_bytes , consolidated_metadata_bytes
591
585
)
592
586
593
587
elif zarr_format == 3 :
594
- zarr_json_bytes = await (store_path / ZARR_JSON ).get ()
588
+ if zarr_json_bytes is None :
589
+ zarr_json_bytes = await (store_path / ZARR_JSON ).get ()
595
590
if zarr_json_bytes is None :
596
591
raise FileNotFoundError (store_path )
597
592
if not isinstance (use_consolidated , bool | None ):
0 commit comments