parent
1a479dacbc
commit
0ff82e1c05
|
@ -7,24 +7,17 @@
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="p-2">
|
<div class="p-2">
|
||||||
|
|
||||||
<h1>Software error: {{ tb.exception_type }}</h1>
|
<h1>Software error: {{ exception_type }}</h1>
|
||||||
<div>
|
<div>
|
||||||
<pre>{{ tb.exception }}</pre>
|
<pre>{{ exception }}</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% set body %}
|
|
||||||
URL: {{ request.url }}
|
|
||||||
|
|
||||||
{{ tb.plaintext | safe }}
|
|
||||||
{% endset %}
|
|
||||||
|
|
||||||
<p><a class="btn btn-primary btn-lg" role="button" href="https://github.com/EdwardBetts/dab-mechanic/issues/new?title={{ tb.exception + " " + request.url | urlencode }}&body={{ body | urlencode }}">Submit as an issue on GitHub</a> (requires an account with GitHub)</p>
|
|
||||||
|
|
||||||
<h2 class="traceback">Traceback <em>(most recent call last)</em></h2>
|
<h2 class="traceback">Traceback <em>(most recent call last)</em></h2>
|
||||||
{{ tb.render_summary(include_title=False) | safe }}
|
{{ summary | safe }}
|
||||||
|
|
||||||
|
<p>Error in function "{{ last_frame.f_code.co_name }}": {{ last_frame_args | pprint }}</p>
|
||||||
|
<pre>{{ last_frame.f_locals | pprint }}</pre>
|
||||||
|
|
||||||
<p>Error in function "{{ last_frame.function_name }}": {{ last_frame_args | pprint }}</p>
|
|
||||||
<pre>{{ last_frame.locals | pprint }}</pre>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
25
web_view.py
25
web_view.py
|
@ -3,6 +3,8 @@
|
||||||
import inspect
|
import inspect
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
|
import sys
|
||||||
|
import traceback
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
import flask
|
import flask
|
||||||
|
@ -10,7 +12,7 @@ import lxml.html
|
||||||
import requests
|
import requests
|
||||||
import werkzeug.exceptions
|
import werkzeug.exceptions
|
||||||
from requests_oauthlib import OAuth1Session
|
from requests_oauthlib import OAuth1Session
|
||||||
from werkzeug.debug.tbtools import get_current_traceback
|
from werkzeug.debug.tbtools import DebugTraceback
|
||||||
from werkzeug.wrappers import Response
|
from werkzeug.wrappers import Response
|
||||||
|
|
||||||
from dab_mechanic import mediawiki_api, wikidata_oauth, wikipedia
|
from dab_mechanic import mediawiki_api, wikidata_oauth, wikipedia
|
||||||
|
@ -32,14 +34,25 @@ def global_user() -> None:
|
||||||
|
|
||||||
|
|
||||||
@app.errorhandler(werkzeug.exceptions.InternalServerError)
|
@app.errorhandler(werkzeug.exceptions.InternalServerError)
|
||||||
def exception_handler(e):
|
def exception_handler(e: werkzeug.exceptions.InternalServerError) -> tuple[str, int]:
|
||||||
tb = get_current_traceback()
|
"""Handle exception."""
|
||||||
last_frame = next(frame for frame in reversed(tb.frames) if not frame.is_library)
|
exec_type, exc_value, current_traceback = sys.exc_info()
|
||||||
last_frame_args = inspect.getargs(last_frame.code)
|
assert exc_value
|
||||||
|
tb = DebugTraceback(exc_value)
|
||||||
|
|
||||||
|
summary = tb.render_traceback_html(include_title=False)
|
||||||
|
exc_lines = "".join(tb._te.format_exception_only())
|
||||||
|
|
||||||
|
last_frame = list(traceback.walk_tb(current_traceback))[-1][0]
|
||||||
|
last_frame_args = inspect.getargs(last_frame.f_code)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
flask.render_template(
|
flask.render_template(
|
||||||
"show_error.html",
|
"show_error.html",
|
||||||
tb=tb,
|
plaintext=tb.render_traceback_text(),
|
||||||
|
exception=exc_lines,
|
||||||
|
exception_type=tb._te.exc_type.__name__,
|
||||||
|
summary=summary,
|
||||||
last_frame=last_frame,
|
last_frame=last_frame,
|
||||||
last_frame_args=last_frame_args,
|
last_frame_args=last_frame_args,
|
||||||
),
|
),
|
||||||
|
|
Loading…
Reference in a new issue