From d292b6562b5ee8a12046b95f20b5e4bbdeece6c5 Mon Sep 17 00:00:00 2001 From: "zhenyu (Eric) Liu" Date: Fri, 31 May 2024 11:02:57 +1000 Subject: [PATCH 1/2] fix the format_errors bug when data is None --- .../tests/unit/test_default_drf_serializers.py | 15 ++++++++++++++- example/views.py | 18 +++++++++++++++--- rest_framework_json_api/utils.py | 2 +- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/example/tests/unit/test_default_drf_serializers.py b/example/tests/unit/test_default_drf_serializers.py index 87231896..ba668d8d 100644 --- a/example/tests/unit/test_default_drf_serializers.py +++ b/example/tests/unit/test_default_drf_serializers.py @@ -1,5 +1,6 @@ import json from datetime import datetime +import logging import pytest from django.urls import reverse @@ -73,7 +74,6 @@ def test_render_format_field_names(db, settings, entry): def test_blog_create(client): url = reverse("drf-entry-blog-list") name = "Dummy Name" - request_data = { "data": {"attributes": {"name": name}, "type": "blogs"}, } @@ -104,6 +104,19 @@ def test_blog_create(client): assert resp.json() == expected +@pytest.mark.django_db +def test_rest_action_request(client): + url = reverse("drf-entry-blog-list") + "/actions/custom_response" + name = "Dummy Name" + request_data = { + "data": {"attributes": {"name": name}, "type": "blogs"}, + } + + resp = client.post(url, request_data) + + assert resp.status_code == 400 + + @pytest.mark.django_db def test_get_object_gives_correct_blog(client, blog, entry): url = reverse("drf-entry-blog-detail", kwargs={"entry_pk": entry.id}) diff --git a/example/views.py b/example/views.py index 9c949684..a85f8197 100644 --- a/example/views.py +++ b/example/views.py @@ -1,9 +1,11 @@ +import logging import rest_framework.exceptions as exceptions import rest_framework.parsers import rest_framework.renderers from django_filters import rest_framework as filters from rest_framework.filters import SearchFilter - +from rest_framework.response import Response +from rest_framework.decorators import action import rest_framework_json_api.metadata import rest_framework_json_api.parsers import rest_framework_json_api.renderers @@ -74,6 +76,18 @@ def get_object(self): return super().get_object() + @action(url_path="actions/custom_response", detail=False, methods=["post"]) + def custom_response(self, request): + data = request.data + serializer = self.get_serializer(data=data) + serializer.is_valid(raise_exception=True) + self.perform_create(serializer) + try: + test = 1/0 + except Exception: + return Response(status=400) + + return Response(status=201) class JsonApiViewSet(ModelViewSet): """ @@ -254,7 +268,6 @@ def get_queryset(self, *args, **kwargs): return queryset - class CompanyViewset(ModelViewSet): queryset = Company.objects.all() serializer_class = CompanySerializer @@ -273,7 +286,6 @@ class ProjectTypeViewset(ModelViewSet): class EntryRelationshipView(RelationshipView): queryset = Entry.objects.all() - class BlogRelationshipView(RelationshipView): queryset = Blog.objects.all() diff --git a/rest_framework_json_api/utils.py b/rest_framework_json_api/utils.py index e12080ac..66b46435 100644 --- a/rest_framework_json_api/utils.py +++ b/rest_framework_json_api/utils.py @@ -474,6 +474,6 @@ def format_error_object(message, pointer, response): def format_errors(data): - if len(data) > 1 and isinstance(data, list): + if isinstance(data, list) and len(data) > 1: data.sort(key=lambda x: x.get("source", {}).get("pointer", "")) return {"errors": data} From 7b2832c03aca7c9b66287fe8f6ab600a2b87c01f Mon Sep 17 00:00:00 2001 From: "zhenyu (Eric) Liu" Date: Fri, 31 May 2024 11:09:28 +1000 Subject: [PATCH 2/2] remove unused code --- example/tests/unit/test_default_drf_serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/tests/unit/test_default_drf_serializers.py b/example/tests/unit/test_default_drf_serializers.py index ba668d8d..c078dc06 100644 --- a/example/tests/unit/test_default_drf_serializers.py +++ b/example/tests/unit/test_default_drf_serializers.py @@ -1,6 +1,5 @@ import json from datetime import datetime -import logging import pytest from django.urls import reverse @@ -74,6 +73,7 @@ def test_render_format_field_names(db, settings, entry): def test_blog_create(client): url = reverse("drf-entry-blog-list") name = "Dummy Name" + request_data = { "data": {"attributes": {"name": name}, "type": "blogs"}, } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy