From 15da0bdb4e775dca5acf275969bcec553752673e Mon Sep 17 00:00:00 2001 From: Jay Hutchinson Date: Sat, 4 Sep 2010 18:33:27 -0500 Subject: Fixed a few bugs. --- lru.py | 46 ++++++++++++++++++++++++++++++---------------- 1 file 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 -- cgit v1.2.1