[Zope-Checkins] CVS: Releases/Zope/lib/python/Products/PageTemplates - Expressions.py:1.31 PathIterator.py:1.2

Evan Simpson evan@zope.com
Thu, 13 Dec 2001 15:18:52 -0500


Update of /cvs-repository/Releases/Zope/lib/python/Products/PageTemplates
In directory cvs.zope.org:/tmp/cvs-serv18549

Modified Files:
	Expressions.py PathIterator.py 
Log Message:
Fix first() and last() to work with Zope security, document them.


=== Releases/Zope/lib/python/Products/PageTemplates/Expressions.py 1.30 => 1.31 ===
 
 def restrictedTraverse(self, path, securityManager,
-                       get=getattr, has=hasattr, N=None, M=[]):
+                       get=getattr, has=hasattr, N=None, M=[],
+                       TupleType=type(()) ):
 
     REQUEST = {'path': path}
     REQUEST['TraversalRequestNameStack'] = path = path[:] # Copy!
@@ -289,6 +290,10 @@
     while path:
         __traceback_info__ = REQUEST
         name = path.pop()
+
+        if isinstance(name, TupleType):
+            object = apply(object, name)
+            continue
 
         if name[0] == '_':
             # Never allowed in a URL.


=== Releases/Zope/lib/python/Products/PageTemplates/PathIterator.py 1.1 => 1.2 ===
 import TALES
 from Expressions import restrictedTraverse, Undefs, getSecurityManager
+from string import split
 
 class Iterator(TALES.Iterator):
     def __bobo_traverse__(self, REQUEST, name):
         if name in ('first', 'last'):
             path = REQUEST['TraversalRequestNameStack']
             names = list(path)
-            del path[:]
             names.reverse()
-            return getattr(self, name)(names)
+            path[:] = [tuple(names)]
         return getattr(self, name)
-            
+
     def same_part(self, name, ob1, ob2):
         if name is None:
             return ob1 == ob2