Mercurial > p > roundup > code
annotate roundup/cgi/wsgi_handler.py @ 8519:19152fd94fcf
bug: move import findargspec out of Permission __init__ method
We have a few places where imports are done inside a method/function.
For methods that are called once it's not an issue but the Permissions
__init__ method is called often and accounts for > 10% of the time in
the __init__ function when looking at wsgi-lineprof output.
So move it to the module level.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Mon, 02 Feb 2026 23:41:36 -0500 |
| parents | b09ef85f0da6 |
| children | f80c566f5726 |
| rev | line source |
|---|---|
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1 # WSGI interface for Roundup Issue Tracker |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2 # |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3 # This module is free software, you may redistribute it |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
4 # and/or modify under the same terms as Python. |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
5 # |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
6 |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
7 import os |
|
6080
274c2c082f68
factor out get_tracker so we can potentially customise if we want to reuse
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6061
diff
changeset
|
8 from contextlib import contextmanager |
|
274c2c082f68
factor out get_tracker so we can potentially customise if we want to reuse
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6061
diff
changeset
|
9 |
|
7820
da4c51effdfd
chore(lint): fix imports, normalize trailing , on list/tuple
John Rouillard <rouilj@ieee.org>
parents:
7819
diff
changeset
|
10 import roundup.instance |
|
da4c51effdfd
chore(lint): fix imports, normalize trailing , on list/tuple
John Rouillard <rouilj@ieee.org>
parents:
7819
diff
changeset
|
11 from roundup.anypy import http_ |
|
5837
883c9e90b403
Fix problem with cgi.escape being depricated a different way. This way
John Rouillard <rouilj@ieee.org>
parents:
5823
diff
changeset
|
12 from roundup.anypy.html import html_escape |
|
7820
da4c51effdfd
chore(lint): fix imports, normalize trailing , on list/tuple
John Rouillard <rouilj@ieee.org>
parents:
7819
diff
changeset
|
13 from roundup.anypy.strings import s2b |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
14 from roundup.cgi import TranslationService |
|
5945
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
15 from roundup.cgi.client import BinaryFieldStorage |
|
8487
b09ef85f0da6
feat: add nanoid pkg trace_id gen and decorator for setting processName
John Rouillard <rouilj@ieee.org>
parents:
8465
diff
changeset
|
16 from roundup.logcontext import gen_trace_id, set_processName, store_trace_reason |
|
5945
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
17 |
|
5409
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
18 BaseHTTPRequestHandler = http_.server.BaseHTTPRequestHandler |
|
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
19 DEFAULT_ERROR_MESSAGE = http_.server.DEFAULT_ERROR_MESSAGE |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
20 |
|
7556
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
7228
diff
changeset
|
21 try: |
|
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
7228
diff
changeset
|
22 # python2 is missing this definition |
|
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
7228
diff
changeset
|
23 http_.server.BaseHTTPRequestHandler.responses[429] |
|
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
7228
diff
changeset
|
24 except KeyError: |
|
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
7228
diff
changeset
|
25 http_.server.BaseHTTPRequestHandler.responses[429] = ( |
|
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
7228
diff
changeset
|
26 'Too Many Requests', |
|
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
7228
diff
changeset
|
27 'The user has sent too many requests in ' |
|
7820
da4c51effdfd
chore(lint): fix imports, normalize trailing , on list/tuple
John Rouillard <rouilj@ieee.org>
parents:
7819
diff
changeset
|
28 'a given amount of time ("rate limiting")', |
|
7556
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
7228
diff
changeset
|
29 ) |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
30 |
|
7834
dbeb6bf056c7
chore(lint): _ unused var; replace assert wth if/raise; whitespace
John Rouillard <rouilj@ieee.org>
parents:
7820
diff
changeset
|
31 |
| 5821 | 32 class Headers(object): |
| 33 """ Idea more or less stolen from the 'apache.py' in same directory. | |
| 34 Except that wsgi stores http headers in environment. | |
| 35 """ | |
| 36 def __init__(self, environ): | |
| 37 self.environ = environ | |
| 38 | |
| 39 def mangle_name(self, name): | |
|
5823
edd9e2c67785
Make REST-API updates work with WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5821
diff
changeset
|
40 """ Content-Type is handled specially, it doesn't have a HTTP_ |
|
edd9e2c67785
Make REST-API updates work with WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5821
diff
changeset
|
41 prefix in cgi. |
|
edd9e2c67785
Make REST-API updates work with WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5821
diff
changeset
|
42 """ |
| 5821 | 43 n = name.replace('-', '_').upper() |
|
5823
edd9e2c67785
Make REST-API updates work with WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5821
diff
changeset
|
44 if n == 'CONTENT_TYPE': |
|
edd9e2c67785
Make REST-API updates work with WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5821
diff
changeset
|
45 return n |
| 5821 | 46 return 'HTTP_' + n |
| 47 | |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
48 def get(self, name, default=None): |
| 5821 | 49 return self.environ.get(self.mangle_name(name), default) |
| 50 getheader = get | |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
52 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 class Writer(object): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 '''Perform a start_response if need be when we start writing.''' |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 def __init__(self, request): |
|
7228
07ce4e4110f5
flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents:
6747
diff
changeset
|
56 self.request = request # weakref.ref(request) |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
57 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 def write(self, data): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
59 f = self.request.get_wfile() |
|
6083
f74d078cfd9a
issue2551019 needs to be handled in the action code itself, not the WSGI handler
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6080
diff
changeset
|
60 self.write = f |
|
5609
dccf9b7e5ee4
Fix CSV export with WSGI and Python 3 (issue2551019).
Tom Ekberg <tekberg@uw.edu>
parents:
5539
diff
changeset
|
61 return self.write(data) |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
62 |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
63 |
|
6084
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
64 class RequestHandler(object): |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
65 def __init__(self, environ, start_response): |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
66 self.__start_response = start_response |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
67 self.__wfile = None |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
68 self.headers = Headers(environ) |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
69 self.rfile, self.wfile = None, Writer(self) |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
70 |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
71 def start_response(self, headers, response_code): |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
72 """Set HTTP response code""" |
|
7834
dbeb6bf056c7
chore(lint): _ unused var; replace assert wth if/raise; whitespace
John Rouillard <rouilj@ieee.org>
parents:
7820
diff
changeset
|
73 message, _explain = BaseHTTPRequestHandler.responses[response_code] |
|
6084
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
74 self.__wfile = self.__start_response('%d %s' % (response_code, |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
75 message), headers) |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
76 |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
77 def get_wfile(self): |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
78 if self.__wfile is None: |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
79 raise ValueError('start_response() not called') |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
80 return self.__wfile |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
81 |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
82 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
83 class RequestDispatcher(object): |
|
6747
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
84 def __init__(self, home, debug=False, timing=False, lang=None, |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
85 feature_flags=None): |
|
7834
dbeb6bf056c7
chore(lint): _ unused var; replace assert wth if/raise; whitespace
John Rouillard <rouilj@ieee.org>
parents:
7820
diff
changeset
|
86 if not os.path.isdir(home): |
|
dbeb6bf056c7
chore(lint): _ unused var; replace assert wth if/raise; whitespace
John Rouillard <rouilj@ieee.org>
parents:
7820
diff
changeset
|
87 raise ValueError('%r is not a directory' % (home,)) |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
88 self.home = home |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
89 self.debug = debug |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
90 self.timing = timing |
|
7228
07ce4e4110f5
flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents:
6747
diff
changeset
|
91 self.feature_flags = feature_flags or {} |
|
6747
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
92 self.tracker = None |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
93 if lang: |
|
7228
07ce4e4110f5
flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents:
6747
diff
changeset
|
94 self.translator = TranslationService.get_translation( |
|
07ce4e4110f5
flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents:
6747
diff
changeset
|
95 lang, |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
96 tracker_home=home) |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
97 else: |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
98 self.translator = None |
|
6747
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
99 |
|
8465
617d55f1d518
refactor: replace boolean expr with named function call
John Rouillard <rouilj@ieee.org>
parents:
8446
diff
changeset
|
100 if self.use_cached_tracker(): |
|
6747
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
101 self.tracker = roundup.instance.open(self.home, not self.debug) |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
102 else: |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
103 self.preload() |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
104 |
|
8465
617d55f1d518
refactor: replace boolean expr with named function call
John Rouillard <rouilj@ieee.org>
parents:
8446
diff
changeset
|
105 def use_cached_tracker(self): |
|
617d55f1d518
refactor: replace boolean expr with named function call
John Rouillard <rouilj@ieee.org>
parents:
8446
diff
changeset
|
106 return ( |
|
617d55f1d518
refactor: replace boolean expr with named function call
John Rouillard <rouilj@ieee.org>
parents:
8446
diff
changeset
|
107 "cache_tracker" not in self.feature_flags or |
|
617d55f1d518
refactor: replace boolean expr with named function call
John Rouillard <rouilj@ieee.org>
parents:
8446
diff
changeset
|
108 self.feature_flags["cache_tracker"] is not False) |
|
617d55f1d518
refactor: replace boolean expr with named function call
John Rouillard <rouilj@ieee.org>
parents:
8446
diff
changeset
|
109 |
|
8487
b09ef85f0da6
feat: add nanoid pkg trace_id gen and decorator for setting processName
John Rouillard <rouilj@ieee.org>
parents:
8465
diff
changeset
|
110 @set_processName("wsgi_handler") |
|
8446
14c7c07b32d8
feature: add thread local trace_id and trace_reason to logging.
John Rouillard <rouilj@ieee.org>
parents:
7834
diff
changeset
|
111 @gen_trace_id() |
|
14c7c07b32d8
feature: add thread local trace_id and trace_reason to logging.
John Rouillard <rouilj@ieee.org>
parents:
7834
diff
changeset
|
112 @store_trace_reason("wsgi") |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
113 def __call__(self, environ, start_response): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
114 """Initialize with `apache.Request` object""" |
|
6084
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
115 request = RequestHandler(environ, start_response) |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
116 |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
117 if environ['REQUEST_METHOD'] == 'OPTIONS': |
|
5945
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
118 if environ["PATH_INFO"][:5] == "/rest": |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
119 # rest does support options |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
120 # This I hope will result in self.form=None |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
121 environ['CONTENT_LENGTH'] = 0 |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
122 else: |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
123 code = 501 |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
124 message, explain = BaseHTTPRequestHandler.responses[code] |
|
6387
0da655d1498d
Remove Connection: close header for 501 error handling rest
John Rouillard <rouilj@ieee.org>
parents:
6326
diff
changeset
|
125 request.start_response([('Content-Type', 'text/html')], |
|
0da655d1498d
Remove Connection: close header for 501 error handling rest
John Rouillard <rouilj@ieee.org>
parents:
6326
diff
changeset
|
126 code) |
|
5945
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
127 request.wfile.write(s2b(DEFAULT_ERROR_MESSAGE % locals())) |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
128 return [] |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
129 |
|
6084
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
130 # need to strip the leading '/' |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
131 environ["PATH_INFO"] = environ["PATH_INFO"][1:] |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
132 if self.timing: |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
133 environ["CGI_SHOW_TIMING"] = self.timing |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
134 |
|
6084
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
135 if environ['REQUEST_METHOD'] in ("OPTIONS", "DELETE"): |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
136 # these methods have no data. When we init tracker.Client |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
137 # set form to None to get a properly initialized empty |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
138 # form. |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
139 form = None |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
140 else: |
|
6080
274c2c082f68
factor out get_tracker so we can potentially customise if we want to reuse
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6061
diff
changeset
|
141 form = BinaryFieldStorage(fp=environ['wsgi.input'], environ=environ) |
|
5945
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
142 |
|
8465
617d55f1d518
refactor: replace boolean expr with named function call
John Rouillard <rouilj@ieee.org>
parents:
8446
diff
changeset
|
143 if self.use_cached_tracker(): |
|
6747
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
144 client = self.tracker.Client(self.tracker, request, environ, form, |
|
7228
07ce4e4110f5
flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents:
6747
diff
changeset
|
145 self.translator) |
|
6080
274c2c082f68
factor out get_tracker so we can potentially customise if we want to reuse
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6061
diff
changeset
|
146 try: |
|
274c2c082f68
factor out get_tracker so we can potentially customise if we want to reuse
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6061
diff
changeset
|
147 client.main() |
|
274c2c082f68
factor out get_tracker so we can potentially customise if we want to reuse
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6061
diff
changeset
|
148 except roundup.cgi.client.NotFound: |
|
274c2c082f68
factor out get_tracker so we can potentially customise if we want to reuse
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6061
diff
changeset
|
149 request.start_response([('Content-Type', 'text/html')], 404) |
|
7228
07ce4e4110f5
flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents:
6747
diff
changeset
|
150 request.wfile.write(s2b('Not found: %s' % |
|
6080
274c2c082f68
factor out get_tracker so we can potentially customise if we want to reuse
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6061
diff
changeset
|
151 html_escape(client.path))) |
|
6747
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
152 else: |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
153 with self.get_tracker() as tracker: |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
154 client = tracker.Client(tracker, request, environ, form, |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
155 self.translator) |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
156 try: |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
157 client.main() |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
158 except roundup.cgi.client.NotFound: |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
159 request.start_response([('Content-Type', 'text/html')], 404) |
|
7228
07ce4e4110f5
flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents:
6747
diff
changeset
|
160 request.wfile.write(s2b('Not found: %s' % |
|
6747
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
161 html_escape(client.path))) |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
162 |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
163 # all body data has been written using wfile |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
164 return [] |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
165 |
|
6326
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
166 def preload(self): |
|
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
167 """ Trigger pre-loading of imports and templates """ |
|
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
168 with self.get_tracker(): |
|
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
169 pass |
|
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
170 |
|
6080
274c2c082f68
factor out get_tracker so we can potentially customise if we want to reuse
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6061
diff
changeset
|
171 @contextmanager |
|
274c2c082f68
factor out get_tracker so we can potentially customise if we want to reuse
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6061
diff
changeset
|
172 def get_tracker(self): |
|
274c2c082f68
factor out get_tracker so we can potentially customise if we want to reuse
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6061
diff
changeset
|
173 # get a new instance for each request |
|
274c2c082f68
factor out get_tracker so we can potentially customise if we want to reuse
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6061
diff
changeset
|
174 yield roundup.instance.open(self.home, not self.debug) |
