annotate roundup/cgi/apache.py @ 8446:14c7c07b32d8

feature: add thread local trace_id and trace_reason to logging. Added trace_id to default logging so that all logs for a given request share the same trace_id. This allows correlation of logs across a request. admin_guide.txt, upgrading.txt: add docs update sample configs to include trace_id. rewrite logging docs in admin_guide. Hopefully they are clearer now. clean up some stuff in the logging config file docs. admin.py: add decorators to run_command to enable trace_id. change calls to db.commit() to use run_command to get trace_id. configuration.py: clean up imports. update docstrings, comments and inline docs. add trace_id to default log format. add function for testing decorated with trace_id. add support for dumping stack trace in logging. add check for pytest in sys.modules to enable log propagation when pytest is running. Otherwise tests fail as the caplog logger doesn't see the roundup logs. logcontext.py: new file to handle thread local contextvar mangement. mailgw.py: add decorators for trace_id etc. scripts/roundup_xlmrpc_server.py: add decorators for trace_id etc. fix encoding bug turning bytes into a string. fix command line issue where we can't set encoding. (not sure if changing encoding via command line even works) cgi/client.py decorate two entry points for trace_id etc. cgi/wsgi_handler.py: decorate entry point for trace_id etc. test/test_config.py: add test for trace_id in new log format. test various cases for sinfo and errors in formating msg.
author John Rouillard <rouilj@ieee.org>
date Tue, 16 Sep 2025 22:53:00 -0400
parents dd13b3a0ea8d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
020e1d1bf5ba Fix doc typo.
John Rouillard <rouilj@ieee.org>
parents: 5889
diff changeset
13 # mod_python is deprecated and not well tested with release 2.0 of
020e1d1bf5ba Fix doc typo.
John Rouillard <rouilj@ieee.org>
parents: 5889
diff changeset
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
fb1367285bd7 flake8 format changes.
John Rouillard <rouilj@ieee.org>
parents: 6037
diff changeset
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 :

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