import inspect import sys from .templating import render_template_string from .wrappers import Response TEMPLATE = """

{{ name }} {{ value }}

""" async def traceback_response() -> Response: type_, value, tb = sys.exc_info() frames = [] while tb: frame = tb.tb_frame try: code = inspect.getsourcelines(frame) except OSError: code = None frames.append({ 'file': inspect.getfile(frame), 'line': frame.f_lineno, 'locals': frame.f_locals, 'code': code, }) tb = tb.tb_next name = type_.__name__ html = await render_template_string(TEMPLATE, frames=reversed(frames), name=name, value=value) return Response(html, 500)