annotate roundup/cgi/wsgi_handler.py @ 7478:e8d2a4bca16a

Update index. Add "track your issues your way" tag line and... Add description of benefits to some of the noteworthy changes. Add GTD "thing management" from old email in the 1.6 time period. Reverse order of fast gratification so source directory is first then venv install. Match the first line that says you don't have to install.
author John Rouillard <rouilj@ieee.org>
date Sun, 11 Jun 2023 21:32:46 -0400
parents 07ce4e4110f5
children 273c8c2b5042
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
e7b30ab60941 Fix REST API for WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5800
diff changeset
25 class Headers(object):
e7b30ab60941 Fix REST API for WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5800
diff changeset
26 """ Idea more or less stolen from the 'apache.py' in same directory.
e7b30ab60941 Fix REST API for WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5800
diff changeset
27 Except that wsgi stores http headers in environment.
e7b30ab60941 Fix REST API for WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5800
diff changeset
28 """
e7b30ab60941 Fix REST API for WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5800
diff changeset
29 def __init__(self, environ):
e7b30ab60941 Fix REST API for WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5800
diff changeset
30 self.environ = environ
e7b30ab60941 Fix REST API for WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5800
diff changeset
31
e7b30ab60941 Fix REST API for WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5800
diff changeset
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
e7b30ab60941 Fix REST API for WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5800
diff changeset
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
e7b30ab60941 Fix REST API for WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5800
diff changeset
39 return 'HTTP_' + n
e7b30ab60941 Fix REST API for WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5800
diff changeset
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
e7b30ab60941 Fix REST API for WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5800
diff changeset
42 return self.environ.get(self.mangle_name(name), default)
e7b30ab60941 Fix REST API for WSGI
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5800
diff changeset
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):
7228
07ce4e4110f5 flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
49 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
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):
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6387
diff changeset
77 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
78 feature_flags=None):
6061
82816000aef3 Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents: 5945
diff changeset
79 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
80 self.home = home
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 self.debug = debug
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 self.timing = timing
7228
07ce4e4110f5 flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
83 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
84 self.tracker = None
3736
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 if lang:
7228
07ce4e4110f5 flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
86 self.translator = TranslationService.get_translation(
07ce4e4110f5 flake8 fixes: whitespace, remove unused imports
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
87 lang,
3736
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 tracker_home=home)
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 else:
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 self.translator = None
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6387
diff changeset
91
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6387
diff changeset
92 if "cache_tracker" in self.feature_flags:
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6387
diff changeset
93 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
94 else:
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6387
diff changeset
95 self.preload()
3736
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97 def __call__(self, environ, start_response):
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
98 """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
99 request = RequestHandler(environ, start_response)
3736
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100
6061
82816000aef3 Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents: 5945
diff changeset
101 if environ['REQUEST_METHOD'] == 'OPTIONS':
5945
40f5b20d1e70 issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
102 if environ["PATH_INFO"][:5] == "/rest":
40f5b20d1e70 issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
103 # rest does support options
40f5b20d1e70 issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
104 # 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
105 environ['CONTENT_LENGTH'] = 0
40f5b20d1e70 issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
106 else:
40f5b20d1e70 issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
107 code = 501
40f5b20d1e70 issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
108 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
109 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
110 code)
5945
40f5b20d1e70 issue2551047: Fix crashes in DELETE, OPTIONS, PATCH
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
111 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
112 return []
6061
82816000aef3 Flake8 whitespace changes, removal of unused import cgi.
John Rouillard <rouilj@ieee.org>
parents: 5945
diff changeset
113
6084
3cba8949bfe0 reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6083
diff changeset
114 # 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
115 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
116 if self.timing:
3cba8949bfe0 reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6083
diff changeset
117 environ["CGI_SHOW_TIMING"] = self.timing
3736
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
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 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
120 # 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
121 # 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
122 # form.
3cba8949bfe0 reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6083
diff changeset
123 form = None
3cba8949bfe0 reworked WSGI interface to not use the RequestDispatcher class for two
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6083
diff changeset
124 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
125 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
126
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6387
diff changeset
127 if "cache_tracker" in self.feature_flags:
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6387
diff changeset
128 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
129 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
130 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
131 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
132 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
133 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
134 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
135 html_escape(client.path)))
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6387
diff changeset
136 else:
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6387
diff changeset
137 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
138 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
139 self.translator)
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6387
diff changeset
140 try:
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6387
diff changeset
141 client.main()
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6387
diff changeset
142 except roundup.cgi.client.NotFound:
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6387
diff changeset
143 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
144 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
145 html_escape(client.path)))
3736
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
146
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147 # 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
148 return []
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
149
6326
0343b6fea4b9 Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6321
diff changeset
150 def preload(self):
0343b6fea4b9 Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6321
diff changeset
151 """ Trigger pre-loading of imports and templates """
0343b6fea4b9 Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6321
diff changeset
152 with self.get_tracker():
0343b6fea4b9 Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6321
diff changeset
153 pass
0343b6fea4b9 Factor preloading into a preload method
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6321
diff changeset
154
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
155 @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
156 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
157 # 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
158 yield roundup.instance.open(self.home, not self.debug)

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