-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patherrors.py
More file actions
31 lines (28 loc) · 1 KB
/
errors.py
File metadata and controls
31 lines (28 loc) · 1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from flask import jsonify
from functools import wraps
import logging
import mysql.connector
import redis
# Custom exceptions
class APIError(Exception):
def __init__(self, message: str, status_code: int = 400):
self.message = message
self.status_code = status_code
super().__init__(message)
def handle_errors(f):
@wraps(f)
def decorated(*args, **kwargs):
try:
return f(*args, **kwargs)
except APIError as e:
return jsonify({"error": e.message}), e.status_code
except mysql.connector.Error as e:
logging.error(f"MySQL error: {e}")
return jsonify({"error": "Internal server error"}), 500
except redis.RedisError as e:
logging.error(f"Redis error: {e}")
return jsonify({"error": "Internal server error"}), 500
except Exception as e:
logging.exception(f"Unhandled exception: {e}")
return jsonify({"error": "Internal server error"}), 500
return decorated