index 105da31c1fbcfe5663484e790e62a1bb80a2f453..054e29344b2793c1c1b79997ed48aee1eb816282 100644 (file)
Page Template-specific implementation of TALES, with handlers
for Python expressions, string literals, and paths.
+
+
+Modified for Roundup 0.5 release:
+
+- Removed all Zope-specific code (doesn't even try to import that stuff now)
+- Removed all Acquisition
+- Made traceback info more informative
+
"""
-__version__='$Revision: 1.1 $'[11:-2]
+__version__='$Revision: 1.6 $'[11:-2]
import re, sys
from TALES import Engine, CompilerError, _valid_name, NAME_RE, \
# If the value isn't a string, assume it's a sequence
# of path names.
path[i:i+1] = list(val)
- __traceback_info__ = base = self._base
+ base = self._base
+ __traceback_info__ = 'path expression "%s"'%('/'.join(self._path))
if base == 'CONTEXTS':
ob = econtext.contexts
else:
def __repr__(self):
return 'defer:%s' % `self._s`
+class TraversalError:
+ def __init__(self, path, name):
+ self.path = path
+ self.name = name
def restrictedTraverse(self, path, securityManager,
get=getattr, has=hasattr, N=None, M=[],
path.reverse()
object = self
#print 'TRAVERSE', (object, path)
+ done = []
while path:
- __traceback_info__ = REQUEST
name = path.pop()
+ __traceback_info__ = TraversalError(done, name)
if isinstance(name, TupleType):
object = apply(object, name)
continue
- if name[0] == '_':
- # Never allowed in a URL.
- raise AttributeError, name
+# if name[0] == '_':
+# # Never allowed in a URL.
+# raise AttributeError, name
# Try an attribute.
o = get(object, name, M)
raise
#print '... object is now', `o`
object = o
+ done.append((name, o))
return object