Source code for webtest.debugapp

import os

import webob

__all__ = ['DebugApp', 'make_debug_app']

[docs]class DebugApp: """The WSGI application used for testing""" def __init__(self, form=None, show_form=False): if form and os.path.isfile(form): fd = open(form, 'rb') self.form = 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'] 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(f'{name}: {value}\n') body = ''.join(parts) if not isinstance(body, bytes): body = body.encode('latin1') if req.content_length: body += b'-- Body ----------\n' body += req.body else: body = '' for name, value in req.POST.items(): body += f'{name}={value}\n' if status[:3] in ('204', '304') and not req.content_length: body = '' headers = [ ('Content-Type', '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, str): 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, str): resp.body = body.encode('utf8') else: resp.body = body return resp(environ, start_response)
debug_app = DebugApp(form=b'''<html><body> <form action="/form-submit" method="POST"> <input type="text" name="name"> <input type="submit" name="submit" value="Submit!"> </form></body></html>''')
[docs]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)