Files
TimeTracker/app/utils/error_handlers.py
2025-08-16 21:49:43 +02:00

47 lines
1.7 KiB
Python

from flask import render_template, request, jsonify
from werkzeug.exceptions import HTTPException
import traceback
def register_error_handlers(app):
"""Register error handlers for the application"""
@app.errorhandler(404)
def not_found_error(error):
if request.path.startswith('/api/'):
return jsonify({'error': 'Not found'}), 404
return render_template('errors/404.html'), 404
@app.errorhandler(500)
def internal_error(error):
if request.path.startswith('/api/'):
return jsonify({'error': 'Internal server error'}), 500
return render_template('errors/500.html'), 500
@app.errorhandler(403)
def forbidden_error(error):
if request.path.startswith('/api/'):
return jsonify({'error': 'Forbidden'}), 403
return render_template('errors/403.html'), 403
@app.errorhandler(400)
def bad_request_error(error):
if request.path.startswith('/api/'):
return jsonify({'error': 'Bad request'}), 400
return render_template('errors/400.html'), 400
@app.errorhandler(HTTPException)
def handle_http_exception(error):
if request.path.startswith('/api/'):
return jsonify({'error': error.description}), error.code
return render_template('errors/generic.html', error=error), error.code
@app.errorhandler(Exception)
def handle_exception(error):
# Log the error
app.logger.error(f'Unhandled exception: {error}')
app.logger.error(traceback.format_exc())
if request.path.startswith('/api/'):
return jsonify({'error': 'Internal server error'}), 500
return render_template('errors/500.html'), 500