Mercurial > p > roundup > code
annotate roundup/cgi/wsgi_handler.py @ 7864:b080cdb8b199
fix: document/fix wrapped HtmlProperty method.
The wrapped method was not documented in reference.txt.
It is now documented in reference.txt. The docstring documented that
it would not break up long words. Fixed by adding
break_long_words=False to prevent breaking string longer than the wrap
length. Wrapping was breaking the hyperlinking of long urls.
Added columns argument to set the wrap length (default 80 columns).
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sun, 07 Apr 2024 15:27:18 -0400 |
| parents | dbeb6bf056c7 |
| children | 14c7c07b32d8 |
| 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 |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
16 |
|
5409
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
17 BaseHTTPRequestHandler = http_.server.BaseHTTPRequestHandler |
|
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
18 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
|
19 |
|
7556
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
7228
diff
changeset
|
20 try: |
|
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
7228
diff
changeset
|
21 # 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
|
22 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
|
23 except KeyError: |
|
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
7228
diff
changeset
|
24 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
|
25 'Too Many Requests', |
|
273c8c2b5042
fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents:
7228
diff
changeset
|
26 '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
|
27 '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
|
28 ) |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
29 |
|
7834
dbeb6bf056c7
chore(lint): _ unused var; replace assert wth if/raise; whitespace
John Rouillard <rouilj@ieee.org>
parents:
7820
diff
changeset
|
30 |
| 5821 | 31 class Headers(object): |
| 32 """ Idea more or less stolen from the 'apache.py' in same directory. | |
| 33 Except that wsgi stores http headers in environment. | |
| 34 """ | |
| 35 def __init__(self, environ): | |
| 36 self.environ = environ | |
| 37 | |
| 38 def mangle_name(self, name): | |
|
5823
edd9e2c67785
Make REST-API updates work with WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5821
diff
changeset
|
39 """ 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
|
40 prefix in cgi. |
|
edd9e2c67785
Make REST-API updates work with WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5821
diff
changeset
|
41 """ |
| 5821 | 42 n = name.replace('-', '_').upper() |
|
5823
edd9e2c67785
Make REST-API updates work with WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5821
diff
changeset
|
43 if n == 'CONTENT_TYPE': |
|
edd9e2c67785
Make REST-API updates work with WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5821
diff
changeset
|
44 return n |
| 5821 | 45 return 'HTTP_' + n |
| 46 | |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
47 def get(self, name, default=None): |
| 5821 | 48 return self.environ.get(self.mangle_name(name), default) |
| 49 getheader = get | |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
50 |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
51 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 class Writer(object): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 '''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
|
54 def __init__(self, request): |
|
7228
07ce4e4110f5
flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents:
6747
diff
changeset
|
55 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
|
56 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
57 def write(self, data): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 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
|
59 self.write = f |
|
5609
dccf9b7e5ee4
Fix CSV export with WSGI and Python 3 (issue2551019).
Tom Ekberg <tekberg@uw.edu>
parents:
5539
diff
changeset
|
60 return self.write(data) |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
61 |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
62 |
|
6084
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
63 class RequestHandler(object): |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
64 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
|
65 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
|
66 self.__wfile = None |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
67 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
|
68 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
|
69 |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
70 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
|
71 """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
|
72 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
|
73 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
|
74 message), headers) |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
75 |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
76 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
|
77 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
|
78 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
|
79 return self.__wfile |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
80 |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
81 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
82 class RequestDispatcher(object): |
|
6747
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
83 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
|
84 feature_flags=None): |
|
7834
dbeb6bf056c7
chore(lint): _ unused var; replace assert wth if/raise; whitespace
John Rouillard <rouilj@ieee.org>
parents:
7820
diff
changeset
|
85 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
|
86 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
|
87 self.home = home |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
88 self.debug = debug |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
89 self.timing = timing |
|
7228
07ce4e4110f5
flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents:
6747
diff
changeset
|
90 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
|
91 self.tracker = None |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
92 if lang: |
|
7228
07ce4e4110f5
flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents:
6747
diff
changeset
|
93 self.translator = TranslationService.get_translation( |
|
07ce4e4110f5
flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents:
6747
diff
changeset
|
94 lang, |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
95 tracker_home=home) |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
96 else: |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
97 self.translator = None |
|
6747
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
98 |
|
7819
0fe2b9f6e19f
issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents:
7556
diff
changeset
|
99 if "cache_tracker" not in self.feature_flags or \ |
|
0fe2b9f6e19f
issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents:
7556
diff
changeset
|
100 self.feature_flags["cache_tracker"] is not False: |
|
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 |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
105 def __call__(self, environ, start_response): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
106 """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
|
107 request = RequestHandler(environ, start_response) |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
108 |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
109 if environ['REQUEST_METHOD'] == 'OPTIONS': |
|
5945
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
110 if environ["PATH_INFO"][:5] == "/rest": |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
111 # rest does support options |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
112 # 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
|
113 environ['CONTENT_LENGTH'] = 0 |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
114 else: |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
115 code = 501 |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
116 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
|
117 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
|
118 code) |
|
5945
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
119 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
|
120 return [] |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
121 |
|
6084
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
122 # 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
|
123 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
|
124 if self.timing: |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
125 environ["CGI_SHOW_TIMING"] = self.timing |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
126 |
|
6084
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
127 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
|
128 # 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
|
129 # 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
|
130 # form. |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
131 form = None |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
132 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
|
133 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
|
134 |
|
7819
0fe2b9f6e19f
issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents:
7556
diff
changeset
|
135 if "cache_tracker" not in self.feature_flags or \ |
|
0fe2b9f6e19f
issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents:
7556
diff
changeset
|
136 self.feature_flags["cache_tracker"] is not False: |
|
6747
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
137 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
|
138 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
|
139 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
|
140 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
|
141 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
|
142 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
|
143 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
|
144 html_escape(client.path))) |
|
6747
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
145 else: |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
146 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
|
147 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
|
148 self.translator) |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
149 try: |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
150 client.main() |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
151 except roundup.cgi.client.NotFound: |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6387
diff
changeset
|
152 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
|
153 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
|
154 html_escape(client.path))) |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
155 |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
156 # 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
|
157 return [] |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
158 |
|
6326
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
159 def preload(self): |
|
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
160 """ Trigger pre-loading of imports and templates """ |
|
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
161 with self.get_tracker(): |
|
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
162 pass |
|
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
163 |
|
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
|
164 @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
|
165 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
|
166 # 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
|
167 yield roundup.instance.open(self.home, not self.debug) |
