summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Hutchinson <jlhutch@gmail.com>2010-09-04 18:33:27 -0500
committerJay Hutchinson <jlhutch@gmail.com>2010-09-04 18:33:27 -0500
commit15da0bdb4e775dca5acf275969bcec553752673e (patch)
treefedea94590ecd429fa1d79535cee48d8a878bec6
parent66a4373dec1ed3e2f5c903d26a180b0ba8cc058a (diff)
downloadpylru-15da0bdb4e775dca5acf275969bcec553752673e.tar.gz
Fixed a few bugs.
-rw-r--r--lru.py46
1 files changed, 30 insertions, 16 deletions
diff --git a/lru.py b/lru.py
index b55d75d..ee953b7 100644
--- a/lru.py
+++ b/lru.py
@@ -180,15 +180,12 @@ class lrucache(object):
def size(self, size=None):
- if size is None:
- return self.listSize
-
- assert size > 0
-
- if size > self.listSize:
- self.addTailNode(size - self.listSize)
- elif size < self.listSize:
- self.removeTailNode(self.listSize - size)
+ if size is not None:
+ assert size > 0
+ if size > self.listSize:
+ self.addTailNode(size - self.listSize)
+ elif size < self.listSize:
+ self.removeTailNode(self.listSize - size)
return self.listSize
@@ -313,13 +310,30 @@ class lruwrap(object):
self.store[key] = value
def __delitem__(self, key):
- try:
- del self.cache[key]
- if self.writeback:
+ if self.writeback:
+ found = False
+ try:
+ del self.cache[key]
+ found = True
self.dirty.remove(key)
- except KeyError:
- pass
- del self.store[key]
+ except KeyError:
+ pass
+
+ try:
+ del self.store[key]
+ found = True
+ except KeyError:
+ pass
+
+ if not found: # If not found in cache or store, raise error.
+ raise KeyError
+
+ else: # Write-through behavior, cache and store should be consistent
+ del self.store[key]
+ try:
+ del self.cache[key]
+ except KeyError:
+ pass
def sync(self):
@@ -344,7 +358,7 @@ class lrudecorator(object):
def __call__(self, func):
def wrapped(*args): # XXX What about kwargs
try:
- value = self.cache[args]
+ return self.cache[args]
except KeyError:
pass