[Checkins] SVN: z3c.pt/trunk/ Split out content provider call.

Malthe Borch mborch at gmail.com
Thu Nov 20 19:34:29 EST 2008


Log message for revision 93214:
  Split out content provider call.

Changed:
  U   z3c.pt/trunk/CHANGES.txt
  U   z3c.pt/trunk/src/z3c/pt/expressions.py

-=-
Modified: z3c.pt/trunk/CHANGES.txt
===================================================================
--- z3c.pt/trunk/CHANGES.txt	2008-11-21 00:31:14 UTC (rev 93213)
+++ z3c.pt/trunk/CHANGES.txt	2008-11-21 00:34:29 UTC (rev 93214)
@@ -4,6 +4,9 @@
 Head
 ~~~~
 
+- Split out content provider function call to allow modification
+  through subclassing. [malthe]
+
 - Added language negotiation. [malthe]
 
 - Simplified template class inheritance. [malthe]

Modified: z3c.pt/trunk/src/z3c/pt/expressions.py
===================================================================
--- z3c.pt/trunk/src/z3c/pt/expressions.py	2008-11-21 00:31:14 UTC (rev 93213)
+++ z3c.pt/trunk/src/z3c/pt/expressions.py	2008-11-21 00:34:29 UTC (rev 93214)
@@ -17,16 +17,17 @@
 def identity(x):
     return x
 
-def get_content_provider(context, request, view, name):
-    cp = zope.component.queryMultiAdapter(
-        (context, request, view), IContentProvider, name=name)
+class ContentProviderTraverser(object):
+    def __call__(self, context, request, view, name):
+        cp = zope.component.queryMultiAdapter(
+            (context, request, view), IContentProvider, name=name)
 
-    # provide a useful error message, if the provider was not found.
-    if cp is None:
-        raise ContentProviderLookupError(name)
+        # provide a useful error message, if the provider was not found.
+        if cp is None:
+            raise ContentProviderLookupError(name)
 
-    cp.update()
-    return cp.render()
+        cp.update()
+        return cp.render()
 
 class ZopeTraverser(object):
     def __init__(self, proxify=identity):
@@ -197,6 +198,7 @@
     provider_regex = re.compile(r'^[A-Za-z][A-Za-z0-9_\.-]*$')
     
     symbol = '_get_content_provider'
+    content_provider_traverser = ContentProviderTraverser()
 
     def translate(self, string, escape=None):
         if self.provider_regex.match(string) is None:
@@ -205,7 +207,7 @@
 
         value = types.value("%s(context, request, view, '%s')" % \
                             (self.symbol, string))
-        value.symbol_mapping[self.symbol] = get_content_provider
+        value.symbol_mapping[self.symbol] = self.content_provider_traverser
         return value
 
 class ExistsTranslator(PathTranslator):



More information about the Checkins mailing list