Mercurial > p > roundup > code
annotate frontends/ZRoundup/ZRoundup.py @ 5548:fea11d05110e
Avoid errors from selecting "no selection" on multilink (issue2550722).
As discussed in issue 2550722 there are various cases where selecting
"no selection" on a multilink can result in inappropriate errors from
Roundup:
* If selecting "no selection" produces a null edit (a value was set in
the multilink in an edit with an error, then removed again, along
with all other changes, in the next form submission), so the page is
rendered from the form contents including the "-<id>" value for "no
selection" for the multilink.
* If creating an item with a nonempty value for a multilink has an
error, and the resubmission changes that multilink to "no selection"
(and this in turn has subcases, according to whether the creation
then succeeds or fails on the resubmission, which need fixes in
different places in the Roundup code).
All of these cases have in common that it is expected and OK to have a
"-<id>" value for a submission for a multilink when <id> is not set in
that multilink in the database (because the original attempt to set
<id> in that multilink had an error), so the hyperdb.py logic to give
an error in that case is thus removed. In the subcase of the second
case where the resubmission with "no selection" has an error, the
templating code tries to produce a menu entry for the "-<id>"
multilink value, which also results in an error, hence the
templating.py change to ignore such values in the list for a
multilink.
| author | Joseph Myers <jsm@polyomino.org.uk> |
|---|---|
| date | Thu, 27 Sep 2018 11:33:01 +0000 |
| parents | 88dbacd11cd1 |
| children | fed0f839c260 |
| rev | line source |
|---|---|
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2 # This module is free software, and you may redistribute it and/or modify |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3 # under the same terms as Python, so long as this copyright message and |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
4 # disclaimer are retained in their original form. |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
5 # |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
6 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
7 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
8 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
9 # POSSIBILITY OF SUCH DAMAGE. |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
10 # |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
11 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
12 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
13 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
14 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
15 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
16 # |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
17 ''' ZRoundup module - exposes the roundup web interface to Zope |
|
447
70bdd0cef7e4
added some implementation notes
Richard Jones <richard@users.sourceforge.net>
parents:
446
diff
changeset
|
18 |
|
506
453096f811f0
reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents:
448
diff
changeset
|
19 This frontend works by providing a thin layer that sits between Zope and the |
|
453096f811f0
reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents:
448
diff
changeset
|
20 regular CGI interface of roundup, providing the web frontend with the minimum |
|
453096f811f0
reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents:
448
diff
changeset
|
21 of effort. |
|
447
70bdd0cef7e4
added some implementation notes
Richard Jones <richard@users.sourceforge.net>
parents:
446
diff
changeset
|
22 |
|
506
453096f811f0
reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents:
448
diff
changeset
|
23 This means that the regular CGI interface does all authentication quite |
|
453096f811f0
reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents:
448
diff
changeset
|
24 independently of Zope. The roundup code is kept in memory though, and it |
|
453096f811f0
reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents:
448
diff
changeset
|
25 runs in the same server as all your other Zope stuff, so it does have _some_ |
|
453096f811f0
reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents:
448
diff
changeset
|
26 advantages over regular CGI :) |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
27 ''' |
|
768
ce439805c617
Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents:
765
diff
changeset
|
28 |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
29 from roundup.anypy import urllib_ |
|
768
ce439805c617
Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents:
765
diff
changeset
|
30 |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
31 from Globals import InitializeClass, HTMLFile |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
32 from OFS.SimpleItem import Item |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
33 from OFS.PropertyManager import PropertyManager |
|
1291
bf8b2380adb3
added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents:
1285
diff
changeset
|
34 from Acquisition import Explicit, Implicit |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
35 from Persistence import Persistent |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 from AccessControl import ClassSecurityInfo |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 from AccessControl import ModuleSecurityInfo |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 modulesecurity = ModuleSecurityInfo() |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
39 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
40 import roundup.instance |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2612
diff
changeset
|
41 from roundup.cgi import client |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
42 |
|
506
453096f811f0
reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents:
448
diff
changeset
|
43 modulesecurity.declareProtected('View management screens', |
|
453096f811f0
reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents:
448
diff
changeset
|
44 'manage_addZRoundupForm') |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 manage_addZRoundupForm = HTMLFile('dtml/manage_addZRoundupForm', globals()) |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 modulesecurity.declareProtected('Add Z Roundups', 'manage_addZRoundup') |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
48 def manage_addZRoundup(self, id, instance_home, REQUEST): |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
49 """Add a ZRoundup product """ |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
50 # validate the instance_home |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 roundup.instance.open(instance_home) |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 self._setObject(id, ZRoundup(id, instance_home)) |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 return self.manage_main(self, REQUEST) |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 class RequestWrapper: |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
56 '''Make the Zope RESPONSE look like a BaseHTTPServer |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
57 ''' |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 def __init__(self, RESPONSE): |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
59 self.RESPONSE = RESPONSE |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
60 self.wfile = self.RESPONSE |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
61 def send_response(self, status): |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
62 self.RESPONSE.setStatus(status) |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
63 def send_header(self, header, value): |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
64 self.RESPONSE.addHeader(header, value) |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
65 def end_headers(self): |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
66 # not needed - the RESPONSE object handles this internally on write() |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
67 pass |
|
3962
41d297d7dcec
Fix ZRoundup to work with Zope 2.8.5 [SF#1806125]
Richard Jones <richard@users.sourceforge.net>
parents:
3505
diff
changeset
|
68 def start_response(self, headers, response): |
|
41d297d7dcec
Fix ZRoundup to work with Zope 2.8.5 [SF#1806125]
Richard Jones <richard@users.sourceforge.net>
parents:
3505
diff
changeset
|
69 self.send_response(response) |
|
41d297d7dcec
Fix ZRoundup to work with Zope 2.8.5 [SF#1806125]
Richard Jones <richard@users.sourceforge.net>
parents:
3505
diff
changeset
|
70 for key, value in headers: |
|
41d297d7dcec
Fix ZRoundup to work with Zope 2.8.5 [SF#1806125]
Richard Jones <richard@users.sourceforge.net>
parents:
3505
diff
changeset
|
71 self.send_header(key, value) |
|
41d297d7dcec
Fix ZRoundup to work with Zope 2.8.5 [SF#1806125]
Richard Jones <richard@users.sourceforge.net>
parents:
3505
diff
changeset
|
72 self.end_headers() |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
73 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
74 class FormItem: |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
75 '''Make a Zope form item look like a cgi.py one |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
76 ''' |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
77 def __init__(self, value): |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
78 self.value = value |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
79 if hasattr(self.value, 'filename'): |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
80 self.filename = self.value.filename |
|
2869
908c27314abf
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
2633
diff
changeset
|
81 self.value = self.value.read() |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
82 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
83 class FormWrapper: |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
84 '''Make a Zope form dict look like a cgi.py one |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
85 ''' |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
86 def __init__(self, form): |
|
3505
b294cc477f2c
ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents:
3180
diff
changeset
|
87 self.__form = form |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
88 def __getitem__(self, item): |
|
3505
b294cc477f2c
ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents:
3180
diff
changeset
|
89 entry = self.__form[item] |
|
2612
7cf56f5b3991
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
1911
diff
changeset
|
90 if isinstance(entry, type([])): |
|
5399
dccae35caa59
Python 3 preparation: update map() calls as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5395
diff
changeset
|
91 entry = list(map(FormItem, entry)) |
|
2612
7cf56f5b3991
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
1911
diff
changeset
|
92 else: |
|
7cf56f5b3991
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
1911
diff
changeset
|
93 entry = FormItem(entry) |
|
7cf56f5b3991
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
1911
diff
changeset
|
94 return entry |
|
3962
41d297d7dcec
Fix ZRoundup to work with Zope 2.8.5 [SF#1806125]
Richard Jones <richard@users.sourceforge.net>
parents:
3505
diff
changeset
|
95 def __iter__(self): |
|
41d297d7dcec
Fix ZRoundup to work with Zope 2.8.5 [SF#1806125]
Richard Jones <richard@users.sourceforge.net>
parents:
3505
diff
changeset
|
96 return iter(self.__form) |
|
2612
7cf56f5b3991
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
1911
diff
changeset
|
97 def getvalue(self, key, default=None): |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
98 if key in self.__form: |
|
3505
b294cc477f2c
ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents:
3180
diff
changeset
|
99 return self.__form[key] |
|
2612
7cf56f5b3991
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
1911
diff
changeset
|
100 else: |
|
2869
908c27314abf
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
2633
diff
changeset
|
101 return default |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
102 def has_key(self, item): |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
103 return item in self.__form |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
104 def keys(self): |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5381
diff
changeset
|
105 return list(self.__form.keys()) |
|
3505
b294cc477f2c
ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents:
3180
diff
changeset
|
106 |
|
b294cc477f2c
ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents:
3180
diff
changeset
|
107 def __repr__(self): |
|
b294cc477f2c
ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents:
3180
diff
changeset
|
108 return '<ZRoundup.FormWrapper %r>'%self.__form |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
109 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
110 class ZRoundup(Item, PropertyManager, Implicit, Persistent): |
|
506
453096f811f0
reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents:
448
diff
changeset
|
111 '''An instance of this class provides an interface between Zope and |
|
453096f811f0
reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents:
448
diff
changeset
|
112 roundup for one roundup instance |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
113 ''' |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
114 meta_type = 'Z Roundup' |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
115 security = ClassSecurityInfo() |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
116 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
117 def __init__(self, id, instance_home): |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
118 self.id = id |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
119 self.instance_home = instance_home |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
120 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
121 # define the properties that define this object |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
122 _properties = ( |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
123 {'id':'id', 'type': 'string', 'mode': 'w'}, |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
124 {'id':'instance_home', 'type': 'string', 'mode': 'w'}, |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
125 ) |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
126 property_extensible_schema__ = 0 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
127 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
128 # define the tabs for the management interface |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
129 manage_options= PropertyManager.manage_options + ( |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
130 {'label': 'View', 'action':'index_html'}, |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
131 ) + Item.manage_options |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
132 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
133 icon = "misc_/ZRoundup/icon" |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
134 |
|
1291
bf8b2380adb3
added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents:
1285
diff
changeset
|
135 security.declarePrivate('roundup_opendb') |
|
bf8b2380adb3
added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents:
1285
diff
changeset
|
136 def roundup_opendb(self): |
|
448
6e3911304700
Fixed some problems with user editing
Richard Jones <richard@users.sourceforge.net>
parents:
447
diff
changeset
|
137 '''Open the roundup instance database for a transaction. |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
138 ''' |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2612
diff
changeset
|
139 tracker = roundup.instance.open(self.instance_home) |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
140 request = RequestWrapper(self.REQUEST['RESPONSE']) |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
141 env = self.REQUEST.environ |
|
765
1b5575ccffe1
Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents:
717
diff
changeset
|
142 |
|
1b5575ccffe1
Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents:
717
diff
changeset
|
143 # figure out the path components to set |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
144 url = urllib_.urlparse( self.absolute_url() ) |
|
808
b7f38cc4680a
fixed [SF#576086] (dumb copying mistake)
Derrick Hudson <dman13@users.sourceforge.net>
parents:
771
diff
changeset
|
145 path = url[2] |
|
b7f38cc4680a
fixed [SF#576086] (dumb copying mistake)
Derrick Hudson <dman13@users.sourceforge.net>
parents:
771
diff
changeset
|
146 path_components = path.split( '/' ) |
|
1291
bf8b2380adb3
added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents:
1285
diff
changeset
|
147 |
|
765
1b5575ccffe1
Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents:
717
diff
changeset
|
148 # special case when roundup is '/' in this virtual host, |
|
1b5575ccffe1
Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents:
717
diff
changeset
|
149 if path == "/" : |
|
1b5575ccffe1
Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents:
717
diff
changeset
|
150 env['SCRIPT_NAME'] = "/" |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1092
diff
changeset
|
151 env['TRACKER_NAME'] = '' |
|
765
1b5575ccffe1
Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents:
717
diff
changeset
|
152 else : |
|
1b5575ccffe1
Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents:
717
diff
changeset
|
153 # all but the last element is the path |
|
1b5575ccffe1
Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents:
717
diff
changeset
|
154 env['SCRIPT_NAME'] = '/'.join( path_components[:-1] ) |
|
1b5575ccffe1
Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents:
717
diff
changeset
|
155 # the last element is the name |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1092
diff
changeset
|
156 env['TRACKER_NAME'] = path_components[-1] |
|
765
1b5575ccffe1
Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents:
717
diff
changeset
|
157 |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1291
diff
changeset
|
158 form = FormWrapper(self.REQUEST.form) |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2612
diff
changeset
|
159 if hasattr(tracker, 'Client'): |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2612
diff
changeset
|
160 return tracker.Client(tracker, request, env, form) |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2612
diff
changeset
|
161 return client.Client(tracker, request, env, form) |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
162 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
163 security.declareProtected('View', 'index_html') |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
164 def index_html(self): |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
165 '''Alias index_html to roundup's index |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
166 ''' |
|
768
ce439805c617
Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents:
765
diff
changeset
|
167 # Redirect misdirected requests -- bugs 558867 , 565992 |
|
ce439805c617
Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents:
765
diff
changeset
|
168 # PATH_INFO, as defined by the CGI spec, has the *real* request path |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1291
diff
changeset
|
169 orig_path = self.REQUEST.environ['PATH_INFO'] |
|
768
ce439805c617
Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents:
765
diff
changeset
|
170 if orig_path[-1] != '/' : |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
171 url = urllib_.urlparse( self.absolute_url() ) |
|
768
ce439805c617
Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents:
765
diff
changeset
|
172 url = list( url ) # make mutable |
|
ce439805c617
Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents:
765
diff
changeset
|
173 url[2] = url[2]+'/' # patch |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5399
diff
changeset
|
174 url = urllib_.urlunparse( url ) # reassemble |
|
768
ce439805c617
Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents:
765
diff
changeset
|
175 RESPONSE = self.REQUEST.RESPONSE |
|
ce439805c617
Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents:
765
diff
changeset
|
176 RESPONSE.setStatus( "MovedPermanently" ) # 301 |
|
ce439805c617
Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents:
765
diff
changeset
|
177 RESPONSE.setHeader( "Location" , url ) |
|
ce439805c617
Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents:
765
diff
changeset
|
178 return RESPONSE |
|
ce439805c617
Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents:
765
diff
changeset
|
179 |
|
1291
bf8b2380adb3
added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents:
1285
diff
changeset
|
180 client = self.roundup_opendb() |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
181 # fake the path that roundup should use |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
182 client.split_path = ['index'] |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
183 return client.main() |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
184 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
185 def __getitem__(self, item): |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
186 '''All other URL accesses are passed throuh to roundup |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
187 ''' |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1291
diff
changeset
|
188 return PathElement(self, item).__of__(self) |
|
1291
bf8b2380adb3
added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents:
1285
diff
changeset
|
189 |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1291
diff
changeset
|
190 class PathElement(Item, Implicit): |
|
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1291
diff
changeset
|
191 def __init__(self, zr, path): |
|
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1291
diff
changeset
|
192 self.zr = zr |
|
1291
bf8b2380adb3
added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents:
1285
diff
changeset
|
193 self.path = path |
|
bf8b2380adb3
added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents:
1285
diff
changeset
|
194 |
|
bf8b2380adb3
added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents:
1285
diff
changeset
|
195 def __getitem__(self, item): |
|
bf8b2380adb3
added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents:
1285
diff
changeset
|
196 ''' Get a subitem. |
|
bf8b2380adb3
added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents:
1285
diff
changeset
|
197 ''' |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1291
diff
changeset
|
198 return PathElement(self.zr, self.path + '/' + item).__of__(self) |
|
1291
bf8b2380adb3
added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents:
1285
diff
changeset
|
199 |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1291
diff
changeset
|
200 def index_html(self, REQUEST=None): |
|
1291
bf8b2380adb3
added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents:
1285
diff
changeset
|
201 ''' Actually call through to roundup to handle the request. |
|
bf8b2380adb3
added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents:
1285
diff
changeset
|
202 ''' |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
203 try: |
|
1911
f5c804379c85
fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents:
1291
diff
changeset
|
204 client = self.zr.roundup_opendb() |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
205 # fake the path that roundup should use |
|
1291
bf8b2380adb3
added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents:
1285
diff
changeset
|
206 client.path = self.path |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
207 # and call roundup to do something |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
208 client.main() |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
209 return '' |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2612
diff
changeset
|
210 except client.NotFound: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4570
diff
changeset
|
211 raise Exception('NotFound ' + REQUEST.URL) |
|
446
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
212 pass |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
213 except: |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
214 import traceback |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
215 traceback.print_exc() |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
216 # all other exceptions in roundup are valid |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
217 raise |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
218 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
219 InitializeClass(ZRoundup) |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
220 modulesecurity.apply(globals()) |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
221 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
222 |
|
ea9a4ca3fb84
Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
223 # vim: set filetype=python ts=4 sw=4 et si |
