Mercurial > p > roundup > code
annotate roundup/cgi/apache.py @ 7836:219fc5804345
issue2551270 - Better templating support for JavaScript
Add (templating) utils.readfile(file, optional=False) and
utils.expandfile(file, token_dict=None, optional=False). Allows
reading an external file (e.g. JavaScript) and inserting it using
tal:contents or equivalent jinja function. expandfile allows setting
a dictionary and tokens in the file of the form "%(token_name)s"
will be replaced in the file with the values from the dict.
See method doc blocks or reference.txt for more info.
Also reordered table in references.txt to be case sensitive
alphabetic. Added a paragraph on using python's help() to get
method/function/... documention blocks.
in templating.py _find method. Added explicit return None calls to all
code paths. Also added internationalization method to the
TemplatingUtils class. Fixed use of 'property' hiding python builtin
of same name.
Added tests for new TemplatingUtils framework to use for testing existing
utils.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Tue, 26 Mar 2024 14:15:46 -0400 |
| parents | 978285986b2c |
| children | dd13b3a0ea8d |
| 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 |
|
6037
495282f62e0c
Flake8 reported unknown var home. Replace with _home in cache.
John Rouillard <rouilj@ieee.org>
parents:
5890
diff
changeset
|
78 def sendfile(self, filename, offset=0, len=-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 |
|
e70643990e9c
Support the use of sendfile() for file transfer, if available.
Stefan Seefeld <stefan@seefeld.name>
parents:
3736
diff
changeset
|
81 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
|
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) |
|
2560
d45f1669599c
added 'TrackerLanguage' option;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2552
diff
changeset
|
151 _client = _tracker.Client(_tracker, Request(req), _env, _form, |
|
7228
07ce4e4110f5
flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents:
6038
diff
changeset
|
152 translator=TranslationService.get_translation(_lang, |
| 6038 | 153 tracker_home=_home)) |
|
2552
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
154 _client.main() |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
155 return apache.OK |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
156 |
|
41fbe26aa2df
mod_python interface for Roundup Issue Tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff
changeset
|
157 # vim: set et sts=4 sw=4 : |
