Mercurial > p > roundup > code
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 |
| 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 |
