From f92dbbf7fcc669589cce23cc41651ca2ee42e0bc Mon Sep 17 00:00:00 2001 From: Tom Augspurger Date: Mon, 9 Sep 2024 09:24:34 -0500 Subject: [PATCH 1/2] Ensure that store_dict used for empty dicts The `store_dict or {}` is Falsey for empty dicts, so the user provided dict wasn't being used. --- src/zarr/store/memory.py | 4 +++- tests/v3/test_store/test_memory.py | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/zarr/store/memory.py b/src/zarr/store/memory.py index e0e72b1827..4f2627bf67 100644 --- a/src/zarr/store/memory.py +++ b/src/zarr/store/memory.py @@ -30,7 +30,9 @@ def __init__( mode: AccessModeLiteral = "r", ): super().__init__(mode=mode) - self._store_dict = store_dict or {} + if store_dict is None: + store_dict = {} + self._store_dict = store_dict async def empty(self) -> bool: return not self._store_dict diff --git a/tests/v3/test_store/test_memory.py b/tests/v3/test_store/test_memory.py index f76423c631..ea988ec49d 100644 --- a/tests/v3/test_store/test_memory.py +++ b/tests/v3/test_store/test_memory.py @@ -77,3 +77,9 @@ def test_store_supports_partial_writes(self, store: GpuMemoryStore) -> None: def test_list_prefix(self, store: GpuMemoryStore) -> None: assert True + + +def test_uses_dict(): + store_dict = {} + store = MemoryStore(store_dict) + assert store._store_dict is store_dict From 2043422c6f8cbcf9cf6b3f3fda3c909f10ff6e72 Mon Sep 17 00:00:00 2001 From: Tom Augspurger Date: Mon, 9 Sep 2024 10:33:35 -0500 Subject: [PATCH 2/2] fixup --- tests/v3/test_store/test_memory.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/v3/test_store/test_memory.py b/tests/v3/test_store/test_memory.py index ea988ec49d..e64f93ad95 100644 --- a/tests/v3/test_store/test_memory.py +++ b/tests/v3/test_store/test_memory.py @@ -18,11 +18,14 @@ def set(self, store: MemoryStore, key: str, value: Buffer) -> None: def get(self, store: MemoryStore, key: str) -> Buffer: return store._store_dict[key] - @pytest.fixture(scope="function", params=[None, {}]) + @pytest.fixture(scope="function", params=[None, True]) def store_kwargs( self, request: pytest.FixtureRequest ) -> dict[str, str | None | dict[str, Buffer]]: - return {"store_dict": request.param, "mode": "r+"} + kwargs = {"store_dict": None, "mode": "r+"} + if request.param is True: + kwargs["store_dict"] = {} + return kwargs @pytest.fixture(scope="function") def store(self, store_kwargs: str | None | dict[str, Buffer]) -> MemoryStore: