Help for web.error.view_debug_error
Sample CLI
gway web.error view-debug-error
Full Code
def view_debug_error(
*,
title="GWAY Debug Error",
message="An error occurred.",
err=None,
status=500,
default=None
):
"""
Render a debug error view with detailed traceback and request info.
"""
from bottle import request, response
import traceback
import html
tb_str = ""
if err:
tb_str = "".join(traceback.format_exception(type(err), err, getattr(err, "__traceback__", None)))
debug_content = f"""
<html>
<head>
<title>{html.escape(title)}</title>
<style>
body {{ font-family: monospace, sans-serif; background: #23272e; color: #e6e6e6; }}
.traceback {{ background: #16181c; color: #ff8888; padding: 1em; border-radius: 5px; margin: 1em 0; white-space: pre; }}
.kv {{ color: #6ee7b7; }}
.section {{ margin-bottom: 2em; }}
h1 {{ color: #ffa14a; }}
a {{ color: #69f; }}
.copy-btn {{ margin: 1em 0; background:#333;color:#fff;padding:0.4em 0.8em;border-radius:4px;cursor:pointer;border:1px solid #aaa; }}
</style>
</head>
<body>
<h1>{html.escape(title)}</h1>
<div id="debug-content">
<div class="section"><b>Message:</b> {html.escape(str(message) or "")}</div>
<div class="section"><b>Error:</b> {html.escape(str(err) or "")}</div>
<div class="section"><b>Path:</b> {html.escape(request.path or "")}<br>
<b>Method:</b> {html.escape(request.method or "")}<br>
<b>Full URL:</b> {html.escape(request.url or "")}</div>
<div class="section"><b>Query:</b> {html.escape(str(dict(request.query)) or "")}</div>
<div class="section"><b>Form:</b> {html.escape(str(getattr(request, "forms", "")) or "")}</div>
<div class="section"><b>Headers:</b> {html.escape(str(dict(request.headers)) or "")}</div>
<div class="section"><b>Cookies:</b> {html.escape(str(dict(request.cookies)) or "")}</div>
<div class="section"><b>Traceback:</b>
<div class="traceback">{html.escape(tb_str or '(no traceback)')}</div>
</div>
</div>
<div><a href="{html.escape(default or gw.web.app.default_home())}">← Back to home</a></div>
</body>
</html>
"""
response.status = status
response.content_type = "text/html"
return debug_content