diff --git a/cachetory/caches/sync.py b/cachetory/caches/sync.py index 8674d81..0232976 100644 --- a/cachetory/caches/sync.py +++ b/cachetory/caches/sync.py @@ -138,12 +138,11 @@ def __delitem__(self, key: str) -> None: """ Delete the cache item. - Warning: - This method **does not** currently adhere to the `object.__delitem__()` interface - in regard to the raised exceptions: `KeyError` **is not** raised when the key is missing. - See also [kpn/cachetory#67](https://github.com/kpn/cachetory/issues/67). + Raises: + KeyError: the key didn't exist """ - self.delete(key) + if not self.delete(key): + raise KeyError(key) def __exit__(self, exc_type, exc_val, exc_tb) -> None: return self._backend.__exit__(exc_type, exc_val, exc_tb) diff --git a/tests/caches/test_async.py b/tests/caches/test_async.py index 01fd8e4..2a07947 100644 --- a/tests/caches/test_async.py +++ b/tests/caches/test_async.py @@ -15,31 +15,31 @@ async def memory_cache() -> Cache[int, bytes]: @mark.asyncio -async def test_get_set_in_memory(memory_cache: Cache[int, bytes]): +async def test_get_set_in_memory(memory_cache: Cache[int, bytes]) -> None: await memory_cache.set("foo", 42) assert await memory_cache.get("foo") == 42 @mark.asyncio -async def test_get_default(memory_cache: Cache[int, bytes]): +async def test_get_default(memory_cache: Cache[int, bytes]) -> None: assert await memory_cache.get("missing", 100500) == 100500 @mark.asyncio -async def test_get_many(memory_cache: Cache[int, bytes]): +async def test_get_many(memory_cache: Cache[int, bytes]) -> None: await memory_cache.set("foo", 42) assert await memory_cache.get_many("foo", "bar") == {"foo": 42} @mark.asyncio -async def test_set_many(memory_cache: Cache[int, bytes]): +async def test_set_many(memory_cache: Cache[int, bytes]) -> None: await memory_cache.set_many({"foo": 42, "bar": 100500}) assert await memory_cache.get("foo") == 42 assert await memory_cache.get("bar") == 100500 @mark.asyncio -async def test_delete(memory_cache: Cache[int, bytes]): +async def test_delete(memory_cache: Cache[int, bytes]) -> None: await memory_cache.set("foo", 42) assert await memory_cache.delete("foo") assert not await memory_cache.delete("foo") @@ -47,7 +47,7 @@ async def test_delete(memory_cache: Cache[int, bytes]): @mark.asyncio -async def test_serialize_executor(): +async def test_serialize_executor() -> None: cache = Cache[int, bytes]( serializer=serializers.from_url("pickle://"), backend=async_backends.from_url("memory://"), @@ -59,7 +59,7 @@ async def test_serialize_executor(): @if_redis_enabled @mark.asyncio -async def test_get_set_in_redis(): +async def test_get_set_in_redis() -> None: cache = Cache[int, bytes]( serializer=serializers.from_url("pickle+zlib://"), backend=async_backends.from_url("redis://localhost:6379"), diff --git a/tests/caches/test_sync.py b/tests/caches/test_sync.py index bf0428b..589db41 100644 --- a/tests/caches/test_sync.py +++ b/tests/caches/test_sync.py @@ -1,4 +1,4 @@ -from pytest import fixture +from pytest import fixture, raises from cachetory import serializers from cachetory.backends import sync as sync_backends @@ -14,46 +14,51 @@ def memory_cache() -> Cache[int, bytes]: ) -def test_get_set_in_memory(memory_cache: Cache[int, bytes]): +def test_get_set_in_memory(memory_cache: Cache[int, bytes]) -> None: memory_cache.set("foo", 42) assert memory_cache.get("foo") == 42 -def test_set_item(memory_cache: Cache[int, bytes]): +def test_set_item(memory_cache: Cache[int, bytes]) -> None: memory_cache["foo"] = 42 assert memory_cache.get("foo") == 42 -def test_get_default(memory_cache: Cache[int, bytes]): +def test_get_default(memory_cache: Cache[int, bytes]) -> None: assert memory_cache.get("missing", 100500) == 100500 -def test_get_many(memory_cache: Cache[int, bytes]): +def test_get_many(memory_cache: Cache[int, bytes]) -> None: memory_cache.set("foo", 42) assert memory_cache.get_many("foo", "bar") == {"foo": 42} -def test_set_many(memory_cache: Cache[int, bytes]): +def test_set_many(memory_cache: Cache[int, bytes]) -> None: memory_cache.set_many({"foo": 42, "bar": 100500}) assert memory_cache.get("foo") == 42 assert memory_cache.get("bar") == 100500 -def test_delete(memory_cache: Cache[int, bytes]): +def test_delete(memory_cache: Cache[int, bytes]) -> None: memory_cache.set("foo", 42) assert memory_cache.delete("foo") assert not memory_cache.delete("foo") assert memory_cache.get("foo") is None -def test_del_item(memory_cache: Cache[int, bytes]): +def test_del_item(memory_cache: Cache[int, bytes]) -> None: memory_cache.set("foo", 42) del memory_cache["foo"] assert memory_cache.get("foo") is None +def test_del_missing_item(memory_cache: Cache[int, bytes]) -> None: + with raises(KeyError): + del memory_cache["missing"] + + @if_redis_enabled -def test_get_set_in_redis(): +def test_get_set_in_redis() -> None: cache = Cache[int, bytes]( serializer=serializers.from_url("pickle+zlib://"), backend=sync_backends.from_url("redis://localhost:6379"),