annotate PageTemplates/PathIterator.py @ 1028:16498e77e3ff

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

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