annotate ZTUtils/Zope.py @ 1042:adcfdeac4e76

not sure how useful this is...
author Richard Jones <richard@users.sourceforge.net>
date Wed, 04 Sep 2002 04:47:28 +0000
parents 7fe79c67aaa9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
983
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 ##############################################################################
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 #
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 # Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 #
7fe79c67aaa9 Adding ZTUtils 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,
7fe79c67aaa9 Adding ZTUtils 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.
7fe79c67aaa9 Adding ZTUtils 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
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 # FOR A PARTICULAR PURPOSE
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11 #
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12 ##############################################################################
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 __doc__='''Zope-specific versions of ZTUTils classes
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 $Id: Zope.py,v 1.1 2002-08-30 08:25:34 richard Exp $'''
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16 __version__='$Revision: 1.1 $'[11:-2]
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18 import sys, cgi, urllib, cgi
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19 from Tree import encodeExpansion, decodeExpansion, TreeMaker
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
20 from SimpleTree import SimpleTreeMaker
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21 from Batch import Batch
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22 from Products.ZCatalog.Lazy import Lazy
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23 from AccessControl import getSecurityManager
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24 from string import split, join
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 from types import StringType, ListType, IntType, FloatType
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26 from DateTime import DateTime
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28 try:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 from AccessControl.ZopeGuards import guarded_getitem
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30 except ImportError:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31 Unauthorized = 'Unauthorized'
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 def guarded_getitem(object, index):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 v = object[index]
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34 if getSecurityManager().validate(object, object, index, v):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 return v
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 raise Unauthorized, 'unauthorized access to element %s' % `i`
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 else:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 from AccessControl import Unauthorized
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 class LazyFilter(Lazy):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 # A LazyFilter that checks with the security policy
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 def __init__(self, seq, test=None, skip=None):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 self._seq=seq
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 self._data=[]
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 self._eindex=-1
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 self._test=test
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 if not (skip is None or str(skip) == skip):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 raise TypeError, 'Skip must be None or a string'
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 self._skip = skip
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 def __getitem__(self,index):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 data=self._data
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 try: s=self._seq
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 except AttributeError: return data[index]
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 i=index
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 if i < 0: i=len(self)+i
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 if i < 0: raise IndexError, index
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 ind=len(data)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 if i < ind: return data[i]
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 ind=ind-1
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65 test=self._test
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 e=self._eindex
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 skip = self._skip
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 while i > ind:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 e = e + 1
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 try:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 try: v = guarded_getitem(s, e)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 except Unauthorized, vv:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 if skip is None:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 self._eindex = e
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
75 msg = '(item %s): %s' % (index, vv)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 raise Unauthorized, msg, sys.exc_info()[2]
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 skip_this = 1
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78 else:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 skip_this = 0
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 except IndexError:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 del self._test
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 del self._seq
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 del self._eindex
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 raise IndexError, index
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 if skip_this: continue
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 if skip and not getSecurityManager().checkPermission(skip, v):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 continue
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 if test is None or test(v):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 data.append(v)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 ind=ind+1
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 self._eindex=e
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 return data[i]
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94 class TreeSkipMixin:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95 '''Mixin class to make trees test security, and allow
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96 skipping of unauthorized objects. '''
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97 skip = None
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
98 def setSkip(self, skip):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99 self.skip = skip
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100 return self
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
101 def getChildren(self, object):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 return LazyFilter(self._getChildren(object), skip=self.skip)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
103
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
104 class TreeMaker(TreeSkipMixin, TreeMaker):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
105 _getChildren = TreeMaker.getChildren
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 class SimpleTreeMaker(TreeSkipMixin, SimpleTreeMaker):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 _getChildren = SimpleTreeMaker.getChildren
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109 def cookieTree(self, root_object, default_state=None):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 '''Make a tree with state stored in a cookie.'''
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111 tree_pre = self.tree_pre
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 state_name = '%s-state' % tree_pre
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
113 set_name = '%s-setstate' % tree_pre
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115 req = root_object.REQUEST
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116 state = req.get(state_name)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
117 if state:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 setst = req.form.get(set_name)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119 if setst:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 st, pn, expid = split(setst, ',')
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121 state, (m, obid) = decodeExpansion(state, int(pn))
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 if m is None:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 pass
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124 elif st == 'e':
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
125 if m[obid] is None:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 m[obid] = {expid: None}
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127 else:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128 m[obid][expid] = None
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129 elif st == 'c' and m is not state and obid==expid:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
130 del m[obid]
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
131 else:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132 state = decodeExpansion(state)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133 else:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
134 state = default_state
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
135 tree = self.tree(root_object, state)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
136 rows = tree.flat()
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137 req.RESPONSE.setCookie(state_name, encodeExpansion(rows))
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
138 return tree, rows
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 # Make the Batch class test security, and let it skip unauthorized.
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
141 _Batch = Batch
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142 class Batch(Batch):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143 def __init__(self, sequence, size, start=0, end=0,
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144 orphan=0, overlap=0, skip_unauthorized=None):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145 sequence = LazyFilter(sequence, skip=skip_unauthorized)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
146 _Batch.__init__(self, sequence, size, start, end,
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147 orphan, overlap)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
148
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
149 # These functions are meant to be used together in templates that use
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
150 # trees or batches. For example, given a batch with a 'bstart' query
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151 # argument, you would use "url_query(request, omit='bstart')" to get
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
152 # the base for the batching links, then append
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
153 # "make_query(bstart=batch.previous.first)" to one and
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
154 # "make_query(bstart=batch.end)" to the other.
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
155
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
156 def make_query(*args, **kwargs):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
157 '''Construct a URL query string, with marshalling markup.
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
158
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
159 If there are positional arguments, they must be dictionaries.
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
160 They are combined with the dictionary of keyword arguments to form
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
161 a dictionary of query names and values.
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
162
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
163 Query names (the keys) must be strings. Values may be strings,
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
164 integers, floats, or DateTimes, and they may also be lists or
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
165 namespaces containing these types. Names and string values
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
166 should not be URL-quoted. All arguments are marshalled with
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
167 complex_marshal().
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
168 '''
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
169
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
170 d = {}
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
171 for arg in args:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
172 d.update(arg)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
173 d.update(kwargs)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
174
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
175 uq = urllib.quote
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
176 qlist = complex_marshal(d.items())
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
177 for i in range(len(qlist)):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
178 k, m, v = qlist[i]
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
179 qlist[i] = '%s%s=%s' % (uq(k), m, uq(str(v)))
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
180
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
181 return join(qlist, '&')
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
182
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
183 def make_hidden_input(*args, **kwargs):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
184 '''Construct a set of hidden input elements, with marshalling markup.
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
185
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
186 If there are positional arguments, they must be dictionaries.
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
187 They are combined with the dictionary of keyword arguments to form
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
188 a dictionary of query names and values.
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
189
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
190 Query names (the keys) must be strings. Values may be strings,
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
191 integers, floats, or DateTimes, and they may also be lists or
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
192 namespaces containing these types. All arguments are marshalled with
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
193 complex_marshal().
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
194 '''
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
195
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
196 d = {}
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
197 for arg in args:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
198 d.update(arg)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
199 d.update(kwargs)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
200
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
201 hq = cgi.escape
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
202 qlist = complex_marshal(d.items())
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
203 for i in range(len(qlist)):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
204 k, m, v = qlist[i]
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
205 qlist[i] = ('<input type="hidden" name="%s%s" value="%s">'
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
206 % (hq(k), m, hq(str(v))))
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
207
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
208 return join(qlist, '\n')
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
209
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
210 def complex_marshal(pairs):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
211 '''Add request marshalling information to a list of name-value pairs.
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
212
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
213 Names must be strings. Values may be strings,
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
214 integers, floats, or DateTimes, and they may also be lists or
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
215 namespaces containing these types.
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
216
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
217 The list is edited in place so that each (name, value) pair
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
218 becomes a (name, marshal, value) triple. The middle value is the
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
219 request marshalling string. Integer, float, and DateTime values
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
220 will have ":int", ":float", or ":date" as their marshal string.
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
221 Lists will be flattened, and the elements given ":list" in
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
222 addition to their simple marshal string. Dictionaries will be
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
223 flattened and marshalled using ":record".
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
224 '''
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
225 i = len(pairs)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
226 while i > 0:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
227 i = i - 1
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
228 k, v = pairs[i]
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
229 m = ''
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
230 sublist = None
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
231 if isinstance(v, StringType):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
232 pass
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
233 elif hasattr(v, 'items'):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
234 sublist = []
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
235 for sk, sv in v.items():
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
236 sm = simple_marshal(sv)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
237 sublist.append(('%s.%s' % (k, sk), '%s:record' % sm, sv))
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
238 elif isinstance(v, ListType):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
239 sublist = []
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
240 for sv in v:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
241 sm = simple_marshal(sv)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
242 sublist.append((k, '%s:list' % sm, sv))
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
243 else:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
244 m = simple_marshal(v)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
245 if sublist is None:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
246 pairs[i] = (k, m, v)
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
247 else:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
248 pairs[i:i + 1] = sublist
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
249
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
250 return pairs
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
251
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
252 def simple_marshal(v):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
253 if isinstance(v, StringType):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
254 return ''
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
255 if isinstance(v, IntType):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
256 return ':int'
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
257 if isinstance(v, FloatType):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
258 return ':float'
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
259 if isinstance(v, DateTime):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
260 return ':date'
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
261 return ''
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
262
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
263 def url_query(request, req_name="URL", omit=None):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
264 '''Construct a URL with a query string, using the current request.
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
265
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
266 request: the request object
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
267 req_name: the name, such as "URL1" or "BASEPATH1", to get from request
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
268 omit: sequence of name of query arguments to omit. If a name
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
269 contains a colon, it is treated literally. Otherwise, it will
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
270 match each argument name that starts with the name and a period or colon.
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
271 '''
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
272
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
273 base = request[req_name]
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
274 qs = request.get('QUERY_STRING', '')
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
275
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
276 if qs and omit:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
277 qsparts = split(qs, '&')
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
278
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
279 if isinstance(omit, StringType):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
280 omits = {omit: None}
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
281 else:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
282 omits = {}
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
283 for name in omit:
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
284 omits[name] = None
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
285 omitted = omits.has_key
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
286
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
287 unq = urllib.unquote
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
288 for i in range(len(qsparts)):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
289 name = unq(split(qsparts[i], '=', 1)[0])
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
290 if omitted(name):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
291 qsparts[i] = ''
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
292 name = split(name, ':', 1)[0]
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
293 if omitted(name):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
294 qsparts[i] = ''
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
295 name = split(name, '.', 1)[0]
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
296 if omitted(name):
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
297 qsparts[i] = ''
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
298
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
299 qs = join(filter(None, qsparts), '&')
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
300
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
301 # We alway append '?' since arguments will be appended to the URL
7fe79c67aaa9 Adding ZTUtils to the dist
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
302 return '%s?%s' % (base, qs)

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