Fix error handling
This commit is contained in:
parent
3a6556bd76
commit
6b558086c1
46
web_view.py
46
web_view.py
|
@ -2,8 +2,11 @@
|
||||||
|
|
||||||
"""Views for the web app."""
|
"""Views for the web app."""
|
||||||
|
|
||||||
|
import inspect
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
|
import sys
|
||||||
|
import traceback
|
||||||
import typing
|
import typing
|
||||||
from time import sleep, time
|
from time import sleep, time
|
||||||
|
|
||||||
|
@ -34,8 +37,6 @@ from matcher import (
|
||||||
)
|
)
|
||||||
from matcher.data import property_map
|
from matcher.data import property_map
|
||||||
|
|
||||||
# from werkzeug.debug.tbtools import get_current_traceback
|
|
||||||
|
|
||||||
StrDict = dict[str, typing.Any]
|
StrDict = dict[str, typing.Any]
|
||||||
|
|
||||||
srid = 4326
|
srid = 4326
|
||||||
|
@ -75,6 +76,47 @@ def dict_repr_values(d):
|
||||||
return {key: repr(value) for key, value in d.items()}
|
return {key: repr(value) for key, value in d.items()}
|
||||||
|
|
||||||
|
|
||||||
|
@app.errorhandler(werkzeug.exceptions.InternalServerError)
|
||||||
|
def exception_handler(
|
||||||
|
e: werkzeug.exceptions.InternalServerError,
|
||||||
|
) -> tuple[str | werkzeug.wrappers.Response, int]:
|
||||||
|
"""Handle exception."""
|
||||||
|
exec_type, exc_value, current_traceback = sys.exc_info()
|
||||||
|
assert exc_value
|
||||||
|
tb = werkzeug.debug.tbtools.DebugTraceback(exc_value)
|
||||||
|
|
||||||
|
# summary = tb.render_traceback_html(include_title=False)
|
||||||
|
|
||||||
|
last_frame = list(traceback.walk_tb(current_traceback))[-1][0]
|
||||||
|
last_frame_args = inspect.getargs(last_frame.f_code)
|
||||||
|
if flask.request.path.startswith("/api/"):
|
||||||
|
return (
|
||||||
|
cors_jsonify(
|
||||||
|
{
|
||||||
|
"success": False,
|
||||||
|
"error": tb._te.exc_type.__name__,
|
||||||
|
"traceback": tb.render_traceback_text(),
|
||||||
|
"locals": dict_repr_values(last_frame.f_locals),
|
||||||
|
"last_function": {
|
||||||
|
"name": last_frame.f_code.co_name,
|
||||||
|
"args": repr(last_frame_args),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
),
|
||||||
|
500,
|
||||||
|
)
|
||||||
|
|
||||||
|
return (
|
||||||
|
flask.render_template(
|
||||||
|
"show_error.html",
|
||||||
|
tb=tb,
|
||||||
|
last_frame=last_frame,
|
||||||
|
last_frame_args=last_frame_args,
|
||||||
|
),
|
||||||
|
500,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def cors_jsonify(*args, **kwargs) -> flask.Response:
|
def cors_jsonify(*args, **kwargs) -> flask.Response:
|
||||||
"""Add CORS header to JSON."""
|
"""Add CORS header to JSON."""
|
||||||
response = flask.jsonify(*args, **kwargs)
|
response = flask.jsonify(*args, **kwargs)
|
||||||
|
|
Loading…
Reference in a new issue