import logging
from flask import jsonify, request
logger = logging.getLogger(__name__)
[docs]
def handle_error(error):
"""
Global error handler for consistent error logging and responses
"""
# Determine status code and message
if hasattr(error, "code"):
code = error.code
message = getattr(error, "description", str(error))
elif hasattr(error, "status_code"):
code = error.status_code
message = getattr(error, "message", str(error))
else:
code = 500
message = "Internal server error"
logger.error(
"unhandled exception",
exc_info=error,
extra={
"error_type": error.__class__.__name__,
"status_code": code,
"method": request.method,
"path": request.path,
},
)
return (
jsonify(
{
"path": request.path,
"method": request.method,
"error_type": error.__class__.__name__,
"message": message,
"status_code": code,
}
),
code,
)
[docs]
def init_error_handler(app):
"""Register error handlers with Flask app"""
logger.info("Registering error handler")
# Register for all exceptions
app.register_error_handler(Exception, handle_error)