diff --git a/src/zarr/store/core.py b/src/zarr/store/core.py index 512c8383eb..caa30d6997 100644 --- a/src/zarr/store/core.py +++ b/src/zarr/store/core.py @@ -79,6 +79,8 @@ def make_store_path(store_like: StoreLike | None, *, mode: OpenMode | None = Non if mode is None: mode = "w" # exception to the default mode = 'r' return StorePath(MemoryStore(mode=mode)) + elif isinstance(store_like, Path): + return StorePath(LocalStore(store_like, mode=mode or "r")) elif isinstance(store_like, str): return StorePath(LocalStore(Path(store_like), mode=mode or "r")) raise TypeError diff --git a/tests/v3/test_store/test_core.py b/tests/v3/test_store/test_core.py new file mode 100644 index 0000000000..b573b0fef5 --- /dev/null +++ b/tests/v3/test_store/test_core.py @@ -0,0 +1,36 @@ +from pathlib import Path + +import pytest + +from zarr.store.core import make_store_path +from zarr.store.local import LocalStore +from zarr.store.memory import MemoryStore + + +def test_make_store_path(tmpdir) -> None: + # None + store_path = make_store_path(None) + assert isinstance(store_path.store, MemoryStore) + + # str + store_path = make_store_path(str(tmpdir)) + assert isinstance(store_path.store, LocalStore) + assert Path(store_path.store.root) == Path(tmpdir) + + # Path + store_path = make_store_path(Path(tmpdir)) + assert isinstance(store_path.store, LocalStore) + assert Path(store_path.store.root) == Path(tmpdir) + + # Store + store_path = make_store_path(store_path.store) + assert isinstance(store_path.store, LocalStore) + assert Path(store_path.store.root) == Path(tmpdir) + + # StorePath + store_path = make_store_path(store_path) + assert isinstance(store_path.store, LocalStore) + assert Path(store_path.store.root) == Path(tmpdir) + + with pytest.raises(TypeError): + make_store_path(1)