Skip to content

Commit

Permalink
Have is_list_view recognise RetrieveModel… views (#5480)
Browse files Browse the repository at this point in the history
Fixes #5165
  • Loading branch information
Carlton Gibson authored Oct 5, 2017
1 parent d8da6bb commit 2edeb74
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 0 deletions.
3 changes: 3 additions & 0 deletions rest_framework/schemas/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
See schemas.__init__.py for package overview.
"""
from rest_framework.mixins import RetrieveModelMixin


def is_list_view(path, method, view):
Expand All @@ -15,6 +16,8 @@ def is_list_view(path, method, view):

if method.lower() != 'get':
return False
if isinstance(view, RetrieveModelMixin):
return False
path_components = path.strip('/').split('/')
if path_components and '{' in path_components[-1]:
return False
Expand Down
13 changes: 13 additions & 0 deletions tests/test_schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
AutoSchema, ManualSchema, SchemaGenerator, get_schema_view
)
from rest_framework.schemas.generators import EndpointEnumerator
from rest_framework.schemas.utils import is_list_view
from rest_framework.test import APIClient, APIRequestFactory
from rest_framework.utils import formatting
from rest_framework.views import APIView
Expand Down Expand Up @@ -808,3 +809,15 @@ def test_from_router(self):

with pytest.raises(ValueError):
generator.get_schema()


def test_is_list_view_recognises_retrieve_view_subclasses():
class TestView(generics.RetrieveAPIView):
pass

path = '/looks/like/a/list/view/'
method = 'get'
view = TestView()

is_list = is_list_view(path, method, view)
assert not is_list, "RetrieveAPIView subclasses should not be classified as list views."

0 comments on commit 2edeb74

Please sign in to comment.