/usr/lib/python3/dist-packages/webtest/debugapp.py is in python3-webtest 2.0.14-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | import os
import six
import webob
__all__ = ['DebugApp', 'make_debug_app']
class DebugApp(object):
"""The WSGI application used for testing"""
def __init__(self, form=None, show_form=False):
if os.path.isfile(form):
fd = open(form, 'rb')
self.form = fd.read()
fd.close()
else:
self.form = form
self.show_form = show_form
def __call__(self, environ, start_response):
req = webob.Request(environ)
if req.path_info == '/form.html' and req.method == 'GET':
resp = webob.Response(content_type='text/html')
resp.body = self.form
return resp(environ, start_response)
if 'error' in req.GET:
raise Exception('Exception requested')
if 'errorlog' in req.GET:
log = req.GET['errorlog']
if not six.PY3 and not isinstance(log, six.binary_type):
log = log.encode('utf8')
req.environ['wsgi.errors'].write(log)
status = str(req.GET.get('status', '200 OK'))
parts = []
if not self.show_form:
for name, value in sorted(environ.items()):
if name.upper() != name:
value = repr(value)
parts.append(str('%s: %s\n') % (name, value))
body = ''.join(parts)
if not isinstance(body, six.binary_type):
body = body.encode('ascii')
if req.content_length:
body += six.b('-- Body ----------\n')
body += req.body
else:
body = ''
for name, value in req.POST.items():
body += '%s=%s\n' % (name, value)
if status[:3] in ('204', '304') and not req.content_length:
body = ''
headers = [
('Content-Type', str('text/plain')),
('Content-Length', str(len(body)))]
if not self.show_form:
for name, value in req.GET.items():
if name.startswith('header-'):
header_name = name[len('header-'):]
if isinstance(header_name, six.text_type):
header_name = str(header_name)
header_name = header_name.title()
headers.append((header_name, str(value)))
resp = webob.Response()
resp.status = status
resp.headers.update(headers)
if req.method != 'HEAD':
if isinstance(body, six.text_type):
resp.body = body.encode('utf8')
else:
resp.body = body
return resp(environ, start_response)
debug_app = DebugApp(form=six.b('''<html><body>
<form action="/form-submit" method="POST">
<input type="text" name="name">
<input type="submit" name="submit" value="Submit!">
</form></body></html>'''))
def make_debug_app(global_conf, **local_conf):
"""An application that displays the request environment, and does
nothing else (useful for debugging and test purposes).
"""
return DebugApp(**local_conf)
|