From 962f4e70114f0c71890380cef478ad1d7c2909d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Thu, 31 Jul 2025 13:59:18 +0200 Subject: [PATCH] error handler --- app.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/app.py b/app.py index 17be17d..8964a3e 100644 --- a/app.py +++ b/app.py @@ -43,6 +43,7 @@ from flask_socketio import SocketIO, emit, join_room from config import Config from PIL import Image, ExifTags, ImageFilter, ImageOps from werkzeug.middleware.proxy_fix import ProxyFix +from werkzeug.exceptions import InternalServerError from sqlalchemy import func, extract, inspect, or_, case, text from sqlalchemy.orm import joinedload from collections import defaultdict, deque @@ -260,10 +261,8 @@ class Receipt(db.Model): shopping_list = db.relationship("ShoppingList", back_populates="receipts") -@app.errorhandler(OperationalError) -def handle_db_error(e): - app.logger.error(f"[Błąd DB] {e}") - +def render_db_unavailable(): + app.logger.error("[Błąd DB] Baza danych niedostępna") if request.accept_mimetypes.best == "application/json": return ( jsonify( @@ -285,6 +284,22 @@ def handle_db_error(e): ) +@app.errorhandler(OperationalError) +def handle_db_error(e): + app.logger.error(f"[Błąd DB] {e}") + return render_db_unavailable() + + +@app.errorhandler(Exception) +def handle_any_exception(e): + orig_exc = getattr(e, "original_exception", None) + if isinstance(e, OperationalError) or isinstance(orig_exc, OperationalError): + app.logger.error(f"[Błąd DB] {orig_exc or e}") + return render_db_unavailable() + + raise e + + def hash_password(password): pepper = app.config["BCRYPT_PEPPER"] peppered = (password + pepper).encode("utf-8")