summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTres Seaver <tseaver@palladion.com>2012-07-05 09:30:56 -0400
committerTres Seaver <tseaver@palladion.com>2012-07-05 09:30:56 -0400
commited1070a070014ab94d2935b59ed0bfcdb2db516d (patch)
tree4f6cf7a606a42b5328d62e6c70e0c12712b8c315
parent62e76828195486bb040866618decfe2622923fe6 (diff)
downloadrepoze-lru-ed1070a070014ab94d2935b59ed0bfcdb2db516d.tar.gz
Allow 'clear' to take multiple names.
-rw-r--r--repoze/lru/__init__.py16
-rw-r--r--repoze/lru/tests.py17
2 files changed, 24 insertions, 9 deletions
diff --git a/repoze/lru/__init__.py b/repoze/lru/__init__.py
index 7426d3b..8ac2415 100644
--- a/repoze/lru/__init__.py
+++ b/repoze/lru/__init__.py
@@ -358,15 +358,13 @@ class CacheMaker(object):
cache = self._cache[name] = ExpiringLRUCache(maxsize, timeout)
return lru_cache(maxsize, cache, timeout)
- def clear(self, name=None):
- """Clear the given cache.
+ def clear(self, *names):
+ """Clear the given cache(s).
- If 'name' is not passed, clear all caches.
+ If no 'names' are passed, clear all caches.
"""
- if name is None:
- to_clear = self._cache.keys()
- else:
- to_clear = [name]
+ if len(names) == 0:
+ names = self._cache.keys()
- for cache_name in to_clear:
- self._cache[cache_name].clear()
+ for name in names:
+ self._cache[name].clear()
diff --git a/repoze/lru/tests.py b/repoze/lru/tests.py
index 611c0d4..89dd22d 100644
--- a/repoze/lru/tests.py
+++ b/repoze/lru/tests.py
@@ -627,6 +627,23 @@ class CacherMaker(unittest.TestCase):
self.assertEqual(len(maker._cache['one'].data), 0)
self.assertEqual(len(maker._cache['two'].data), 10)
+ def test_clear_with_multiple_names(self):
+ maker = self._makeOne(maxsize=10)
+ one = maker.lrucache(name='one')(_adder)
+ two = maker.lrucache(name='two')(_adder)
+ three = maker.lrucache(name='three')(_adder)
+ for i in range(100):
+ _ = one(i)
+ _ = two(i)
+ _ = three(i)
+ self.assertEqual(len(maker._cache['one'].data), 10)
+ self.assertEqual(len(maker._cache['two'].data), 10)
+ self.assertEqual(len(maker._cache['three'].data), 10)
+ maker.clear('one', 'three')
+ self.assertEqual(len(maker._cache['one'].data), 0)
+ self.assertEqual(len(maker._cache['two'].data), 10)
+ self.assertEqual(len(maker._cache['three'].data), 0)
+
def test_expiring(self):
size = 10
timeout = 10