aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2024-06-13 15:04:28 -0500
committerFrederick Muriuki Muriithi2024-06-13 15:04:28 -0500
commit68a43dc318fb7d76544d704752f243b9afed7e52 (patch)
tree31d2fd165058a7296bc44567a4a388ab5280d946
parent31fb2794ffd4b17be35a2e122a8c6605aebaf65b (diff)
downloadgn-uploader-68a43dc318fb7d76544d704752f243b9afed7e52.tar.gz
Handle HTTP errors gracefully.
-rw-r--r--qc_app/errors.py11
-rw-r--r--qc_app/templates/http-error.html18
2 files changed, 28 insertions, 1 deletions
diff --git a/qc_app/errors.py b/qc_app/errors.py
index 1ce0d1f..bcd3543 100644
--- a/qc_app/errors.py
+++ b/qc_app/errors.py
@@ -13,8 +13,17 @@ def handle_general_exception(exc: Exception):
exc.__class__.__module__, exc.__class__.__name__, request.url, trace)
return render_template("unhandled_exception.html", trace=trace)
+def handle_http_exception(exc: HTTPException):
+ """Handle HTTP exceptions."""
+ app.logger.error(
+ "HTTP Error %s: %s", exc.code, exc.description, exc_info=True)
+ return render_template(f"http-error.html",
+ request_url=request.url,
+ exc=exc,
+ trace=traceback.format_exception(exc)), exc.code
+
def register_error_handlers(appl: Flask):
"""Register top-level error/exception handlers."""
appl.register_error_handler(Exception, handle_general_exception)
- appl.register_error_handler(HTTPException, handle_general_exception)
+ appl.register_error_handler(HTTPException, handle_http_exception)
appl.register_error_handler(mdb.MySQLError, handle_general_exception)
diff --git a/qc_app/templates/http-error.html b/qc_app/templates/http-error.html
new file mode 100644
index 0000000..6a74ae8
--- /dev/null
+++ b/qc_app/templates/http-error.html
@@ -0,0 +1,18 @@
+{%extends "base.html"%}
+
+{%block title%}HTTP Error: {{exc.code}}{%endblock%}
+
+{%block contents%}
+<h1>{{exc.code}}: {{exc.description}}</h1>
+
+<div class="row">
+ <p>
+ You attempted to access {{request_url}} which failed with the following
+ error:
+ </p>
+</div>
+
+<div class="row">
+ <pre>{{trace}}</pre>
+</div>
+{%endblock%}