diff --git a/py_hamt/ipfszarr3.py b/py_hamt/ipfszarr3.py index 92c198a..2480d8e 100644 --- a/py_hamt/ipfszarr3.py +++ b/py_hamt/ipfszarr3.py @@ -115,7 +115,12 @@ def supports_deletes(self) -> bool: return not self.hamt.read_only async def delete(self, key: str) -> None: - del self.hamt[key] + try: + del self.hamt[key] + # It's fine if the key was not in the HAMT + # Sometimes zarr v3 calls deletes on keys that don't exist (or have already been deleted) for some reason + except KeyError: + return @property def supports_listing(self) -> bool: diff --git a/pyproject.toml b/pyproject.toml index e01fa5c..9ce6ead 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "py-hamt" -version = "2.4.0" +version = "2.4.1" description = "HAMT implementation for an abstract backing store" readme = "README.md" requires-python = ">=3.12" @@ -10,7 +10,7 @@ dependencies = [ "multiformats[full]>=0.3.1.post4", "pycryptodome>=3.21.0", "requests>=2.32.3", - "zarr", + "zarr>=3.0.6", ] [build-system] @@ -28,6 +28,6 @@ dev = [ "snakeviz>=2.2.0", "pandas>=2.2.3", "numpy>=2.1.3", - "xarray>=2025.1.2", "pytest-asyncio>=0.25.3", + "xarray>=2025.3.0", ] diff --git a/tests/test_zarr_ipfs.py b/tests/test_zarr_ipfs.py index aa09b76..91d59ec 100644 --- a/tests/test_zarr_ipfs.py +++ b/tests/test_zarr_ipfs.py @@ -160,6 +160,8 @@ async def test_write_read(random_zarr_dataset: tuple[str, xr.Dataset]): # now remove that metadata file and then add it back ipfszarr3 = IPFSZarr3(ipfszarr3.hamt, read_only=False) # make a writable version await ipfszarr3.delete("zarr.json") + # doing a duplicate delete should not result in an error + await ipfszarr3.delete("zarr.json") ipfszarr3_keys: set[str] = set() async for k in ipfszarr3.list(): ipfszarr3_keys.add(k) @@ -201,7 +203,8 @@ def test_encryption(random_zarr_dataset: tuple[str, xr.Dataset]): ds = xr.open_zarr( store=IPFSZarr3( - HAMT(store=IPFSStore(), root_node_id=hamt.root_node_id, read_only=True) + HAMT(store=IPFSStore(), root_node_id=ipfszarr3.hamt.root_node_id), + read_only=True, ) ) print(ds) diff --git a/uv.lock b/uv.lock index 893deed..4130fd7 100644 --- a/uv.lock +++ b/uv.lock @@ -609,7 +609,7 @@ wheels = [ [[package]] name = "py-hamt" -version = "2.4.0" +version = "2.4.1" source = { editable = "." } dependencies = [ { name = "dag-cbor" }, @@ -642,7 +642,7 @@ requires-dist = [ { name = "multiformats", extras = ["full"], specifier = ">=0.3.1.post4" }, { name = "pycryptodome", specifier = ">=3.21.0" }, { name = "requests", specifier = ">=2.32.3" }, - { name = "zarr" }, + { name = "zarr", specifier = ">=3.0.6" }, ] [package.metadata.requires-dev] @@ -657,7 +657,7 @@ dev = [ { name = "pytest-cov", specifier = ">=6.0.0" }, { name = "ruff", specifier = ">=0.7.1" }, { name = "snakeviz", specifier = ">=2.2.0" }, - { name = "xarray", specifier = ">=2025.1.2" }, + { name = "xarray", specifier = ">=2025.3.0" }, ] [[package]] @@ -1003,21 +1003,21 @@ wheels = [ [[package]] name = "xarray" -version = "2025.1.2" +version = "2025.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "packaging" }, { name = "pandas" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/89/c0/edb2f6cfafa5369106f927409f6211141c3296c14877cc634d8ee4c970a4/xarray-2025.1.2.tar.gz", hash = "sha256:e7675c79ac69d274dd3b3c5450ce57176928d2792947576251ed1c7df1783224", size = 3271214 } +sdist = { url = "https://files.pythonhosted.org/packages/8a/8c/e56820a2c682834d8fb4a940956cd41b9f2532fee9692bfaf43b14f33c6e/xarray-2025.3.0.tar.gz", hash = "sha256:531cf6d64e6ab54c19239930a840654f1a79d2140e9f0d11d1e8d69dcc581d0f", size = 3292399 } wheels = [ - { url = "https://files.pythonhosted.org/packages/05/79/4e19100342fe13d69fd6e77b343e2269924fec681258e2ea21b55576aad2/xarray-2025.1.2-py3-none-any.whl", hash = "sha256:a7ad6a36c6e0becd67f8aff6a7808d20e4bdcd344debb5205f0a34b1a4a7f8d6", size = 1247773 }, + { url = "https://files.pythonhosted.org/packages/91/19/5dbac77ca82f009f8267d0e7cca4fd3be2a435d83ed98f6f8b9c5cb1747e/xarray-2025.3.0-py3-none-any.whl", hash = "sha256:022b7eac5ebc26d70d34211de732ec1a15127a40455f9492acdde7fbe5bbf091", size = 1270849 }, ] [[package]] name = "zarr" -version = "3.0.5" +version = "3.0.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "donfig" }, @@ -1026,7 +1026,7 @@ dependencies = [ { name = "packaging" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0f/27/9969116e77d0ce3996c58630678fa20ff094a1599018ef24006c1df480c0/zarr-3.0.5.tar.gz", hash = "sha256:4ac0a09d66875d398ab53c95fd4bddca2f3d757a04454831fc2d54bfbafcb7e5", size = 240716 } +sdist = { url = "https://files.pythonhosted.org/packages/6f/bf/2820e8ad5f086ea5cd4c4d65eb5e0113f98145ddf5810cec1c75fb10fb98/zarr-3.0.6.tar.gz", hash = "sha256:6ef23c740e34917a2a1099471361537732942e49f0cabe95c9b7124cd0d6d84f", size = 240812 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/2c/1ce2f94d062a9457d980831f60062f274ac3286006c7ef007b9720fa562c/zarr-3.0.5-py3-none-any.whl", hash = "sha256:e56f8cf1f8105a118a9cdadb78f3b44363b9c67f326a569d79271a1f1cb338e1", size = 196354 }, + { url = "https://files.pythonhosted.org/packages/fb/38/56a1c129577d20dc975a934ccc3f7f16276eab04ff0ffbe02ea348407a37/zarr-3.0.6-py3-none-any.whl", hash = "sha256:dba078726b6e4defb0ae6a852b7e7035ce163d89d485961681ece49191dcce82", size = 196357 }, ]