Mercurial > p > roundup > code
annotate roundup/cgi/apache.py @ 5418:55f09ca366c4
Python 3 preparation: StringIO.
This generally arranges for StringIO and cStringIO references to use
io.StringIO for Python 3 but io.BytesIO for Python 2, consistent with
the string representations generally used in Roundup. A special
FasterStringIO in the TAL code, which referenced internals of the old
Python 2 StringIO module, is cut down so it doesn't actually do
anything beyond the StringIO class it inherits from (it would also be
reasonable to remove FasterStringIO completely). One place in
roundup_server.py clearly needing binary I/O is made to use io.BytesIO
unconditionally.
| author | Joseph Myers <jsm@polyomino.org.uk> |
|---|---|
| date | Wed, 25 Jul 2018 09:08:29 +0000 |
| parents | 302bc481ceb1 |
| children | 92757447dcf0 86b6cea7a975 |
| 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 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
14 import cgi |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
15 import os |
|
4213
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
16 import threading |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
17 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
18 from mod_python import apache |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
19 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
20 import roundup.instance |
|
2560
d45f1669599c
added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2552
diff
changeset
|
21 from roundup.cgi import TranslationService |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
22 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
23 class Headers(dict): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
24 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
25 """HTTP headers wrapper""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
26 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
27 def __init__(self, headers): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
28 """Initialize with `apache.table`""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
29 super(Headers, self).__init__(headers) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
30 self.getheader = self.get |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
31 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
32 class Request(object): |
|
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 """`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
|
35 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
36 def __init__(self, request): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
37 """Initialize with `apache.Request` object""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
38 self._req = request |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
39 # .headers.getheader() |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
40 self.headers = Headers(request.headers_in) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
41 # .wfile.write() |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
42 self.wfile = self._req |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
43 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
44 def start_response(self, headers, response): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
45 self.send_response(response) |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
46 for key, value in headers: |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
47 self.send_header(key, value) |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
48 self.end_headers() |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
49 |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
50 def send_response(self, response_code): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
51 """Set HTTP response code""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
52 self._req.status = response_code |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
53 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
54 def send_header(self, name, value): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
55 """Set output header""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
56 # 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
|
57 value = str(value) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
58 # XXX default content_type is "text/plain", |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
59 # 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
|
60 if name == "Content-Type": |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
61 self._req.content_type = value |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
62 else: |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
63 self._req.headers_out.add(name, value) |
|
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 end_headers(self): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
66 """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
|
67 pass |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
68 |
|
4047
e70643990e9c
Support the use of sendfile() for file transfer, if available.
Stefan Seefeld <stefan@seefeld.name>
parents:
3736
diff
changeset
|
69 |
|
e70643990e9c
Support the use of sendfile() for file transfer, if available.
Stefan Seefeld <stefan@seefeld.name>
parents:
3736
diff
changeset
|
70 def sendfile(self, filename, offset = 0, len = -1): |
|
e70643990e9c
Support the use of sendfile() for file transfer, if available.
Stefan Seefeld <stefan@seefeld.name>
parents:
3736
diff
changeset
|
71 """Send 'filename' to the user.""" |
|
e70643990e9c
Support the use of sendfile() for file transfer, if available.
Stefan Seefeld <stefan@seefeld.name>
parents:
3736
diff
changeset
|
72 |
|
e70643990e9c
Support the use of sendfile() for file transfer, if available.
Stefan Seefeld <stefan@seefeld.name>
parents:
3736
diff
changeset
|
73 return self._req.sendfile(filename, offset, len) |
|
e70643990e9c
Support the use of sendfile() for file transfer, if available.
Stefan Seefeld <stefan@seefeld.name>
parents:
3736
diff
changeset
|
74 |
|
4213
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
75 __tracker_cache = {} |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
76 """A cache of optimized tracker instances. |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
77 |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
78 The keys are strings giving the directories containing the trackers. |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
79 The values are tracker instances.""" |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
80 |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
81 __tracker_cache_lock = threading.Lock() |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
82 """A lock used to guard access to the cache.""" |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
83 |
|
4047
e70643990e9c
Support the use of sendfile() for file transfer, if available.
Stefan Seefeld <stefan@seefeld.name>
parents:
3736
diff
changeset
|
84 |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
85 def handler(req): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
86 """HTTP request handler""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
87 _options = req.get_options() |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
88 _home = _options.get("TrackerHome") |
|
2560
d45f1669599c
added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2552
diff
changeset
|
89 _lang = _options.get("TrackerLanguage") |
|
2944
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
90 _timing = _options.get("TrackerTiming", "no") |
|
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
91 if _timing.lower() in ("no", "false"): |
|
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
92 _timing = "" |
|
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
93 _debug = _options.get("TrackerDebug", "no") |
|
3735
e8d4ac23692f
fix debug flag detection
Richard Jones <richard@users.sourceforge.net>
parents:
2944
diff
changeset
|
94 _debug = _debug.lower() not in ("no", "false") |
|
4213
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
95 |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
96 # We do not need to take a lock here (the fast path) because reads |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
97 # from dictionaries are atomic. |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
98 if not _debug and _home in __tracker_cache: |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
99 _tracker = __tracker_cache[_home] |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
100 else: |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
101 if not (_home and os.path.isdir(_home)): |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
102 apache.log_error( |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
103 "PythonOption TrackerHome missing or invalid for %(uri)s" |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
104 % {'uri': req.uri}) |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
105 return apache.HTTP_INTERNAL_SERVER_ERROR |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
106 if _debug: |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
107 _tracker = roundup.instance.open(_home, optimize=0) |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
108 else: |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
109 __tracker_cache_lock.acquire() |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
110 try: |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
111 # The tracker may have been added while we were acquiring |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
112 # the lock. |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
113 if _home in __tracker_cache: |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
114 _tracker = __tracker_cache[home] |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
115 else: |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
116 _tracker = roundup.instance.open(_home, optimize=1) |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
117 __tracker_cache[_home] = _tracker |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
118 finally: |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
119 __tracker_cache_lock.release() |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
120 # create environment |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
121 # 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
|
122 req.add_common_vars() |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
123 _env = dict(req.subprocess_env) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
124 # 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
|
125 # 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
|
126 # 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
|
127 # we just remove the first character ('/') |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
128 _env["PATH_INFO"] = req.path_info[1:] |
|
2944
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
129 if _timing: |
|
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
130 _env["CGI_SHOW_TIMING"] = _timing |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
131 _form = cgi.FieldStorage(req, environ=_env) |
|
2560
d45f1669599c
added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2552
diff
changeset
|
132 _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
|
133 translator=TranslationService.get_translation(_lang, |
|
353dc16a49b2
pass tracker home directory to get_translation()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2560
diff
changeset
|
134 tracker_home=_home)) |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
135 _client.main() |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
136 return apache.OK |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
137 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
138 # vim: set et sts=4 sw=4 : |
