Skip to content

Commit a04e636

Browse files
committed
fix for open_array in r+ mode
1 parent d1c95b2 commit a04e636

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

src/zarr/api/asynchronous.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -299,12 +299,8 @@ async def open(
299299

300300
store_path = await make_store_path(store, mode=mode, path=path, storage_options=storage_options)
301301

302-
# TODO: check for more array-only kwargs
303-
expect_array = "shape" in kwargs
304-
305-
if expect_array:
306-
return await open_array(store=store_path, zarr_format=zarr_format, mode=mode, **kwargs)
307-
else:
302+
# TODO: the mode check below seems wrong!
303+
if "shape" not in kwargs and mode in _READ_MODES:
308304
try:
309305
metadata_dict = await get_array_metadata(store_path, zarr_format=zarr_format)
310306
# TODO: remove this cast when we fix typing for array metadata dicts
@@ -314,10 +310,18 @@ async def open(
314310
is_v3_array = zarr_format == 3 and _metadata_dict.get("node_type") == "array"
315311
if is_v3_array or zarr_format == 2:
316312
return AsyncArray(store_path=store_path, metadata=_metadata_dict)
317-
except (AssertionError, NodeTypeValidationError, FileNotFoundError):
313+
except (AssertionError, FileNotFoundError, NodeTypeValidationError):
318314
pass
319315
return await open_group(store=store_path, zarr_format=zarr_format, mode=mode, **kwargs)
320316

317+
try:
318+
return await open_array(store=store_path, zarr_format=zarr_format, mode=mode, **kwargs)
319+
except (KeyError, NodeTypeValidationError):
320+
# KeyError for a missing key
321+
# NodeTypeValidationError for failing to parse node metadata as an array when it's
322+
# actually a group
323+
return await open_group(store=store_path, zarr_format=zarr_format, mode=mode, **kwargs)
324+
321325

322326
async def open_consolidated(
323327
*args: Any, use_consolidated: Literal[True] = True, **kwargs: Any
@@ -1088,11 +1092,10 @@ async def open_array(
10881092
store_path = await make_store_path(store, path=path, mode=mode, storage_options=storage_options)
10891093

10901094
zarr_format = _handle_zarr_version_or_format(zarr_version=zarr_version, zarr_format=zarr_format)
1091-
10921095
try:
10931096
return await AsyncArray.open(store_path, zarr_format=zarr_format)
10941097
except FileNotFoundError:
1095-
if not store_path.read_only:
1098+
if not store_path.read_only and mode in _CREATE_MODES:
10961099
exists_ok = _infer_exists_ok(mode)
10971100
_zarr_format = zarr_format or _default_zarr_version()
10981101
return await create(

0 commit comments

Comments
 (0)