[Checkins] SVN: z3c.pt/trunk/src/z3c/pt/ - Add a failing test for untested behaviour removed by Malthe when merging TALES Function Namespaces support

Sidnei da Silva sidnei at enfoldsystems.com
Mon Mar 2 12:46:13 EST 2009


Log message for revision 97424:
  - Add a failing test for untested behaviour removed by Malthe when merging TALES Function Namespaces support

Changed:
  U   z3c.pt/trunk/src/z3c/pt/README.txt
  U   z3c.pt/trunk/src/z3c/pt/expressions.py
  U   z3c.pt/trunk/src/z3c/pt/tests/function_namespaces.pt

-=-
Modified: z3c.pt/trunk/src/z3c/pt/README.txt
===================================================================
--- z3c.pt/trunk/src/z3c/pt/README.txt	2009-03-02 16:38:27 UTC (rev 97423)
+++ z3c.pt/trunk/src/z3c/pt/README.txt	2009-03-02 17:46:12 UTC (rev 97424)
@@ -336,9 +336,19 @@
   ...     def __init__(self, context):
   ...         self.context = context
   ...     def traverse(self, name, furtherPath):
+  ...         if name == 'page':
+  ...             if len(furtherPath) == 1:
+  ...		      pagetype = furtherPath.pop()
+  ...		  elif not furtherPath:
+  ...                 pagetype = 'default'
+  ...             else:
+  ...                 raise TraversalError("Max 1 path segment after ns4:page")
+  ...             return self.page(pagetype)
   ...         if len(furtherPath) == 1:
   ...              name = '%s/%s' % (name, furtherPath.pop())
   ...         return 'traversed: ' + name
+  ...     def page(self, pagetype):
+  ...         return 'called page: ' + pagetype
 
   >>> zope.component.getGlobalSiteManager().registerAdapter(
   ...     ns4, [zope.interface.Interface], IPathAdapter, 'ns4')

Modified: z3c.pt/trunk/src/z3c/pt/expressions.py
===================================================================
--- z3c.pt/trunk/src/z3c/pt/expressions.py	2009-03-02 16:38:27 UTC (rev 97423)
+++ z3c.pt/trunk/src/z3c/pt/expressions.py	2009-03-02 17:46:12 UTC (rev 97424)
@@ -46,13 +46,16 @@
 
         if bool(path_items):
             path_items = list(path_items)
-            
+
             while len(path_items):
                 name = path_items.pop(0)
                 ns = ':' in name
                 if ns is True:
                     namespace, name = name.split(':', 1)
                     base = namespaces.function_namespaces[namespace](base)
+                # XXX Need to check for ITraversable on 'base' here
+                # and use traversePathElement instead of getattr. See
+                # failing test.
                 next = getattr(base, name, _marker)
                 if next is not _marker:
                     base = next
@@ -74,10 +77,10 @@
             return base()
 
         return base
-    
+
 class ZopeExistsTraverser(ZopeTraverser):
     exceptions = AttributeError, LookupError, TypeError
-    
+
     def __call__(self, base, request, call, *args, **kwargs):
         try:
             return ZopeTraverser.__call__(
@@ -119,7 +122,7 @@
 
         >>> translate("image_path/++res++/@@hello.html")
         value("_path(image_path, request, True, '++res++', '@@hello.html')")
-        
+
         >>> translate("context/@@view")
         value("_path(context, request, True, '@@view')")
 
@@ -135,7 +138,7 @@
 
         if not string:
             return None
-        
+
         if not self.path_regex.match(string.strip()):
             raise SyntaxError("Not a valid path-expression: %s." % string)
 
@@ -181,7 +184,7 @@
                 component = repr(part)
 
             components.append(component)
-            
+
         base = parts[0]
 
         if not components:
@@ -203,17 +206,17 @@
     zope.component.adapts(IExpressionTranslator)
 
     recursive = True
-    
+
     def __init__(self, translator):
         self.translator = translator
 
     def tales(self, string, escape=None):
         """
         >>> tales = NotTranslator(path_translator).tales
-        
+
         >>> tales("abc/def/ghi")
         value("not(_path(abc, request, True, 'def', 'ghi'))")
-        
+
         >>> tales("abc | def")
         parts(value('not(_path(abc, request, True, ))'),
               value('not(_path(def, request, True, ))'))
@@ -231,7 +234,7 @@
         value = self.translator.tales(string, escape=escape)
         if isinstance(value, types.value):
             value = (value,)
-            
+
         parts = []
         for part in value:
             factory = type(part)
@@ -243,10 +246,10 @@
             return parts[0]
 
         return types.parts(parts)
-    
+
 class ProviderTranslator(expressions.ExpressionTranslator):
     provider_regex = re.compile(r'^[A-Za-z][A-Za-z0-9_\.-]*$')
-    
+
     symbol = '_get_content_provider'
     content_provider_traverser = ContentProviderTraverser()
 
@@ -264,14 +267,14 @@
     """Implements string translation expression."""
 
     symbol = '_path_exists'
-    
+
     path_traverse = ZopeExistsTraverser()
 
     def translate(self, *args, **kwargs):
         value = super(ExistsTranslator, self).translate(*args, **kwargs)
         if value is None:
             return
-        
+
         assert isinstance(value, types.value)
         parts = types.parts(
             (value, types.value('False')))

Modified: z3c.pt/trunk/src/z3c/pt/tests/function_namespaces.pt
===================================================================
--- z3c.pt/trunk/src/z3c/pt/tests/function_namespaces.pt	2009-03-02 16:38:27 UTC (rev 97423)
+++ z3c.pt/trunk/src/z3c/pt/tests/function_namespaces.pt	2009-03-02 17:46:12 UTC (rev 97424)
@@ -3,7 +3,9 @@
   <span tal:content="context/ns1:parent/title/ns2:upper" />
   <span tal:content="context/ns1:parent/child/child/date/ns3:fullDateTime" />
   <span tal:content="context/ns4:link:main" />
+  <span tal:content="context/ns4:page" />
   <span tal:content="context/ns4:page/another" />
+  <span tal:content="context/ns4:page/yet/another" />
   <span tal:content="context/ns4:zope.Public" />
   <span tal:content="context/ns4:text-to-html" />
 </div>



More information about the Checkins mailing list