From 5698e1f617386c6755089705ca7df12468fedc81 Mon Sep 17 00:00:00 2001 From: Kharec Date: Tue, 11 Nov 2025 05:31:16 +0100 Subject: [PATCH] refactor: extract error handlers --- flado/app.py | 23 ++--------------------- flado/errors.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 21 deletions(-) create mode 100644 flado/errors.py diff --git a/flado/app.py b/flado/app.py index 9131b65..1188666 100644 --- a/flado/app.py +++ b/flado/app.py @@ -9,6 +9,7 @@ from flask_wtf.csrf import CSRFProtect, CSRFError from dotenv import load_dotenv from .blueprints import tasks_blueprint +from .errors import register_error_handlers from .models import db # Determine if we're in production @@ -90,27 +91,7 @@ def create_app(config_name: Optional[str] = None) -> Flask: csrf.exempt('tasks.health_check') # Register error handlers - @app.errorhandler(400) - def bad_request(error) -> Tuple[Response, int]: - """Handle 400 errors with JSON response.""" - return jsonify({'error': 'Bad request', 'message': str(error)}), 400 - - @app.errorhandler(404) - def not_found(error) -> Tuple[Response, int]: - """Handle 404 errors with JSON response.""" - return jsonify({'error': 'Not found', 'message': str(error)}), 404 - - @app.errorhandler(CSRFError) - def handle_csrf_error(e) -> Tuple[Response, int]: - """Handle CSRF errors with JSON response.""" - app.logger.warning(f'CSRF error: {e}') - return jsonify({'error': 'CSRF token missing or invalid'}), 400 - - @app.errorhandler(500) - def internal_error(error) -> Tuple[Response, int]: - """Handle 500 errors with JSON response.""" - app.logger.error(f'Server error: {error}') - return jsonify({'error': 'Internal server error'}), 500 + register_error_handlers(app) # Register blueprints app.register_blueprint(tasks_blueprint) diff --git a/flado/errors.py b/flado/errors.py new file mode 100644 index 0000000..8666442 --- /dev/null +++ b/flado/errors.py @@ -0,0 +1,31 @@ +"""Error handlers for Flask application.""" +from typing import Tuple +from flask import Flask, jsonify, Response +from flask_wtf.csrf import CSRFError +from werkzeug.exceptions import HTTPException + + +def register_error_handlers(app: Flask) -> None: + """Register all error handlers with the Flask app.""" + + @app.errorhandler(400) + def bad_request(error: HTTPException) -> Tuple[Response, int]: + """Handle 400 errors with JSON response.""" + return jsonify({'error': 'Bad request', 'message': str(error)}), 400 + + @app.errorhandler(404) + def not_found(error: HTTPException) -> Tuple[Response, int]: + """Handle 404 errors with JSON response.""" + return jsonify({'error': 'Not found', 'message': str(error)}), 404 + + @app.errorhandler(CSRFError) + def handle_csrf_error(e: CSRFError) -> Tuple[Response, int]: + """Handle CSRF errors with JSON response.""" + app.logger.warning(f'CSRF error: {e}') + return jsonify({'error': 'CSRF token missing or invalid'}), 400 + + @app.errorhandler(500) + def internal_error(error: Exception) -> Tuple[Response, int]: + """Handle 500 errors with JSON response.""" + app.logger.error(f'Server error: {error}') + return jsonify({'error': 'Internal server error'}), 500