Skip to content

Commit 3e44f4c

Browse files
authored
Merge pull request #64 from Vacasa/bug/UNIT-336_bug_fixes_EntitySwaggerAutoSchema
UNIT-336 bug fixes entity swagger auto schema
2 parents a44050b + 6460834 commit 3e44f4c

File tree

5 files changed

+33
-11
lines changed

5 files changed

+33
-11
lines changed

drf_jsonapi/generators.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
import re
21
from collections import defaultdict
32
from drf_yasg.generators import OpenAPISchemaGenerator as _OpenAPISchemaGenerator
43

5-
path_pattern = re.compile(r"{\w+}")
6-
74

85
class OpenAPISchemaGenerator(_OpenAPISchemaGenerator):
96
"""
@@ -31,7 +28,6 @@ def get_endpoints(self, request):
3128
for path, method, callback in endpoints:
3229
view = self.create_view(callback, method, request)
3330
path = self._gen.coerce_path(path, method, view)
34-
path = path_pattern.sub("{id}", path)
3531
view_paths[path].append((method, view))
3632
view_cls[path] = callback.cls
3733

drf_jsonapi/inspectors.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,13 @@ def get_summary_and_description(self):
5757
summary, description = super().get_summary_and_description()
5858
action = self.view.action
5959
resource_type = self.view.serializer_class.Meta.type
60-
60+
action_value = ACTIONS.get(action, action)
6161
if self.relationship:
6262
summary = "{} {} {}".format(
63-
resource_type, self.relationship, ACTIONS[action]
63+
resource_type, self.relationship, action_value
6464
).title()
6565
else:
66-
summary = "{} {}".format(resource_type, ACTIONS[action]).title()
67-
66+
summary = "{} {}".format(resource_type, action_value).title()
6867
return summary, description
6968

7069
def get_tags(self, operation_keys):
@@ -173,8 +172,8 @@ def get_default_responses(self):
173172
default_schema = self.serializer_to_schema(default_schema) or ""
174173

175174
if default_schema and self.is_list():
176-
default_schema = self.get_paginated_response(
177-
openapi.Schema(type=openapi.TYPE_ARRAY, items=default_schema)
175+
default_schema = openapi.Schema(
176+
type=openapi.TYPE_ARRAY, items=default_schema
178177
)
179178

180179
return OrderedDict({str(default_status): default_schema})

tests/mocks.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,3 +129,18 @@ class TestView(ReadWriteViewSet):
129129
view_name_prefix = "Test Resource"
130130
serializer_class = TestModelSerializer
131131
collection = []
132+
133+
134+
class NonStandardViewSet(ReadWriteViewSet):
135+
view_name_prefix = "Test Resource"
136+
serializer_class = TestModelSerializer
137+
collection = []
138+
139+
def get_item(self, request):
140+
return {
141+
"data": {
142+
"type": "nonstandard",
143+
"id": "97bc4158-2642-4a23-ab67-caf752cf0af1",
144+
"attributes": {},
145+
}
146+
}

tests/test_swagger_generation.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,9 @@ def test_paging_params(self):
2828
names = [param.name for param in parameters]
2929
self.assertTrue("page[size]" in names)
3030
self.assertTrue("page[number]" in names)
31+
32+
def test_non_standard_route(self):
33+
self.assertTrue("/nonstandard/{uuid}" in self.spec.paths)
34+
35+
def test_list_response_schemas_appear(self):
36+
self.assertTrue("200" in self.spec.paths["/test_resources"]["get"].responses)

tests/urls.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
from rest_framework.permissions import AllowAny
77

8-
from .mocks import TestView
8+
from .mocks import TestView, NonStandardViewSet
99

1010
from drf_jsonapi.generators import OpenAPISchemaGenerator
1111
from drf_jsonapi.routers import Router
@@ -35,3 +35,9 @@
3535
router = Router(trailing_slash=False)
3636
router.register(TestView)
3737
urlpatterns += router.urls
38+
39+
non_standard_endpoint = path(
40+
"nonstandard/<uuid>", NonStandardViewSet.as_view({"get": "get_item"})
41+
)
42+
43+
urlpatterns += [non_standard_endpoint]

0 commit comments

Comments
 (0)