aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Kemmer <tkemmer@computer.org>2020-12-09 22:01:33 +0100
committerThomas Kemmer <tkemmer@computer.org>2020-12-09 23:38:17 +0100
commite07d8ecb3b346ae90940e531d9ddc1565da72cd2 (patch)
tree5ae2810d63d6d064cfab96d56018d6768302447d
parentc9958d9de98458d9a95e441d22b92ee608dbd552 (diff)
downloadcachetools-e07d8ecb3b346ae90940e531d9ddc1565da72cd2.tar.gz
Homogenize cache implementations.
-rw-r--r--cachetools/lfu.py3
-rw-r--r--cachetools/lru.py3
-rw-r--r--cachetools/mru.py25
-rw-r--r--cachetools/rr.py3
-rw-r--r--cachetools/ttl.py3
5 files changed, 17 insertions, 20 deletions
diff --git a/cachetools/lfu.py b/cachetools/lfu.py
index adb45ee..17c2b9d 100644
--- a/cachetools/lfu.py
+++ b/cachetools/lfu.py
@@ -28,7 +28,6 @@ class LFUCache(Cache):
try:
(key, _), = self.__counter.most_common(1)
except ValueError:
- msg = '%s is empty' % self.__class__.__name__
- raise KeyError(msg) from None
+ raise KeyError('%s is empty' % type(self).__name__) from None
else:
return (key, self.pop(key))
diff --git a/cachetools/lru.py b/cachetools/lru.py
index 7634f9c..2508e5d 100644
--- a/cachetools/lru.py
+++ b/cachetools/lru.py
@@ -28,8 +28,7 @@ class LRUCache(Cache):
try:
key = next(iter(self.__order))
except StopIteration:
- msg = '%s is empty' % self.__class__.__name__
- raise KeyError(msg) from None
+ raise KeyError('%s is empty' % type(self).__name__) from None
else:
return (key, self.pop(key))
diff --git a/cachetools/mru.py b/cachetools/mru.py
index 62cc9c0..92b8e76 100644
--- a/cachetools/mru.py
+++ b/cachetools/mru.py
@@ -7,29 +7,30 @@ class MRUCache(Cache):
"""Most Recently Used (MRU) cache implementation."""
def __init__(self, maxsize, getsizeof=None):
- super().__init__(maxsize, getsizeof)
+ Cache.__init__(self, maxsize, getsizeof)
self.__order = collections.OrderedDict()
- def __getitem__(self, key):
- value = super().__getitem__(key)
+ def __getitem__(self, key, cache_getitem=Cache.__getitem__):
+ value = cache_getitem(self, key)
self.__update(key)
return value
- def __setitem__(self, key, value):
- super().__setitem__(key, value)
+ def __setitem__(self, key, value, cache_setitem=Cache.__setitem__):
+ cache_setitem(self, key, value)
self.__update(key)
- def __delitem__(self, key):
- super().__delitem__(key)
+ def __delitem__(self, key, cache_delitem=Cache.__delitem__):
+ cache_delitem(self, key)
del self.__order[key]
def popitem(self):
"""Remove and return the `(key, value)` pair most recently used."""
- if not self.__order:
- raise KeyError(type(self).__name__ + ' cache is empty') from None
-
- key = next(iter(self.__order))
- return (key, self.pop(key))
+ try:
+ key = next(iter(self.__order))
+ except StopIteration:
+ raise KeyError('%s is empty' % type(self).__name__) from None
+ else:
+ return (key, self.pop(key))
def __update(self, key):
try:
diff --git a/cachetools/rr.py b/cachetools/rr.py
index 30f3822..5b47e87 100644
--- a/cachetools/rr.py
+++ b/cachetools/rr.py
@@ -29,7 +29,6 @@ class RRCache(Cache):
try:
key = self.__choice(list(self))
except IndexError:
- msg = '%s is empty' % self.__class__.__name__
- raise KeyError(msg) from None
+ raise KeyError('%s is empty' % type(self).__name__) from None
else:
return (key, self.pop(key))
diff --git a/cachetools/ttl.py b/cachetools/ttl.py
index 7822e8b..528a085 100644
--- a/cachetools/ttl.py
+++ b/cachetools/ttl.py
@@ -198,8 +198,7 @@ class TTLCache(Cache):
try:
key = next(iter(self.__links))
except StopIteration:
- msg = '%s is empty' % self.__class__.__name__
- raise KeyError(msg) from None
+ raise KeyError('%s is empty' % type(self).__name__) from None
else:
return (key, self.pop(key))