Mercurial > p > roundup > code
annotate roundup/cgi/apache.py @ 4045:82213b1971b4
Only feed back traceback to web users if config.WEB_DEBUG is True
| author | Stefan Seefeld <stefan@seefeld.name> |
|---|---|
| date | Tue, 17 Feb 2009 01:36:11 +0000 |
| parents | a2d22d0de0bc |
| children | e70643990e9c |
| rev | line source |
|---|---|
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
1 # mod_python interface for Roundup Issue Tracker |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
2 # |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
3 # This module is free software, you may redistribute it |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
4 # and/or modify under the same terms as Python. |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
5 # |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
6 # This module provides Roundup Web User Interface |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
7 # using mod_python Apache module. Initially written |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
8 # with python 2.3.3, mod_python 3.1.3, roundup 0.7.0. |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
9 # |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
10 # This module operates with only one tracker |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
11 # and must be placed in the tracker directory. |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
12 # |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
13 # History (most recent first): |
|
2560
d45f1669599c
added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2552
diff
changeset
|
14 # 11-jul-2004 [als] added 'TrackerLanguage' option; |
|
d45f1669599c
added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2552
diff
changeset
|
15 # pass message translator to the tracker client instance |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
16 # 04-jul-2004 [als] tracker lookup moved from module global to request handler; |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
17 # use PythonOption TrackerHome (configured in apache) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
18 # to open the tracker |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
19 # 06-may-2004 [als] use cgi.FieldStorage from Python library |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
20 # instead of mod_python FieldStorage |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
21 # 29-apr-2004 [als] created |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
22 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
23 __version__ = "$Revision: 1.6 $"[11:-2] |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
24 __date__ = "$Date: 2006-11-09 00:36:21 $"[7:-2] |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
25 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
26 import cgi |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
27 import os |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
28 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
29 from mod_python import apache |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
30 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
31 import roundup.instance |
|
2560
d45f1669599c
added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2552
diff
changeset
|
32 from roundup.cgi import TranslationService |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
33 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
34 class Headers(dict): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
35 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
36 """HTTP headers wrapper""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
37 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
38 def __init__(self, headers): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
39 """Initialize with `apache.table`""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
40 super(Headers, self).__init__(headers) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
41 self.getheader = self.get |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
42 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
43 class Request(object): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
44 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
45 """`apache.Request` object wrapper providing roundup client interface""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
46 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
47 def __init__(self, request): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
48 """Initialize with `apache.Request` object""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
49 self._req = request |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
50 # .headers.getheader() |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
51 self.headers = Headers(request.headers_in) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
52 # .wfile.write() |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
53 self.wfile = self._req |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
54 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
55 def start_response(self, headers, response): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
56 self.send_response(response) |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
57 for key, value in headers: |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
58 self.send_header(key, value) |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
59 self.end_headers() |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
60 |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
61 def send_response(self, response_code): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
62 """Set HTTP response code""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
63 self._req.status = response_code |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
64 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
65 def send_header(self, name, value): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
66 """Set output header""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
67 # value may be an instance of roundup.cgi.exceptions.HTTPException |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
68 value = str(value) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
69 # XXX default content_type is "text/plain", |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
70 # and ain't overrided by "Content-Type" header |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
71 if name == "Content-Type": |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
72 self._req.content_type = value |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
73 else: |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
74 self._req.headers_out.add(name, value) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
75 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
76 def end_headers(self): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
77 """NOOP. There aint no such thing as 'end_headers' in mod_python""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
78 pass |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
79 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
80 def handler(req): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
81 """HTTP request handler""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
82 _options = req.get_options() |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
83 _home = _options.get("TrackerHome") |
|
2560
d45f1669599c
added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2552
diff
changeset
|
84 _lang = _options.get("TrackerLanguage") |
|
2944
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
85 _timing = _options.get("TrackerTiming", "no") |
|
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
86 if _timing.lower() in ("no", "false"): |
|
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
87 _timing = "" |
|
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
88 _debug = _options.get("TrackerDebug", "no") |
|
3735
e8d4ac23692f
fix debug flag detection
Richard Jones <richard@users.sourceforge.net>
parents:
2944
diff
changeset
|
89 _debug = _debug.lower() not in ("no", "false") |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
90 if not (_home and os.path.isdir(_home)): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
91 apache.log_error( |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
92 "PythonOption TrackerHome missing or invalid for %(uri)s" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
93 % {'uri': req.uri}) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
94 return apache.HTTP_INTERNAL_SERVER_ERROR |
|
2944
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
95 _tracker = roundup.instance.open(_home, not _debug) |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
96 # create environment |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
97 # Note: cookies are read from HTTP variables, so we need all HTTP vars |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
98 req.add_common_vars() |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
99 _env = dict(req.subprocess_env) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
100 # XXX classname must be the first item in PATH_INFO. roundup.cgi does: |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
101 # path = string.split(os.environ.get('PATH_INFO', '/'), '/') |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
102 # os.environ['PATH_INFO'] = string.join(path[2:], '/') |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
103 # we just remove the first character ('/') |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
104 _env["PATH_INFO"] = req.path_info[1:] |
|
2944
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
105 if _timing: |
|
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
106 _env["CGI_SHOW_TIMING"] = _timing |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
107 _form = cgi.FieldStorage(req, environ=_env) |
|
2560
d45f1669599c
added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2552
diff
changeset
|
108 _client = _tracker.Client(_tracker, Request(req), _env, _form, |
|
2809
353dc16a49b2
pass tracker home directory to get_translation()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2560
diff
changeset
|
109 translator=TranslationService.get_translation(_lang, |
|
353dc16a49b2
pass tracker home directory to get_translation()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2560
diff
changeset
|
110 tracker_home=_home)) |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
111 _client.main() |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
112 return apache.OK |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
113 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
114 # vim: set et sts=4 sw=4 : |
