[Checkins] SVN: z3c.caching/trunk/src/z3c/caching/registry.py Move adapter factory factory to a module-level closure, rather than hidden away in the register function

Matthew Wilkes matthew at matthewwilkes.co.uk
Mon Dec 28 13:16:48 EST 2009


Log message for revision 107224:
  Move adapter factory factory to a module-level closure, rather than hidden away in the register function

Changed:
  U   z3c.caching/trunk/src/z3c/caching/registry.py

-=-
Modified: z3c.caching/trunk/src/z3c/caching/registry.py
===================================================================
--- z3c.caching/trunk/src/z3c/caching/registry.py	2009-12-28 18:08:08 UTC (rev 107223)
+++ z3c.caching/trunk/src/z3c/caching/registry.py	2009-12-28 18:16:47 UTC (rev 107224)
@@ -20,6 +20,13 @@
     def __init__(self, identifier):
         self.id = identifier
 
+def get_context_to_cacherule_adapter_factory(rule):
+    """Given a cache rule return an adapter factory which expects an object 
+    but only returns the pre-specified cache rule."""
+    def CacheRuleFactory(context):
+        return CacheRule(rule)
+    return CacheRuleFactory
+
 class RulesetRegistry(object):
 
     implements(IRulesetRegistry)
@@ -29,7 +36,7 @@
         self.registry = registry
 
     def register(self, obj, rule):
-        factory = lambda context: CacheRule(rule)
+        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
@@ -66,7 +73,7 @@
         """Find a rule _directly_ assigned to `obj`"""
         for rule in self.registry.registeredAdapters():
             if rule.provided != ICacheRule:
-                pass
+                continue
             if rule.required == (obj, ):
                 return rule.factory(None).id
         return None



More information about the checkins mailing list