from __future__ import annotations from pprint import pformat from typing import Any, NoReturn from markupsafe import Markup, escape from plain.http import Response from plain.views.exceptions import ResponseException def dd(*objs: Any) -> NoReturn: """ Dump and die. Dump the object and raise a ResponseException with the dump as the response content. """ print_objs = "\n".join([pformat(obj) for obj in objs]) print(f"Dumping objects:\n{print_objs}") html_objs = [ Markup("
") + escape(pformat(obj)) + Markup("
") for obj in objs ] combined_dump_str = Markup("\n\n").join(html_objs) response = Response() response.status_code = 500 response.content = combined_dump_str response.headers["Content-Type"] = "text/html" raise ResponseException(response)