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