[Checkins] SVN: z3c.caching/trunk/src/z3c/caching/ Add a means of enumerating the rule set ids
Martin Aspeli
optilude at gmx.net
Wed Dec 30 22:10:01 EST 2009
Log message for revision 107424:
Add a means of enumerating the rule set ids
Changed:
U z3c.caching/trunk/src/z3c/caching/interfaces.py
U z3c.caching/trunk/src/z3c/caching/registry.py
U z3c.caching/trunk/src/z3c/caching/tests/test_registry.py
-=-
Modified: z3c.caching/trunk/src/z3c/caching/interfaces.py
===================================================================
--- z3c.caching/trunk/src/z3c/caching/interfaces.py 2009-12-31 02:44:28 UTC (rev 107423)
+++ z3c.caching/trunk/src/z3c/caching/interfaces.py 2009-12-31 03:09:59 UTC (rev 107424)
@@ -16,12 +16,18 @@
def unregister(obj):
"""Remove any prior rule registration attached to obj in this
registry. N.B. registries are hierarchical, a parent may still
- provide rules."""
+ provide rules.
+ """
def clear():
- """Remove all rule registrations in this registry."""
+ """Remove all rule registrations in this registry.
+ """
def lookup(obj):
"""Return the id of the rule associated with `obj`. If no rule has
been registered `None` is returned.
- """
\ No newline at end of file
+ """
+
+ def enumerate():
+ """Return a sequence of all unique registered rule set ids (strings)
+ """
Modified: z3c.caching/trunk/src/z3c/caching/registry.py
===================================================================
--- z3c.caching/trunk/src/z3c/caching/registry.py 2009-12-31 02:44:28 UTC (rev 107423)
+++ z3c.caching/trunk/src/z3c/caching/registry.py 2009-12-31 03:09:59 UTC (rev 107424)
@@ -25,6 +25,7 @@
but only returns the pre-specified cache rule."""
def CacheRuleFactory(context):
return CacheRule(rule)
+ CacheRuleFactory.id = rule
return CacheRuleFactory
class RulesetRegistry(object):
@@ -41,7 +42,7 @@
factory = get_context_to_cacherule_adapter_factory(rule)
existing = self.directLookup(obj)
if existing is None:
- # Only register if we haven't got thisw one already
+ # Only register if we haven't got this one already
self.registry.registerAdapter(factory, provided=ICacheRule, required=(obj,))
else:
warnings.warn("Ignoring attempted to register caching rule %s for %s. %s is already registered." % (rule, `obj`, existing))
@@ -70,7 +71,16 @@
if ruler is not None:
return ruler.id
return None
-
+
+ def enumerate(self):
+ seen = set()
+ for reg in self.registry.registeredAdapters():
+ if reg.provided != ICacheRule:
+ continue
+ if reg.factory.id not in seen:
+ yield reg.factory.id
+ seen.add(reg.factory.id)
+
def directLookup(self, obj):
"""Find a rule _directly_ assigned to `obj`"""
for rule in self.registry.registeredAdapters():
@@ -80,7 +90,6 @@
return rule.factory(None).id
return None
-
__getitem__ = lookup
# Set up RulesetRegistry as an adapter for component roots
Modified: z3c.caching/trunk/src/z3c/caching/tests/test_registry.py
===================================================================
--- z3c.caching/trunk/src/z3c/caching/tests/test_registry.py 2009-12-31 02:44:28 UTC (rev 107423)
+++ z3c.caching/trunk/src/z3c/caching/tests/test_registry.py 2009-12-31 03:09:59 UTC (rev 107424)
@@ -96,6 +96,15 @@
self.registry.clear()
self.failUnless(self.registry[i] is None)
+ def test_enumerate(self):
+ self.registry.register(ITestView, "rule1")
+ self.registry.register(IMoreSpecificTestView, "rule2")
+ self.registry.register(OtherTestView, "rule2")
+ self.assertEqual(set(['rule1', 'rule2']), set(self.registry.enumerate()))
+
+ def test_enumerate_empty(self):
+ self.assertEqual(set([]), set(self.registry.enumerate()))
+
def test_suite():
import unittest
return unittest.defaultTestLoader.loadTestsFromName(__name__)
More information about the checkins
mailing list