summaryrefslogtreecommitdiff
path: root/pylru.py
diff options
context:
space:
mode:
Diffstat (limited to 'pylru.py')
-rw-r--r--pylru.py30
1 files changed, 24 insertions, 6 deletions
diff --git a/pylru.py b/pylru.py
index 13aba67..1d77036 100644
--- a/pylru.py
+++ b/pylru.py
@@ -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