|
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