Spaces:
Sleeping
Sleeping
| 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 |