annotate frontends/ZRoundup/ZRoundup.py @ 8511:b91d8a4e5850 permission-performance

close incorporated branch -- hg diff -r "ancestor(default,permission-performance)" -r permission-performance; returns nothing
author John Rouillard <rouilj@ieee.org>
date Tue, 27 Jan 2026 21:22:47 -0500
parents 88dbacd11cd1
children fed0f839c260
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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

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