Skip to content

Commit dba2beb

Browse files
author
Dan Schien
committed
interpret drfdocs_exclude field
1 parent 1e1232e commit dba2beb

File tree

5 files changed

+20
-20
lines changed

5 files changed

+20
-20
lines changed

rest_framework_docs/api_docs.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ def get_all_view_names(self, urlpatterns, parent_pattern=None):
2727
self.get_all_view_names(urlpatterns=pattern.url_patterns, parent_pattern=parent_pattern)
2828
elif isinstance(pattern, RegexURLPattern) and self._is_drf_view(pattern) and not self._is_format_endpoint(pattern):
2929
api_endpoint = ApiEndpoint(pattern, parent_pattern)
30-
self.endpoints.append(api_endpoint)
30+
if not api_endpoint.exclude:
31+
self.endpoints.append(api_endpoint)
3132

3233
def _is_drf_view(self, pattern):
3334
"""

rest_framework_docs/api_endpoint.py

+7-8
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66

77
class ApiEndpoint(object):
8-
98
def __init__(self, pattern, parent_pattern=None):
109
self.pattern = pattern
1110
self.callback = pattern.callback
@@ -19,6 +18,7 @@ def __init__(self, pattern, parent_pattern=None):
1918
self.fields = self.__get_serializer_fields__()
2019
self.fields_json = self.__get_serializer_fields_json__()
2120
self.permissions = self.__get_permissions_class__()
21+
self.exclude = getattr(self.callback.cls, 'drfdocs_exclude', False)
2222

2323
def __get_path__(self, parent_pattern):
2424
if parent_pattern:
@@ -42,17 +42,16 @@ def __get_serializer_fields__(self):
4242
serializer = self.callback.cls.serializer_class
4343
if hasattr(serializer, 'get_fields'):
4444
try:
45-
fields = [{
46-
"name": key,
47-
"type": str(field.__class__.__name__),
48-
"required": field.required
49-
} for key, field in serializer().get_fields().items()]
45+
fields = [{"name": key,
46+
"type": str(field.__class__.__name__),
47+
"required": field.required
48+
} for key, field in serializer().get_fields().items()]
5049
except KeyError as e:
5150
self.errors = e
5251
fields = []
5352

54-
# FIXME:
55-
# Show more attibutes of `field`?
53+
# FIXME:
54+
# Show more attibutes of `field`?
5655

5756
return fields
5857

tests/tests.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55

66
class DRFDocsViewTests(TestCase):
7-
87
SETTINGS_HIDE_DOCS = {
98
'HIDE_DOCS': True # Default: False
109
}
@@ -13,7 +12,6 @@ def setUp(self):
1312
super(DRFDocsViewTests, self).setUp()
1413

1514
def test_settings_module(self):
16-
1715
settings = DRFSettings()
1816

1917
self.assertEqual(settings.get_setting("HIDE_DOCS"), False)
@@ -33,7 +31,8 @@ def test_index_view_with_endpoints(self):
3331
self.assertEqual(response.context["endpoints"][0].name_parent, "accounts")
3432
self.assertEqual(response.context["endpoints"][0].allowed_methods, ['POST', 'OPTIONS'])
3533
self.assertEqual(response.context["endpoints"][0].path, "/accounts/login/")
36-
self.assertEqual(response.context["endpoints"][0].docstring, "A view that allows users to login providing their username and password.")
34+
self.assertEqual(response.context["endpoints"][0].docstring,
35+
"A view that allows users to login providing their username and password.")
3736
self.assertEqual(len(response.context["endpoints"][0].fields), 2)
3837
self.assertEqual(response.context["endpoints"][0].fields[0]["type"], "CharField")
3938
self.assertTrue(response.context["endpoints"][0].fields[0]["required"])

tests/urls.py

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
url(r'^user/profile/$', views.UserProfileView.as_view(), name="profile"),
1414

1515
url(r'^test/$', views.TestView.as_view(), name="test-view"),
16+
url(r'^exclude/$', views.ExcludedTestView.as_view(), name="test-exclude"),
1617
]
1718

1819
organisations_urls = [

tests/views.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,18 @@ class TestView(TemplateView):
1919
template_name = "a_test.html"
2020

2121

22+
class ExcludedTestView(APIView):
23+
"""
24+
This view should not be included in DRF Docs.
25+
"""
26+
drfdocs_exclude = True
27+
28+
2229
class LoginView(APIView):
2330
"""
2431
A view that allows users to login providing their username and password.
2532
"""
26-
33+
drfdocs_exclude = False
2734
throttle_classes = ()
2835
permission_classes = ()
2936
parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
@@ -39,7 +46,6 @@ def post(self, request):
3946

4047

4148
class UserRegistrationView(generics.CreateAPIView):
42-
4349
permission_classes = (AllowAny,)
4450
serializer_class = serializers.UserRegistrationSerializer
4551

@@ -56,7 +62,6 @@ def get_object(self):
5662

5763

5864
class PasswordResetView(APIView):
59-
6065
permission_classes = (AllowAny,)
6166
queryset = User.objects.all()
6267

@@ -72,7 +77,6 @@ def post(self, request, *args, **kwargs):
7277

7378

7479
class PasswordResetConfirmView(APIView):
75-
7680
permission_classes = (AllowAny,)
7781
serializer_class = serializers.ResetPasswordSerializer
7882

@@ -84,12 +88,10 @@ def post(self, request, *args, **kwargs):
8488

8589

8690
class CreateOrganisationView(generics.CreateAPIView):
87-
8891
serializer_class = serializers.CreateOrganisationSerializer
8992

9093

9194
class OrganisationMembersView(generics.ListAPIView):
92-
9395
serializer_class = serializers.OrganisationMembersSerializer
9496

9597
def get_queryset(self):
@@ -98,7 +100,6 @@ def get_queryset(self):
98100

99101

100102
class LeaveOrganisationView(generics.DestroyAPIView):
101-
102103
def get_object(self):
103104
return Membership.objects.order_by('?').first()
104105

@@ -109,5 +110,4 @@ def delete(self, request, *args, **kwargs):
109110

110111

111112
class OrganisationErroredView(generics.ListAPIView):
112-
113113
serializer_class = serializers.OrganisationErroredSerializer

0 commit comments

Comments
 (0)