Skip to content
This repository was archived by the owner on Jan 11, 2021. It is now read-only.

Commit 0bcd8f9

Browse files
authored
Merge pull request #570 from marcgibbons/feature/upgrade-reqs
2.1.0: Make DRF 3.5 minimum version, use get_schema_view shortcut
2 parents 19242d6 + d7f2a0a commit 0bcd8f9

File tree

9 files changed

+46
-109
lines changed

9 files changed

+46
-109
lines changed

README.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313

1414
Full documentation: http://marcgibbons.github.io/django-rest-swagger/
1515

16-
**Note:** you are viewing documentation for version 2, using Django REST Framework 3.4.1+ and CoreAPI. Documentation for previous versions is available [here](http://django-rest-swagger.readthedocs.io/en/stable-0.3.x/).
17-
1816

1917
## Installation
2018

@@ -53,7 +51,7 @@ urlpatterns = [
5351

5452
## Requirements
5553
* Django 1.8+
56-
* Django REST framework 3.4.1+
54+
* Django REST framework 3.5.1+
5755
* Python 2.7, 3.5
5856

5957

docs/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Swagger/OpenAPI Documentation Generator for Django REST Framework
55

66
---
77

8-
**Note:** you are viewing documentation for version 2, using Django REST Framework 3.4+ and CoreAPI. Documentation for previous versions is available [here](http://django-rest-swagger.readthedocs.io/en/stable-0.3.x/).
8+
**Note:** you are viewing documentation for version 2, using Django REST Framework 3.5+ and CoreAPI. Documentation for previous versions is available [here](http://django-rest-swagger.readthedocs.io/en/stable-0.3.x/).
99

1010
---
1111

example_app/snippets/views.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ def highlight(self, request, *args, **kwargs):
3434

3535
def perform_create(self, serializer):
3636
serializer.save(owner=self.request.user)
37-
37+
38+
3839
class UserViewSet(viewsets.ReadOnlyModelViewSet):
3940
"""
4041
This endpoint presents the users in the system.

requirements.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
Django==1.10
2-
djangorestframework==3.4.7
1+
Django==1.10.2
2+
djangorestframework==3.5.1
33
coreapi==2.0.8
4-
openapi-codec==1.1.3
5-
simplejson==3.8.2
4+
openapi-codec==1.1.7
5+
simplejson==3.9.0
66

77
# Testing
8-
tox==2.3.1
8+
tox==2.4.1
99
pylint==1.6.4
1010
coverage==4.2
1111
ipdb==0.10.1

rest_framework_swagger/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '2.0.7'
1+
__version__ = '2.1.0'

rest_framework_swagger/views.py

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,19 @@
1-
from rest_framework import exceptions
2-
from rest_framework.permissions import AllowAny
1+
from rest_framework import schemas
32
from rest_framework.renderers import CoreJSONRenderer
4-
from rest_framework.response import Response
5-
from rest_framework.schemas import SchemaGenerator
6-
from rest_framework.views import APIView
73

84
from . import renderers
95

106

117
def get_swagger_view(title=None, url=None):
128
"""
139
Returns schema view which renders Swagger/OpenAPI.
14-
15-
(Replace with DRF get_schema_view shortcut in 3.5)
1610
"""
17-
class SwaggerSchemaView(APIView):
18-
_ignore_model_permissions = True
19-
exclude_from_schema = True
20-
permission_classes = [AllowAny]
21-
renderer_classes = [
11+
return schemas.get_schema_view(
12+
title=title,
13+
url=url,
14+
renderer_classes=[
2215
CoreJSONRenderer,
2316
renderers.OpenAPIRenderer,
2417
renderers.SwaggerUIRenderer
2518
]
26-
27-
def get(self, request):
28-
generator = SchemaGenerator(title=title, url=url)
29-
schema = generator.get_schema(request=request)
30-
31-
if not schema:
32-
raise exceptions.ValidationError(
33-
'The schema generator did not return a schema Document'
34-
)
35-
36-
return Response(schema)
37-
38-
return SwaggerSchemaView.as_view()
19+
)

setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@
4444
version=VERSION,
4545
install_requires=[
4646
'coreapi>=2.0.8',
47-
'openapi-codec>=1.1.5',
47+
'openapi-codec>=1.1.7',
48+
'djangorestframework>=3.5.1',
4849
'simplejson'
4950
],
5051
packages=['rest_framework_swagger'],

tests/test_views.py

Lines changed: 18 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from django.test import TestCase
2-
from rest_framework.permissions import AllowAny
2+
from rest_framework import schemas
33
from rest_framework.renderers import CoreJSONRenderer
4-
from rest_framework.request import Request
54
from rest_framework.test import APIRequestFactory
65

76
from rest_framework_swagger import renderers
@@ -16,66 +15,22 @@ def setUp(self):
1615
self.factory = APIRequestFactory()
1716
self.view_class = self.sut().cls
1817

19-
def test_title_and_urlpassed_to_schema_generator(self):
20-
title = 'Vandelay'
21-
url = 'https://github.com/marcgibbons/django-rest-swagger'
22-
view = self.sut(title=title, url=url)
23-
24-
with patch('rest_framework_swagger.views.SchemaGenerator') as mock:
25-
request = self.factory.get('/')
26-
view(request=request)
27-
28-
mock.assert_called_once_with(title=title, url=url)
29-
30-
def test_ignore_model_permissions_true(self):
31-
self.assertTrue(self.view_class._ignore_model_permissions)
32-
33-
def test_exclude_from_schema(self):
34-
self.assertTrue(self.view_class.exclude_from_schema)
35-
36-
def test_renderer_classes(self):
37-
self.assertListEqual(
38-
[
39-
CoreJSONRenderer,
40-
renderers.OpenAPIRenderer,
41-
renderers.SwaggerUIRenderer
42-
],
43-
self.view_class.renderer_classes
44-
)
45-
46-
def test_permission_class(self):
47-
self.assertListEqual(
48-
[AllowAny],
49-
self.view_class.permission_classes
18+
def test_returns_get_schema_view(self):
19+
title = 'Vandelay Industries API',
20+
url = 'http://vandelay.industries'
21+
renderer_classes = [
22+
CoreJSONRenderer,
23+
renderers.OpenAPIRenderer,
24+
renderers.SwaggerUIRenderer
25+
]
26+
27+
with patch.object(schemas, 'get_schema_view') as mock:
28+
result = self.sut(title=title, url=url)
29+
30+
mock.assert_called_once_with(
31+
title=title,
32+
url=url,
33+
renderer_classes=renderer_classes
5034
)
5135

52-
def test_return_400_if_schema_is_none(self):
53-
with patch('rest_framework_swagger.views.SchemaGenerator') as mock:
54-
mock.return_value.get_schema.return_value = None
55-
request = self.factory.get('/')
56-
response = self.sut()(request=request)
57-
58-
self.assertEqual(400, response.status_code)
59-
self.assertEqual(
60-
['The schema generator did not return a schema Document'],
61-
response.data
62-
)
63-
64-
def test_response_is_result_of_schema_generator(self):
65-
expected = 'My amazing schema'
66-
with patch('rest_framework_swagger.views.SchemaGenerator') as mock:
67-
mock.return_value.get_schema.return_value = expected
68-
request = self.factory.get('/')
69-
response = self.sut()(request=request)
70-
71-
self.assertEqual(200, response.status_code)
72-
self.assertEqual(expected, response.data)
73-
74-
def test_schema_generator_instantiated_with_request(self):
75-
with patch('rest_framework_swagger.views.SchemaGenerator') as mock:
76-
request = self.factory.get('/')
77-
self.sut()(request=request)
78-
79-
call_args = mock.return_value.get_schema.call_args[1]
80-
self.assertIn('request', call_args)
81-
self.assertIsInstance(call_args['request'], Request)
36+
self.assertEqual(mock.return_value, result)

tox.ini

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
[tox]
2-
envlist =
2+
skipsdist=True
3+
envlist =
34
latest
4-
{py27,py35}-django{1.8,1.9,1.10}-drf{3.4}
5+
{py27,py35}-django{18,19,110}-drf35
56
lint
67

78
[testenv]
89
commands = python runtests.py
910
deps =
1011
coreapi
11-
openapi-codec
12-
simplejson
1312
coverage
14-
drf3.4: djangorestframework>=3.4.3,<3.5
15-
django1.8: Django>=1.8,<1.9
16-
django1.9: Django>=1.9,<1.10
17-
django1.10: Django>=1.10,<1.11
1813
mock
14+
openapi-codec
15+
simplejson
16+
drf35: djangorestframework>=3.5.1,<3.6
17+
django18: Django>=1.8,<1.9
18+
django19: Django>=1.9,<1.10
19+
django110: Django>=1.10,<1.11
1920

2021
[testenv:latest]
2122
commands = coverage run runtests.py
2223
pip_pre = True
23-
deps =
24+
deps =
2425
Django
2526
coreapi
2627
openapi-codec

0 commit comments

Comments
 (0)