Skip to content

Commit a52d05f

Browse files
docs: update README and tests to include examples for cache_contains method
1 parent 08f54ed commit a52d05f

2 files changed

Lines changed: 30 additions & 10 deletions

File tree

README.rst

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,23 @@ The library supports explicit invalidation for specific function call by
104104
The method returns `True` if corresponding arguments set was cached already, `False`
105105
otherwise.
106106

107+
To check whether a specific set of arguments is present in the cache without
108+
affecting hit/miss counters or LRU ordering, use `cache_contains()`:
109+
110+
.. code-block:: python
111+
112+
@alru_cache(maxsize=32)
113+
async def func(arg1, arg2):
114+
return arg1 + arg2
115+
116+
await func(1, arg2=2)
117+
118+
func.cache_contains(1, arg2=2) # True
119+
func.cache_contains(3, arg2=4) # False
120+
121+
The method returns `True` if the result for the given arguments is cached, `False`
122+
otherwise.
123+
107124
Limitations
108125
-----------
109126

tests/test_cache_contains.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import asyncio
2+
from typing import Callable
3+
24
from async_lru import alru_cache
35

46

5-
async def test_cache_contains_basic(check_lru):
7+
async def test_cache_contains_basic(check_lru: Callable[..., None]) -> None:
68
@alru_cache(maxsize=4)
79
async def coro(val):
810
return val
@@ -14,7 +16,9 @@ async def coro(val):
1416
check_lru(coro, hits=0, misses=1, cache=1, tasks=0, maxsize=4)
1517

1618

17-
async def test_cache_contains_does_not_affect_counters(check_lru):
19+
async def test_cache_contains_does_not_affect_counters(
20+
check_lru: Callable[..., None],
21+
) -> None:
1822
@alru_cache(maxsize=4)
1923
async def coro(val):
2024
return val
@@ -28,7 +32,7 @@ async def coro(val):
2832
check_lru(coro, hits=0, misses=1, cache=1, tasks=0, maxsize=4)
2933

3034

31-
async def test_cache_contains_does_not_change_lru_order():
35+
async def test_cache_contains_does_not_change_lru_order() -> None:
3236
@alru_cache(maxsize=2)
3337
async def coro(val):
3438
return val
@@ -47,7 +51,7 @@ async def coro(val):
4751
assert coro.cache_contains(3) is True
4852

4953

50-
async def test_cache_contains_after_invalidate_and_clear():
54+
async def test_cache_contains_after_invalidate_and_clear() -> None:
5155
@alru_cache(maxsize=4)
5256
async def coro(val):
5357
return val
@@ -63,7 +67,7 @@ async def coro(val):
6367
assert coro.cache_contains(2) is False
6468

6569

66-
async def test_cache_contains_with_kwargs():
70+
async def test_cache_contains_with_kwargs() -> None:
6771
@alru_cache(maxsize=4)
6872
async def coro(a, b=10):
6973
return a + b
@@ -74,8 +78,7 @@ async def coro(a, b=10):
7478
assert coro.cache_contains(1) is False
7579

7680

77-
async def test_cache_contains_respects_typed_flag():
78-
81+
async def test_cache_contains_respects_typed_flag() -> None:
7982
@alru_cache(maxsize=4, typed=True)
8083
async def coro(val):
8184
return val
@@ -85,7 +88,7 @@ async def coro(val):
8588
assert coro.cache_contains(1.0) is False
8689

8790

88-
async def test_cache_contains_pending_task():
91+
async def test_cache_contains_pending_task() -> None:
8992
event = asyncio.Event()
9093

9194
@alru_cache(maxsize=4)
@@ -103,7 +106,7 @@ async def coro(val):
103106
await task
104107

105108

106-
async def test_cache_contains_after_ttl_expiry():
109+
async def test_cache_contains_after_ttl_expiry() -> None:
107110
@alru_cache(maxsize=4, ttl=0.05)
108111
async def coro(val):
109112
return val
@@ -115,7 +118,7 @@ async def coro(val):
115118
assert coro.cache_contains(1) is False
116119

117120

118-
async def test_cache_contains_on_method():
121+
async def test_cache_contains_on_method() -> None:
119122
class MyService:
120123
@alru_cache(maxsize=4)
121124
async def fetch(self, key):

0 commit comments

Comments
 (0)