aboutsummaryrefslogtreecommitdiffstats
path: root/botcore/utils/caching.py
diff options
context:
space:
mode:
Diffstat (limited to 'botcore/utils/caching.py')
-rw-r--r--botcore/utils/caching.py65
1 files changed, 0 insertions, 65 deletions
diff --git a/botcore/utils/caching.py b/botcore/utils/caching.py
deleted file mode 100644
index ac34bb9b..00000000
--- a/botcore/utils/caching.py
+++ /dev/null
@@ -1,65 +0,0 @@
-"""Utilities related to custom caches."""
-
-import functools
-import typing
-from collections import OrderedDict
-
-
-class AsyncCache:
- """
- LRU cache implementation for coroutines.
-
- Once the cache exceeds the maximum size, keys are deleted in FIFO order.
-
- An offset may be optionally provided to be applied to the coroutine's arguments when creating the cache key.
- """
-
- def __init__(self, max_size: int = 128):
- """
- Initialise a new :obj:`AsyncCache` instance.
-
- Args:
- max_size: How many items to store in the cache.
- """
- self._cache = OrderedDict()
- self._max_size = max_size
-
- def __call__(self, arg_offset: int = 0) -> typing.Callable:
- """
- Decorator for async cache.
-
- Args:
- arg_offset: The offset for the position of the key argument.
-
- Returns:
- A decorator to wrap the target function.
- """
-
- def decorator(function: typing.Callable) -> typing.Callable:
- """
- Define the async cache decorator.
-
- Args:
- function: The function to wrap.
-
- Returns:
- The wrapped function.
- """
-
- @functools.wraps(function)
- async def wrapper(*args) -> typing.Any:
- """Decorator wrapper for the caching logic."""
- key = args[arg_offset:]
-
- if key not in self._cache:
- if len(self._cache) > self._max_size:
- self._cache.popitem(last=False)
-
- self._cache[key] = await function(*args)
- return self._cache[key]
- return wrapper
- return decorator
-
- def clear(self) -> None:
- """Clear cache instance."""
- self._cache.clear()