diff options
author | Jay Hutchinson <jlhutch@gmail.com> | 2010-09-04 18:33:27 -0500 |
---|---|---|
committer | Jay Hutchinson <jlhutch@gmail.com> | 2010-09-04 18:33:27 -0500 |
commit | 15da0bdb4e775dca5acf275969bcec553752673e (patch) | |
tree | fedea94590ecd429fa1d79535cee48d8a878bec6 | |
parent | 66a4373dec1ed3e2f5c903d26a180b0ba8cc058a (diff) | |
download | pylru-15da0bdb4e775dca5acf275969bcec553752673e.tar.gz |
Fixed a few bugs.
-rw-r--r-- | lru.py | 46 |
1 files changed, 30 insertions, 16 deletions
@@ -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 |