|
12 | 12 | from zarr.array import Array, AsyncArray |
13 | 13 | from zarr.buffer import NDArrayLike |
14 | 14 | from zarr.chunk_key_encodings import ChunkKeyEncoding |
15 | | -from zarr.common import JSON, ChunkCoords, MemoryOrder, OpenMode, ZarrFormat |
| 15 | +from zarr.common import JSON, AccessModeLiteral, ChunkCoords, MemoryOrder, ZarrFormat |
16 | 16 | from zarr.group import AsyncGroup |
17 | 17 | from zarr.metadata import ArrayV2Metadata, ArrayV3Metadata |
18 | 18 | from zarr.store import ( |
@@ -158,7 +158,7 @@ async def load( |
158 | 158 | async def open( |
159 | 159 | *, |
160 | 160 | store: StoreLike | None = None, |
161 | | - mode: OpenMode | None = None, # type and value changed |
| 161 | + mode: AccessModeLiteral | None = None, # type and value changed |
162 | 162 | zarr_version: ZarrFormat | None = None, # deprecated |
163 | 163 | zarr_format: ZarrFormat | None = None, |
164 | 164 | path: str | None = None, |
@@ -189,15 +189,15 @@ async def open( |
189 | 189 | Return type depends on what exists in the given store. |
190 | 190 | """ |
191 | 191 | zarr_format = _handle_zarr_version_or_format(zarr_version=zarr_version, zarr_format=zarr_format) |
192 | | - store_path = make_store_path(store, mode=mode) |
| 192 | + store_path = await make_store_path(store, mode=mode) |
193 | 193 |
|
194 | 194 | if path is not None: |
195 | 195 | store_path = store_path / path |
196 | 196 |
|
197 | 197 | try: |
198 | | - return await open_array(store=store_path, zarr_format=zarr_format, **kwargs) |
| 198 | + return await open_array(store=store_path, zarr_format=zarr_format, mode=mode, **kwargs) |
199 | 199 | except KeyError: |
200 | | - return await open_group(store=store_path, zarr_format=zarr_format, **kwargs) |
| 200 | + return await open_group(store=store_path, zarr_format=zarr_format, mode=mode, **kwargs) |
201 | 201 |
|
202 | 202 |
|
203 | 203 | async def open_consolidated(*args: Any, **kwargs: Any) -> AsyncGroup: |
@@ -267,7 +267,7 @@ async def save_array( |
267 | 267 | or _default_zarr_version() |
268 | 268 | ) |
269 | 269 |
|
270 | | - store_path = make_store_path(store, mode="w") |
| 270 | + store_path = await make_store_path(store, mode="w") |
271 | 271 | if path is not None: |
272 | 272 | store_path = store_path / path |
273 | 273 | new = await AsyncArray.create( |
@@ -421,7 +421,7 @@ async def group( |
421 | 421 | or _default_zarr_version() |
422 | 422 | ) |
423 | 423 |
|
424 | | - store_path = make_store_path(store) |
| 424 | + store_path = await make_store_path(store) |
425 | 425 | if path is not None: |
426 | 426 | store_path = store_path / path |
427 | 427 |
|
@@ -451,7 +451,7 @@ async def group( |
451 | 451 | async def open_group( |
452 | 452 | *, # Note: this is a change from v2 |
453 | 453 | store: StoreLike | None = None, |
454 | | - mode: OpenMode | None = None, # not used |
| 454 | + mode: AccessModeLiteral | None = None, # not used |
455 | 455 | cache_attrs: bool | None = None, # not used, default changed |
456 | 456 | synchronizer: Any = None, # not used |
457 | 457 | path: str | None = None, |
@@ -512,7 +512,7 @@ async def open_group( |
512 | 512 | if storage_options is not None: |
513 | 513 | warnings.warn("storage_options is not yet implemented", RuntimeWarning, stacklevel=2) |
514 | 514 |
|
515 | | - store_path = make_store_path(store, mode=mode) |
| 515 | + store_path = await make_store_path(store, mode=mode) |
516 | 516 | if path is not None: |
517 | 517 | store_path = store_path / path |
518 | 518 |
|
@@ -682,8 +682,8 @@ async def create( |
682 | 682 | if meta_array is not None: |
683 | 683 | warnings.warn("meta_array is not yet implemented", RuntimeWarning, stacklevel=2) |
684 | 684 |
|
685 | | - mode = cast(OpenMode, "r" if read_only else "w") |
686 | | - store_path = make_store_path(store, mode=mode) |
| 685 | + mode = kwargs.pop("mode", cast(AccessModeLiteral, "r" if read_only else "w")) |
| 686 | + store_path = await make_store_path(store, mode=mode) |
687 | 687 | if path is not None: |
688 | 688 | store_path = store_path / path |
689 | 689 |
|
@@ -854,22 +854,24 @@ async def open_array( |
854 | 854 | The opened array. |
855 | 855 | """ |
856 | 856 |
|
857 | | - store_path = make_store_path(store) |
| 857 | + store_path = await make_store_path(store) |
858 | 858 | if path is not None: |
859 | 859 | store_path = store_path / path |
860 | 860 |
|
861 | 861 | zarr_format = _handle_zarr_version_or_format(zarr_version=zarr_version, zarr_format=zarr_format) |
862 | 862 |
|
863 | 863 | try: |
864 | 864 | return await AsyncArray.open(store_path, zarr_format=zarr_format) |
865 | | - except KeyError as e: |
866 | | - if store_path.store.writeable: |
867 | | - pass |
868 | | - else: |
869 | | - raise e |
870 | | - |
871 | | - # if array was not found, create it |
872 | | - return await create(store=store, path=path, zarr_format=zarr_format, **kwargs) |
| 865 | + except FileNotFoundError as e: |
| 866 | + if store_path.store.mode.create: |
| 867 | + return await create( |
| 868 | + store=store_path, |
| 869 | + path=path, |
| 870 | + zarr_format=zarr_format, |
| 871 | + overwrite=store_path.store.mode.overwrite, |
| 872 | + **kwargs, |
| 873 | + ) |
| 874 | + raise e |
873 | 875 |
|
874 | 876 |
|
875 | 877 | async def open_like(a: ArrayLike, path: str, **kwargs: Any) -> AsyncArray: |
|
0 commit comments