Skip to content

Commit

Permalink
BREAK: sync Cache.__delitem__() to raise KeyError, resolves #67 💥
Browse files Browse the repository at this point in the history
  • Loading branch information
eigenein committed Sep 1, 2023
1 parent 8d5d4bf commit b50229a
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 21 deletions.
9 changes: 4 additions & 5 deletions cachetory/caches/sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
14 changes: 7 additions & 7 deletions tests/caches/test_async.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,39 +15,39 @@ 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")
assert await memory_cache.get("foo") is None


@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://"),
Expand All @@ -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"),
Expand Down
23 changes: 14 additions & 9 deletions tests/caches/test_sync.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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"),
Expand Down

0 comments on commit b50229a

Please sign in to comment.