diff options
author | Thomas Kemmer <tkemmer@computer.org> | 2020-12-09 22:01:33 +0100 |
---|---|---|
committer | Thomas Kemmer <tkemmer@computer.org> | 2020-12-09 23:38:17 +0100 |
commit | e07d8ecb3b346ae90940e531d9ddc1565da72cd2 (patch) | |
tree | 5ae2810d63d6d064cfab96d56018d6768302447d | |
parent | c9958d9de98458d9a95e441d22b92ee608dbd552 (diff) | |
download | cachetools-e07d8ecb3b346ae90940e531d9ddc1565da72cd2.tar.gz |
Homogenize cache implementations.
-rw-r--r-- | cachetools/lfu.py | 3 | ||||
-rw-r--r-- | cachetools/lru.py | 3 | ||||
-rw-r--r-- | cachetools/mru.py | 25 | ||||
-rw-r--r-- | cachetools/rr.py | 3 | ||||
-rw-r--r-- | cachetools/ttl.py | 3 |
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)) |