Mercurial > p > roundup > code
diff roundup/cgi/PageTemplates/PathIterator.py @ 1049:b9988e118055
moved
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Thu, 05 Sep 2002 00:37:09 +0000 |
| parents | |
| children | fc52d57c6c3e |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/roundup/cgi/PageTemplates/PathIterator.py Thu Sep 05 00:37:09 2002 +0000 @@ -0,0 +1,48 @@ +############################################################################## +# +# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE +# +############################################################################## + +"""Path Iterator + +A TALES Iterator with the ability to use first() and last() on +subpaths of elements. +""" + +__version__='$Revision: 1.1 $'[11:-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) + names.reverse() + path[:] = [tuple(names)] + return getattr(self, name) + + def same_part(self, name, ob1, ob2): + if name is None: + return ob1 == ob2 + if isinstance(name, type('')): + name = split(name, '/') + name = filter(None, name) + securityManager = getSecurityManager() + try: + ob1 = restrictedTraverse(ob1, name, securityManager) + ob2 = restrictedTraverse(ob2, name, securityManager) + except Undefs: + return 0 + return ob1 == ob2 +
