parent
06f2d7f804
commit
8fa13f7335
31
lookup.py
31
lookup.py
|
@ -1,11 +1,15 @@
|
||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
"""Reverse geocode: convert lat/lon to Wikidata item & Wikimedia Commons category."""
|
"""Reverse geocode: convert lat/lon to Wikidata item & Wikimedia Commons category."""
|
||||||
|
|
||||||
|
import inspect
|
||||||
import random
|
import random
|
||||||
import socket
|
import socket
|
||||||
|
import sys
|
||||||
|
import traceback
|
||||||
import typing
|
import typing
|
||||||
|
|
||||||
import sqlalchemy.exc
|
import sqlalchemy.exc
|
||||||
|
import werkzeug.debug.tbtools
|
||||||
from flask import Flask, jsonify, redirect, render_template, request, url_for
|
from flask import Flask, jsonify, redirect, render_template, request, url_for
|
||||||
from sqlalchemy.orm.query import Query
|
from sqlalchemy.orm.query import Query
|
||||||
from werkzeug.wrappers import Response
|
from werkzeug.wrappers import Response
|
||||||
|
@ -24,6 +28,33 @@ Tags = typing.Mapping[str, str]
|
||||||
logging_enabled = True
|
logging_enabled = True
|
||||||
|
|
||||||
|
|
||||||
|
@app.errorhandler(werkzeug.exceptions.InternalServerError)
|
||||||
|
def exception_handler(e: werkzeug.exceptions.InternalServerError) -> tuple[str, 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)
|
||||||
|
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 (
|
||||||
|
render_template(
|
||||||
|
"show_error.html",
|
||||||
|
plaintext=tb.render_traceback_text(),
|
||||||
|
exception=exc_lines,
|
||||||
|
exception_type=tb._te.exc_type.__name__,
|
||||||
|
summary=summary,
|
||||||
|
last_frame=last_frame,
|
||||||
|
last_frame_args=last_frame_args,
|
||||||
|
),
|
||||||
|
500,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_random_lat_lon() -> tuple[float, float]:
|
def get_random_lat_lon() -> tuple[float, float]:
|
||||||
"""Select random lat/lon within the UK."""
|
"""Select random lat/lon within the UK."""
|
||||||
south, east = 50.8520, 0.3536
|
south, east = 50.8520, 0.3536
|
||||||
|
|
23
templates/show_error.html
Normal file
23
templates/show_error.html
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block style %}
|
||||||
|
<link rel="stylesheet" href="{{url_for('static', filename='css/exception.css')}}" />
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="p-2">
|
||||||
|
|
||||||
|
<h1>Software error: {{ exception_type }}</h1>
|
||||||
|
<div>
|
||||||
|
<pre>{{ exception }}</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2 class="traceback">Traceback <em>(most recent call last)</em></h2>
|
||||||
|
{{ summary | safe }}
|
||||||
|
|
||||||
|
<p>Error in function "{{ last_frame.f_code.co_name }}": {{ last_frame_args | pprint }}</p>
|
||||||
|
<pre>{{ last_frame.f_locals | pprint }}</pre>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
Loading…
Reference in a new issue