annotate roundup/cgi/PageTemplates/PathIterator.py @ 4546:d39c37fd2940 git

Repository conversion from Subversion to git.
author Eric S. Raymond <esr@thyrsus.com>
date Tue, 18 Oct 2011 10:20:29 -0400
parents b43efe461b3e
children 6e3e4f24c753
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 ##############################################################################
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 #
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 # Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
4 #
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5 # This software is subject to the provisions of the Zope Public License,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6 # Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 # FOR A PARTICULAR PURPOSE
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
11 #
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12 ##############################################################################
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14 """Path Iterator
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16 A TALES Iterator with the ability to use first() and last() on
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17 subpaths of elements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18 """
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
20 __version__='$Revision: 1.3 $'[11:-2]
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22 import TALES
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23 from Expressions import restrictedTraverse, Undefs, getSecurityManager
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 class Iterator(TALES.Iterator):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26 def __bobo_traverse__(self, REQUEST, name):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 if name in ('first', 'last'):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28 path = REQUEST['TraversalRequestNameStack']
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 names = list(path)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30 names.reverse()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31 path[:] = [tuple(names)]
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 return getattr(self, name)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34 def same_part(self, name, ob1, ob2):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 if name is None:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 return ob1 == ob2
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 if isinstance(name, type('')):
2349
b43efe461b3e update PageTemplates to latest Zope codebase
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
38 name = name.split('/')
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 name = filter(None, name)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 securityManager = getSecurityManager()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 try:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 ob1 = restrictedTraverse(ob1, name, securityManager)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 ob2 = restrictedTraverse(ob2, name, securityManager)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 except Undefs:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 return 0
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 return ob1 == ob2

Roundup Issue Tracker: http://roundup-tracker.org/