Mercurial > p > roundup > code
annotate roundup/cgi/apache.py @ 8320:b07165add61b
fix(web): issue2551406 - dont crash when handed invalid @template=a|b|c
Only two template cases (ok and error) are handled. Presence of second
'|' caused crash. Discovered/patch provided by Christof Meerwald
(cmeerw).
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Mon, 02 Jun 2025 08:52:39 -0400 |
| parents | dd13b3a0ea8d |
| children |
| 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 # |
| 5890 | 13 # mod_python is deprecated and not well tested with release 2.0 of |
| 14 # roundup. mod_wsgi is the preferred interface. It may not work | |
|
5889
a243a036e7f3
mod_python update/deprication.
John Rouillard <rouilj@ieee.org>
parents:
5434
diff
changeset
|
15 # with python3. |
|
a243a036e7f3
mod_python update/deprication.
John Rouillard <rouilj@ieee.org>
parents:
5434
diff
changeset
|
16 |
|
a243a036e7f3
mod_python update/deprication.
John Rouillard <rouilj@ieee.org>
parents:
5434
diff
changeset
|
17 # The patch from https://issues.roundup-tracker.org/issue2550821 |
|
a243a036e7f3
mod_python update/deprication.
John Rouillard <rouilj@ieee.org>
parents:
5434
diff
changeset
|
18 # is included. Look for this url below. It is not tested, but |
|
a243a036e7f3
mod_python update/deprication.
John Rouillard <rouilj@ieee.org>
parents:
5434
diff
changeset
|
19 # we assume it's safe and syntax it seems ok. |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
20 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
21 import os |
|
4213
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
22 import threading |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
23 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
24 from mod_python import apache |
|
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 roundup.instance |
|
7582
978285986b2c
fix: issue2551193 - Fix roundup for removal of cgi and cgitb ...
John Rouillard <rouilj@ieee.org>
parents:
7228
diff
changeset
|
27 from roundup.anypy.cgi_ import cgi |
|
2560
d45f1669599c
added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2552
diff
changeset
|
28 from roundup.cgi import TranslationService |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
29 |
|
6037
495282f62e0c
Flake8 reported unknown var home. Replace with _home in cache.
John Rouillard <rouilj@ieee.org>
parents:
5890
diff
changeset
|
30 |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
31 class Headers(dict): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
32 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
33 """HTTP headers wrapper""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
34 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
35 def __init__(self, headers): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
36 """Initialize with `apache.table`""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
37 super(Headers, self).__init__(headers) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
38 self.getheader = self.get |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
39 |
|
6037
495282f62e0c
Flake8 reported unknown var home. Replace with _home in cache.
John Rouillard <rouilj@ieee.org>
parents:
5890
diff
changeset
|
40 |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
41 class Request(object): |
|
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 """`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
|
44 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
45 def __init__(self, request): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
46 """Initialize with `apache.Request` object""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
47 self._req = request |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
48 # .headers.getheader() |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
49 self.headers = Headers(request.headers_in) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
50 # .wfile.write() |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
51 self.wfile = self._req |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
52 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
53 def start_response(self, headers, response): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
54 self.send_response(response) |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
55 for key, value in headers: |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
56 self.send_header(key, value) |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
57 self.end_headers() |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3735
diff
changeset
|
58 |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
59 def send_response(self, response_code): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
60 """Set HTTP response code""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
61 self._req.status = response_code |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
62 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
63 def send_header(self, name, value): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
64 """Set output header""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
65 # 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
|
66 value = str(value) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
67 # XXX default content_type is "text/plain", |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
68 # 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
|
69 if name == "Content-Type": |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
70 self._req.content_type = value |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
71 else: |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
72 self._req.headers_out.add(name, value) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
73 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
74 def end_headers(self): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
75 """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
|
76 pass |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
77 |
|
8103
dd13b3a0ea8d
chore(lint): fix variable shadow builtin (len); proper indent func args.
John Rouillard <rouilj@ieee.org>
parents:
7582
diff
changeset
|
78 def sendfile(self, filename, offset=0, length=-1): |
|
4047
e70643990e9c
Support the use of sendfile() for file transfer, if available.
Stefan Seefeld <stefan@seefeld.name>
parents:
3736
diff
changeset
|
79 """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
|
80 |
|
8103
dd13b3a0ea8d
chore(lint): fix variable shadow builtin (len); proper indent func args.
John Rouillard <rouilj@ieee.org>
parents:
7582
diff
changeset
|
81 return self._req.sendfile(filename, offset, length) |
|
4047
e70643990e9c
Support the use of sendfile() for file transfer, if available.
Stefan Seefeld <stefan@seefeld.name>
parents:
3736
diff
changeset
|
82 |
|
6037
495282f62e0c
Flake8 reported unknown var home. Replace with _home in cache.
John Rouillard <rouilj@ieee.org>
parents:
5890
diff
changeset
|
83 |
|
4213
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
84 __tracker_cache = {} |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
85 """A cache of optimized tracker instances. |
|
6037
495282f62e0c
Flake8 reported unknown var home. Replace with _home in cache.
John Rouillard <rouilj@ieee.org>
parents:
5890
diff
changeset
|
86 |
|
4213
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
87 The keys are strings giving the directories containing the trackers. |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
88 The values are tracker instances.""" |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
89 |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
90 __tracker_cache_lock = threading.Lock() |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
91 """A lock used to guard access to the cache.""" |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
92 |
|
4047
e70643990e9c
Support the use of sendfile() for file transfer, if available.
Stefan Seefeld <stefan@seefeld.name>
parents:
3736
diff
changeset
|
93 |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
94 def handler(req): |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
95 """HTTP request handler""" |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
96 _options = req.get_options() |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
97 _home = _options.get("TrackerHome") |
|
2560
d45f1669599c
added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2552
diff
changeset
|
98 _lang = _options.get("TrackerLanguage") |
|
2944
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
99 _timing = _options.get("TrackerTiming", "no") |
|
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
100 if _timing.lower() in ("no", "false"): |
|
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
101 _timing = "" |
|
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
102 _debug = _options.get("TrackerDebug", "no") |
|
3735
e8d4ac23692f
fix debug flag detection
Richard Jones <richard@users.sourceforge.net>
parents:
2944
diff
changeset
|
103 _debug = _debug.lower() not in ("no", "false") |
|
4213
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
104 |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
105 # 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
|
106 # from dictionaries are atomic. |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
107 if not _debug and _home in __tracker_cache: |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
108 _tracker = __tracker_cache[_home] |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
109 else: |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
110 if not (_home and os.path.isdir(_home)): |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
111 apache.log_error( |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
112 "PythonOption TrackerHome missing or invalid for %(uri)s" |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
113 % {'uri': req.uri}) |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
114 return apache.HTTP_INTERNAL_SERVER_ERROR |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
115 if _debug: |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
116 _tracker = roundup.instance.open(_home, optimize=0) |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
117 else: |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
118 __tracker_cache_lock.acquire() |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
119 try: |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
120 # The tracker may have been added while we were acquiring |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
121 # the lock. |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
122 if _home in __tracker_cache: |
|
6037
495282f62e0c
Flake8 reported unknown var home. Replace with _home in cache.
John Rouillard <rouilj@ieee.org>
parents:
5890
diff
changeset
|
123 _tracker = __tracker_cache[_home] |
|
4213
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
124 else: |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
125 _tracker = roundup.instance.open(_home, optimize=1) |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
126 __tracker_cache[_home] = _tracker |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
127 finally: |
|
302bc481ceb1
Cache tracker instances.
Stefan Seefeld <stefan@seefeld.name>
parents:
4047
diff
changeset
|
128 __tracker_cache_lock.release() |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
129 # create environment |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
130 # Note: cookies are read from HTTP variables, so we need all HTTP vars |
|
5889
a243a036e7f3
mod_python update/deprication.
John Rouillard <rouilj@ieee.org>
parents:
5434
diff
changeset
|
131 |
|
a243a036e7f3
mod_python update/deprication.
John Rouillard <rouilj@ieee.org>
parents:
5434
diff
changeset
|
132 # https://issues.roundup-tracker.org/issue2550821 |
|
a243a036e7f3
mod_python update/deprication.
John Rouillard <rouilj@ieee.org>
parents:
5434
diff
changeset
|
133 # Release 3.4 of mod_python uses add_cgi_vars() and depricates |
|
a243a036e7f3
mod_python update/deprication.
John Rouillard <rouilj@ieee.org>
parents:
5434
diff
changeset
|
134 # add_common_vars. So try to use the add_cgi_vars and if it fails |
|
a243a036e7f3
mod_python update/deprication.
John Rouillard <rouilj@ieee.org>
parents:
5434
diff
changeset
|
135 # with AttributeError because we are running an older mod_apache without |
|
a243a036e7f3
mod_python update/deprication.
John Rouillard <rouilj@ieee.org>
parents:
5434
diff
changeset
|
136 # that function, fallback to add_common_vars. |
|
a243a036e7f3
mod_python update/deprication.
John Rouillard <rouilj@ieee.org>
parents:
5434
diff
changeset
|
137 try: |
|
a243a036e7f3
mod_python update/deprication.
John Rouillard <rouilj@ieee.org>
parents:
5434
diff
changeset
|
138 req.add_cgi_vars() |
|
a243a036e7f3
mod_python update/deprication.
John Rouillard <rouilj@ieee.org>
parents:
5434
diff
changeset
|
139 except AttributeError: |
|
a243a036e7f3
mod_python update/deprication.
John Rouillard <rouilj@ieee.org>
parents:
5434
diff
changeset
|
140 req.add_common_vars() |
| 6038 | 141 |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
142 _env = dict(req.subprocess_env) |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
143 # XXX classname must be the first item in PATH_INFO. roundup.cgi does: |
|
5433
86b6cea7a975
Python 3 preparation: avoid string.split().
Joseph Myers <jsm@polyomino.org.uk>
parents:
4213
diff
changeset
|
144 # path = os.environ.get('PATH_INFO', '/').split('/') |
|
5434
1ab2c81a64df
Python 3 preparation: avoid string.join().
Joseph Myers <jsm@polyomino.org.uk>
parents:
5433
diff
changeset
|
145 # os.environ['PATH_INFO'] = '/'.join(path[2:]) |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
146 # we just remove the first character ('/') |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
147 _env["PATH_INFO"] = req.path_info[1:] |
|
2944
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
148 if _timing: |
|
835ac4013578
added options TrackerDebug and TrackerTiming;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2809
diff
changeset
|
149 _env["CGI_SHOW_TIMING"] = _timing |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
150 _form = cgi.FieldStorage(req, environ=_env) |
|
8103
dd13b3a0ea8d
chore(lint): fix variable shadow builtin (len); proper indent func args.
John Rouillard <rouilj@ieee.org>
parents:
7582
diff
changeset
|
151 _client = _tracker.Client( |
|
dd13b3a0ea8d
chore(lint): fix variable shadow builtin (len); proper indent func args.
John Rouillard <rouilj@ieee.org>
parents:
7582
diff
changeset
|
152 _tracker, Request(req), _env, _form, |
|
dd13b3a0ea8d
chore(lint): fix variable shadow builtin (len); proper indent func args.
John Rouillard <rouilj@ieee.org>
parents:
7582
diff
changeset
|
153 translator=TranslationService.get_translation(_lang, |
|
dd13b3a0ea8d
chore(lint): fix variable shadow builtin (len); proper indent func args.
John Rouillard <rouilj@ieee.org>
parents:
7582
diff
changeset
|
154 tracker_home=_home) |
|
dd13b3a0ea8d
chore(lint): fix variable shadow builtin (len); proper indent func args.
John Rouillard <rouilj@ieee.org>
parents:
7582
diff
changeset
|
155 ) |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
156 _client.main() |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
157 return apache.OK |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
158 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
159 # vim: set et sts=4 sw=4 : |
