Mercurial > p > roundup > code
annotate roundup/cgi/wsgi_handler.py @ 6546:c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
Work was done in 2.0.0 to add support for cache control headers.
This checkin sets default values for javascript (2 weeks) and
css (2 month) files.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Thu, 09 Dec 2021 17:36:08 -0500 |
| parents | 0da655d1498d |
| children | d32d43e4a5ba |
| 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 |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
8 import weakref |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
9 |
|
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
|
10 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
|
11 |
|
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 |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5664
diff
changeset
|
13 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
14 import roundup.instance |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
15 from roundup.cgi import TranslationService |
|
5409
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
16 from roundup.anypy import http_ |
|
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
|
17 from roundup.anypy.strings import s2b |
|
5945
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
18 |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
19 from roundup.cgi.client import BinaryFieldStorage |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
20 |
|
5409
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
21 BaseHTTPRequestHandler = http_.server.BaseHTTPRequestHandler |
|
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
22 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
|
23 |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
24 |
| 5821 | 25 class Headers(object): |
| 26 """ Idea more or less stolen from the 'apache.py' in same directory. | |
| 27 Except that wsgi stores http headers in environment. | |
| 28 """ | |
| 29 def __init__(self, environ): | |
| 30 self.environ = environ | |
| 31 | |
| 32 def mangle_name(self, name): | |
|
5823
edd9e2c67785
Make REST-API updates work with WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5821
diff
changeset
|
33 """ 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
|
34 prefix in cgi. |
|
edd9e2c67785
Make REST-API updates work with WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5821
diff
changeset
|
35 """ |
| 5821 | 36 n = name.replace('-', '_').upper() |
|
5823
edd9e2c67785
Make REST-API updates work with WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5821
diff
changeset
|
37 if n == 'CONTENT_TYPE': |
|
edd9e2c67785
Make REST-API updates work with WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5821
diff
changeset
|
38 return n |
| 5821 | 39 return 'HTTP_' + n |
| 40 | |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
41 def get(self, name, default=None): |
| 5821 | 42 return self.environ.get(self.mangle_name(name), default) |
| 43 getheader = get | |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
45 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 class Writer(object): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 '''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
|
48 def __init__(self, request): |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
49 self.request = request #weakref.ref(request) |
|
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
50 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 def write(self, data): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 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
|
53 self.write = f |
|
5609
dccf9b7e5ee4
Fix CSV export with WSGI and Python 3 (issue2551019).
Tom Ekberg <tekberg@uw.edu>
parents:
5539
diff
changeset
|
54 return self.write(data) |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
56 |
|
6084
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
57 class RequestHandler(object): |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
58 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
|
59 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
|
60 self.__wfile = None |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
61 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
|
62 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
|
63 |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
64 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
|
65 """Set HTTP response code""" |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
66 message, explain = BaseHTTPRequestHandler.responses[response_code] |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
67 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
|
68 message), headers) |
|
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 get_wfile(self): |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
71 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
|
72 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
|
73 return self.__wfile |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
74 |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
75 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
76 class RequestDispatcher(object): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
77 def __init__(self, home, debug=False, timing=False, lang=None): |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
78 assert os.path.isdir(home), '%r is not a directory' % (home,) |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
79 self.home = home |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
80 self.debug = debug |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
81 self.timing = timing |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
82 if lang: |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
83 self.translator = TranslationService.get_translation(lang, |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
84 tracker_home=home) |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
85 else: |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
86 self.translator = None |
|
6326
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
87 self.preload() |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
88 |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
89 def __call__(self, environ, start_response): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
90 """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
|
91 request = RequestHandler(environ, start_response) |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
92 |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
93 if environ['REQUEST_METHOD'] == 'OPTIONS': |
|
5945
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
94 if environ["PATH_INFO"][:5] == "/rest": |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
95 # rest does support options |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
96 # 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
|
97 environ['CONTENT_LENGTH'] = 0 |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
98 else: |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
99 code = 501 |
|
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
100 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
|
101 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
|
102 code) |
|
5945
40f5b20d1e70
issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
103 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
|
104 return [] |
|
6061
82816000aef3
Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents:
5945
diff
changeset
|
105 |
|
6084
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
106 # 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
|
107 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
|
108 if self.timing: |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
109 environ["CGI_SHOW_TIMING"] = self.timing |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
110 |
|
6084
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
111 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
|
112 # 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
|
113 # 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
|
114 # form. |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
115 form = None |
|
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
116 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
|
117 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
|
118 |
|
6084
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
119 with self.get_tracker() as tracker: |
|
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
|
120 client = tracker.Client(tracker, request, environ, form, |
|
6084
3cba8949bfe0
reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6083
diff
changeset
|
121 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
|
122 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
|
123 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
|
124 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
|
125 request.start_response([('Content-Type', 'text/html')], 404) |
|
274c2c082f68
factor out get_tracker so we can potentially customise if we want to reuse
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6061
diff
changeset
|
126 request.wfile.write(s2b('Not found: %s' % |
|
274c2c082f68
factor out get_tracker so we can potentially customise if we want to reuse
Christof Meerwald <cmeerw@cmeerw.org>
parents:
6061
diff
changeset
|
127 html_escape(client.path))) |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
128 |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
129 # 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
|
130 return [] |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
131 |
|
6326
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
132 def preload(self): |
|
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
133 """ Trigger pre-loading of imports and templates """ |
|
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
134 with self.get_tracker(): |
|
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
135 pass |
|
0343b6fea4b9
Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6321
diff
changeset
|
136 |
|
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
|
137 @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
|
138 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
|
139 # 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
|
140 yield roundup.instance.open(self.home, not self.debug) |
