Spaces:
Sleeping
Sleeping
| """ | |
| Custom exception handler for Django REST Framework | |
| Développé par Marino ATOHOUN pour Hypee | |
| """ | |
| from rest_framework.views import exception_handler | |
| from rest_framework.response import Response | |
| from rest_framework import status | |
| def custom_exception_handler(exc, context): | |
| """ | |
| Gestionnaire d'exceptions personnalisé pour DRF | |
| Ajoute des informations supplémentaires aux réponses d'erreur | |
| et standardise le format de retour. | |
| """ | |
| # Appeler le gestionnaire par défaut de DRF | |
| response = exception_handler(exc, context) | |
| if response is not None: | |
| # Standardiser le format de réponse d'erreur | |
| custom_response_data = { | |
| 'error': True, | |
| 'status_code': response.status_code, | |
| 'message': None, | |
| 'details': response.data | |
| } | |
| # Essayer d'extraire un message clair | |
| if isinstance(response.data, dict): | |
| if 'detail' in response.data: | |
| custom_response_data['message'] = response.data['detail'] | |
| elif 'non_field_errors' in response.data: | |
| custom_response_data['message'] = response.data['non_field_errors'][0] | |
| else: | |
| # Prendre le premier message d'erreur trouvé | |
| for field, errors in response.data.items(): | |
| if isinstance(errors, list) and errors: | |
| custom_response_data['message'] = f"{field}: {errors[0]}" | |
| break | |
| # Message par défaut selon le code de statut | |
| if not custom_response_data['message']: | |
| if response.status_code == 400: | |
| custom_response_data['message'] = "Données invalides" | |
| elif response.status_code == 401: | |
| custom_response_data['message'] = "Authentification requise" | |
| elif response.status_code == 403: | |
| custom_response_data['message'] = "Accès refusé" | |
| elif response.status_code == 404: | |
| custom_response_data['message'] = "Ressource non trouvée" | |
| elif response.status_code == 500: | |
| custom_response_data['message'] = "Erreur serveur interne" | |
| else: | |
| custom_response_data['message'] = "Une erreur est survenue" | |
| response.data = custom_response_data | |
| return response | |