60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
import logging
|
|
from functools import wraps
|
|
from django.http import JsonResponse
|
|
from django.core.exceptions import ObjectDoesNotExist, ValidationError
|
|
from django.db import DatabaseError, IntegrityError
|
|
|
|
|
|
def handle_exceptions(func):
|
|
|
|
@wraps(func)
|
|
def wrapper(*args, **kwargs):
|
|
try:
|
|
return func(*args, **kwargs)
|
|
|
|
except ValidationError as e:
|
|
logging.error(f"Validierungsfehler in {func.__name__}: {str(e)}")
|
|
return JsonResponse({
|
|
'status': 'error',
|
|
'message': 'Validierungsfehler',
|
|
'error': str(e),
|
|
'data': []
|
|
}, status=400)
|
|
|
|
except ObjectDoesNotExist as e:
|
|
logging.error(f"Objekt nicht gefunden in {func.__name__}: {str(e)}")
|
|
return JsonResponse({
|
|
'status': 'error',
|
|
'message': 'Angeforderte Ressource nicht gefunden',
|
|
'error': str(e),
|
|
'data': []
|
|
}, status=404)
|
|
|
|
except IntegrityError as e:
|
|
logging.error(f"Datenbankintegritätsfehler in {func.__name__}: {str(e)}")
|
|
return JsonResponse({
|
|
'status': 'error',
|
|
'message': 'Datenbankintegritätsfehler',
|
|
'error': str(e),
|
|
'data': []
|
|
}, status=400)
|
|
|
|
except DatabaseError as e:
|
|
logging.error(f"Datenbankfehler in {func.__name__}: {str(e)}")
|
|
return JsonResponse({
|
|
'status': 'error',
|
|
'message': 'Datenbankfehler',
|
|
'error': str(e),
|
|
'data': []
|
|
}, status=500)
|
|
|
|
except Exception as e:
|
|
logging.error(f"Unerwarteter Fehler in {func.__name__}: {str(e)}")
|
|
return JsonResponse({
|
|
'status': 'error',
|
|
'message': 'Ein unerwarteter Fehler ist aufgetreten',
|
|
'error': str(e),
|
|
'data': []
|
|
}, status=500)
|
|
|
|
return wrapper |