diff options
Diffstat (limited to 'pylru.py')
-rw-r--r-- | pylru.py | 30 |
1 files changed, 24 insertions, 6 deletions
@@ -101,8 +101,10 @@ class lrucache(object): def get(self, key, default=None): """Get an item - return default (None) if not present""" - try: return self[key] - except KeyError: return default + try: + return self[key] + except KeyError: + return default def __setitem__(self, key, value): # First, see if any value is stored under 'key' in the cache already. @@ -327,6 +329,13 @@ class WriteThroughCacheManager(object): self.cache[key] = value return value + def get(self, key, default=None): + """Get an item - return default (None) if not present""" + try: + return self[key] + except KeyError: + return default + def __setitem__(self, key, value): # Add the key/value pair to the cache and store. self.cache[key] = value @@ -412,6 +421,13 @@ class WriteBackCacheManager(object): self.cache[key] = value return value + def get(self, key, default=None): + """Get an item - return default (None) if not present""" + try: + return self[key] + except KeyError: + return default + def __setitem__(self, key, value): # Add the key/value pair to the cache. self.cache[key] = value @@ -502,13 +518,15 @@ class lrudecorator(object): self.cache = lrucache(size) def __call__(self, func): - def wrapped(*args): # XXX What about kwargs + def wrapped(*args, **kwargs): + kwtuple = tuple((key, kwargs[key]) for key in sorted(kwargs.keys())) + key = (args, kwtuple) try: - return self.cache[args] + return self.cache[key] except KeyError: pass - value = func(*args) - self.cache[args] = value + value = func(*args, **kwargs) + self.cache[key] = value return value return wrapped |