From 0fe0f4e1b76be20688064c297deb98eadb9afe15 Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Wed, 23 Jun 2021 09:52:38 +0200 Subject: [PATCH 1/4] Preserve messages for wrapped Django exceptions --- rest_framework/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rest_framework/views.py b/rest_framework/views.py index 5b06220691..4c30029fdc 100644 --- a/rest_framework/views.py +++ b/rest_framework/views.py @@ -79,9 +79,9 @@ def exception_handler(exc, context): to be raised. """ if isinstance(exc, Http404): - exc = exceptions.NotFound() + exc = exceptions.NotFound(*(exc.args)) elif isinstance(exc, PermissionDenied): - exc = exceptions.PermissionDenied() + exc = exceptions.PermissionDenied(*(exc.args)) if isinstance(exc, exceptions.APIException): headers = {} From 5e0a31d39b63e38d281a9ce0b0d1082fef0f858e Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Wed, 27 Jul 2022 11:06:43 +0200 Subject: [PATCH 2/4] Fix the test --- tests/test_generics.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/test_generics.py b/tests/test_generics.py index 2907d27733..f57b70b239 100644 --- a/tests/test_generics.py +++ b/tests/test_generics.py @@ -11,6 +11,7 @@ BasicModel, ForeignKeySource, ForeignKeyTarget, RESTFrameworkModel, UUIDForeignKeyTarget ) +from rest_framework.exceptions import ErrorDetail factory = APIRequestFactory() @@ -519,7 +520,8 @@ def test_get_instance_view_filters_out_name_with_filter_backend(self): request = factory.get('/1') response = instance_view(request, pk=1).render() assert response.status_code == status.HTTP_404_NOT_FOUND - assert response.data == {'detail': 'Not found.'} + assert response.data == { + 'detail': ErrorDetail(string='No BasicModel matches the given query.', code='not_found')} def test_get_instance_view_will_return_single_object_when_filter_does_not_exclude_it(self): """ From 4774cfef77116e798f04aafb48a26bdab9b066f1 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Tue, 11 Oct 2022 11:52:35 +0100 Subject: [PATCH 3/4] Update test_generics.py --- tests/test_generics.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/test_generics.py b/tests/test_generics.py index f57b70b239..2f2bff0e7c 100644 --- a/tests/test_generics.py +++ b/tests/test_generics.py @@ -521,7 +521,11 @@ def test_get_instance_view_filters_out_name_with_filter_backend(self): response = instance_view(request, pk=1).render() assert response.status_code == status.HTTP_404_NOT_FOUND assert response.data == { - 'detail': ErrorDetail(string='No BasicModel matches the given query.', code='not_found')} + 'detail': ErrorDetail( + string='No BasicModel matches the given query.', + code='not_found' + ) + } def test_get_instance_view_will_return_single_object_when_filter_does_not_exclude_it(self): """ From 4ef020a065cdf1c9d0eb81f25f736b0a580c3e38 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Tue, 11 Oct 2022 11:55:14 +0100 Subject: [PATCH 4/4] Update test_generics.py --- tests/test_generics.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_generics.py b/tests/test_generics.py index 2f2bff0e7c..78dc5afb64 100644 --- a/tests/test_generics.py +++ b/tests/test_generics.py @@ -5,13 +5,13 @@ from django.test import TestCase from rest_framework import generics, renderers, serializers, status +from rest_framework.exceptions import ErrorDetail from rest_framework.response import Response from rest_framework.test import APIRequestFactory from tests.models import ( BasicModel, ForeignKeySource, ForeignKeyTarget, RESTFrameworkModel, UUIDForeignKeyTarget ) -from rest_framework.exceptions import ErrorDetail factory = APIRequestFactory()