[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