Spaces:
Running
Running
File size: 1,529 Bytes
ef287e1 |
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
from rest_framework.views import exception_handler
from rest_framework.exceptions import ValidationError
from rest_framework.response import Response
def custom_exception_handler(exc, context):
"""
Handler personnalisé pour formater les erreurs selon la spec du frontend
Format attendu:
{
"type": "validation_error",
"errors": {
"field_name": ["Error message"]
}
}
"""
# Appeler le handler par défaut de DRF
response = exception_handler(exc, context)
if response is not None:
# Formater les erreurs de validation
if isinstance(exc, ValidationError):
custom_response = {
'type': 'validation_error',
'errors': response.data
}
response.data = custom_response
# Pour les autres erreurs, ajouter un type
else:
error_type = 'error'
if response.status_code == 401:
error_type = 'authentication_error'
elif response.status_code == 403:
error_type = 'permission_error'
elif response.status_code == 404:
error_type = 'not_found_error'
elif response.status_code >= 500:
error_type = 'server_error'
custom_response = {
'type': error_type,
'message': response.data.get('detail', str(exc))
}
response.data = custom_response
return response |