Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 55e61e9

Browse files
slivercn2ygk
authored andcommittedJul 4, 2019
Drop support for obsolete dependencies (#664)
* Drop support for obsolete dependencies Following specific supports are removed: * Python 2.7 * Python 3.4 * Django Filter 1.1 * Django REST Framework >=3.8 * Django 2.0 * Remove obsolete six dependency * Remove filter_queryset with django filter 1.1 support * Update changelog
1 parent 09ae4a0 commit 55e61e9

24 files changed

+75
-208
lines changed
 

‎.travis.yml

Lines changed: 22 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -4,119 +4,63 @@ cache: pip
44
# Favor explicit over implicit and use an explicit build matrix.
55
matrix:
66
allow_failures:
7-
- env: TOXENV=py34-df21-django20-drfmaster
8-
- env: TOXENV=py35-df21-django20-drfmaster
9-
- env: TOXENV=py36-df21-django20-drfmaster
10-
- env: TOXENV=py37-df21-django20-drfmaster
11-
- env: TOXENV=py35-df21-django21-drfmaster
12-
- env: TOXENV=py36-df21-django21-drfmaster
13-
- env: TOXENV=py37-df21-django21-drfmaster
14-
- env: TOXENV=py35-df21-django22-drfmaster
15-
- env: TOXENV=py36-df21-django22-drfmaster
16-
- env: TOXENV=py37-df21-django22-drfmaster
7+
- env: TOXENV=py35-django21-drfmaster
8+
- env: TOXENV=py36-django21-drfmaster
9+
- env: TOXENV=py37-django21-drfmaster
10+
- env: TOXENV=py35-django22-drfmaster
11+
- env: TOXENV=py36-django22-drfmaster
12+
- env: TOXENV=py37-django22-drfmaster
1713

1814
include:
1915
- python: 3.6
2016
env: TOXENV=flake8
2117

22-
- python: 2.7
23-
env: TOXENV=py27-df11-django111-drf36
24-
- python: 2.7
25-
env: TOXENV=py27-df11-django111-drf37
26-
- python: 2.7
27-
env: TOXENV=py27-df11-django111-drf38
28-
- python: 2.7
29-
env: TOXENV=py27-df11-django111-drf39
30-
31-
- python: 3.4
32-
env: TOXENV=py34-df21-django111-drf36
33-
- python: 3.4
34-
env: TOXENV=py34-df21-django111-drf37
35-
- python: 3.4
36-
env: TOXENV=py34-df21-django111-drf38
37-
- python: 3.4
38-
env: TOXENV=py34-df21-django20-drf37
39-
- python: 3.4
40-
env: TOXENV=py34-df21-django20-drf38
41-
- python: 3.4
42-
env: TOXENV=py34-df21-django20-drf39
43-
- python: 3.4
44-
env: TOXENV=py34-df21-django20-drfmaster
45-
46-
- python: 3.5
47-
env: TOXENV=py35-df21-django111-drf36
48-
- python: 3.5
49-
env: TOXENV=py35-df21-django111-drf37
50-
- python: 3.5
51-
env: TOXENV=py35-df21-django111-drf38
5218
- python: 3.5
53-
env: TOXENV=py35-df21-django20-drf37
19+
env: TOXENV=py35-django111-drf39
5420
- python: 3.5
55-
env: TOXENV=py35-df21-django20-drf38
21+
env: TOXENV=py35-django111-drfmaster
5622
- python: 3.5
57-
env: TOXENV=py35-df21-django20-drf39
23+
env: TOXENV=py35-django21-drf39
5824
- python: 3.5
59-
env: TOXENV=py35-df21-django20-drfmaster
60-
- python: 3.5
61-
env: TOXENV=py35-df21-django21-drf39
62-
- python: 3.5
63-
env: TOXENV=py35-df21-django21-drfmaster
25+
env: TOXENV=py35-django21-drfmaster
6426
- python: 3.5
6527
dist: xenial
66-
env: TOXENV=py35-df21-django22-drf39
28+
env: TOXENV=py35-django22-drf39
6729
- python: 3.5
6830
dist: xenial
69-
env: TOXENV=py35-df21-django22-drfmaster
31+
env: TOXENV=py35-django22-drfmaster
7032

7133
- python: 3.6
72-
env: TOXENV=py36-df21-django111-drf36
73-
- python: 3.6
74-
env: TOXENV=py36-df21-django111-drf37
75-
- python: 3.6
76-
env: TOXENV=py36-df21-django111-drf38
34+
env: TOXENV=py36-django111-drf39
7735
- python: 3.6
78-
env: TOXENV=py36-df21-django20-drf37
36+
env: TOXENV=py36-django111-drfmaster
7937
- python: 3.6
80-
env: TOXENV=py36-df21-django20-drf38
38+
env: TOXENV=py36-django21-drf39
8139
- python: 3.6
82-
env: TOXENV=py36-df21-django20-drf39
83-
- python: 3.6
84-
env: TOXENV=py36-df21-django20-drfmaster
85-
- python: 3.6
86-
env: TOXENV=py36-df21-django21-drf39
87-
- python: 3.6
88-
env: TOXENV=py36-df21-django21-drfmaster
40+
env: TOXENV=py36-django21-drfmaster
8941
- python: 3.6
9042
dist: xenial
91-
env: TOXENV=py36-df21-django22-drf39
43+
env: TOXENV=py36-django22-drf39
9244
- python: 3.6
9345
dist: xenial
94-
env: TOXENV=py36-df21-django22-drfmaster
46+
env: TOXENV=py36-django22-drfmaster
9547

9648
- python: 3.7
9749
dist: xenial
9850
sudo: required
99-
env: TOXENV=py37-df21-django20-drf39
100-
- python: 3.7
101-
dist: xenial
102-
sudo: required
103-
env: TOXENV=py37-df21-django20-drfmaster
104-
- python: 3.7
105-
dist: xenial
106-
sudo: required
107-
env: TOXENV=py37-df21-django21-drf39
51+
env: TOXENV=py37-django21-drf39
10852
- python: 3.7
10953
dist: xenial
11054
sudo: required
111-
env: TOXENV=py37-df21-django21-drfmaster
55+
env: TOXENV=py37-django21-drfmaster
11256
- python: 3.7
11357
dist: xenial
11458
sudo: required
115-
env: TOXENV=py37-df21-django22-drf39
59+
env: TOXENV=py37-django22-drf39
11660
- python: 3.7
11761
dist: xenial
11862
sudo: required
119-
env: TOXENV=py37-df21-django22-drfmaster
63+
env: TOXENV=py37-django22-drfmaster
12064
install:
12165
- pip install tox
12266
script:

‎CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
Note that in line with [Django REST Framework policy](http://www.django-rest-framework.org/topics/release-notes/),
99
any parts of the framework not mentioned in the documentation should generally be considered private API, and may be subject to change.
1010

11+
## [Unreleased]
12+
13+
### Removed
14+
15+
* Removed support for Python 2.7 and 3.4.
16+
* Removed support for Django Filter 1.1.
17+
* Removed obsolete dependency six.
18+
* Removed support for Django REST Framework <=3.8.
19+
* Removed support for Django 2.0.
20+
1121
## [2.8.0] - 2019-06-13
1222

1323
This is the last release supporting Python 2.7, Python 3.4, Django Filter 1.1, Django REST Framework <=3.8 and Django 2.0.

‎README.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,9 @@ As a Django REST Framework JSON API (short DJA) we are trying to address followi
8787
Requirements
8888
------------
8989

90-
1. Python (2.7, 3.4, 3.5, 3.6, 3.7)
91-
2. Django (1.11, 2.0, 2.1, 2.2)
92-
3. Django REST Framework (3.6, 3.7, 3.8, 3.9)
90+
1. Python (3.5, 3.6, 3.7)
91+
2. Django (1.11, 2.1, 2.2)
92+
3. Django REST Framework (3.9)
9393

9494
------------
9595
Installation

‎docs/getting-started.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ like the following:
5151

5252
## Requirements
5353

54-
1. Python (2.7, 3.4, 3.5, 3.6, 3.7)
55-
2. Django (1.11, 2.0, 2.1, 2.2)
56-
3. Django REST Framework (3.6, 3.7, 3.8, 3.9)
54+
1. Python (3.5, 3.6, 3.7)
55+
2. Django (1.11, 2.1, 2.2)
56+
3. Django REST Framework (3.9)
5757

5858
## Installation
5959

‎example/api/resources/identity.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from django.contrib.auth import models as auth_models
22
from django.utils import encoding
33
from rest_framework import generics, parsers, renderers, serializers, viewsets
4-
from rest_framework.decorators import detail_route, list_route
4+
from rest_framework.decorators import action
55
from rest_framework.response import Response
66

77
from rest_framework_json_api import mixins, utils
@@ -15,7 +15,7 @@ class Identity(mixins.MultipleIDMixin, viewsets.ModelViewSet):
1515
serializer_class = IdentitySerializer
1616

1717
# demonstrate sideloading data for use at app boot time
18-
@list_route()
18+
@action(detail=False)
1919
def posts(self, request):
2020
self.resource_name = False
2121

@@ -28,12 +28,12 @@ def posts(self, request):
2828
}
2929
return Response(utils.format_field_names(data, format_type='camelize'))
3030

31-
@detail_route()
31+
@action(detail=True)
3232
def manual_resource_name(self, request, *args, **kwargs):
3333
self.resource_name = 'data'
3434
return super(Identity, self).retrieve(request, args, kwargs)
3535

36-
@detail_route()
36+
@action(detail=True)
3737
def validation(self, request, *args, **kwargs):
3838
raise serializers.ValidationError('Oh nohs!')
3939

‎example/models.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
55
from django.contrib.contenttypes.models import ContentType
66
from django.db import models
7-
from django.utils.encoding import python_2_unicode_compatible
87
from polymorphic.models import PolymorphicModel
98

109

@@ -32,7 +31,6 @@ class Meta:
3231
ordering = ('id',)
3332

3433

35-
@python_2_unicode_compatible
3634
class Blog(BaseModel):
3735
name = models.CharField(max_length=100)
3836
tagline = models.TextField()
@@ -45,7 +43,6 @@ class Meta:
4543
ordering = ('id',)
4644

4745

48-
@python_2_unicode_compatible
4946
class AuthorType(BaseModel):
5047
name = models.CharField(max_length=50)
5148

@@ -56,7 +53,6 @@ class Meta:
5653
ordering = ('id',)
5754

5855

59-
@python_2_unicode_compatible
6056
class Author(BaseModel):
6157
name = models.CharField(max_length=50)
6258
email = models.EmailField()
@@ -69,7 +65,6 @@ class Meta:
6965
ordering = ('id',)
7066

7167

72-
@python_2_unicode_compatible
7368
class AuthorBio(BaseModel):
7469
author = models.OneToOneField(Author, related_name='bio', on_delete=models.CASCADE)
7570
body = models.TextField()
@@ -81,7 +76,6 @@ class Meta:
8176
ordering = ('id',)
8277

8378

84-
@python_2_unicode_compatible
8579
class AuthorBioMetadata(BaseModel):
8680
"""
8781
Just a class to have a relation with author bio
@@ -96,7 +90,6 @@ class Meta:
9690
ordering = ('id',)
9791

9892

99-
@python_2_unicode_compatible
10093
class Entry(BaseModel):
10194
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
10295
headline = models.CharField(max_length=255)
@@ -116,7 +109,6 @@ class Meta:
116109
ordering = ('id',)
117110

118111

119-
@python_2_unicode_compatible
120112
class Comment(BaseModel):
121113
entry = models.ForeignKey(Entry, related_name='comments', on_delete=models.CASCADE)
122114
body = models.TextField()
@@ -135,7 +127,6 @@ class Meta:
135127
ordering = ('id',)
136128

137129

138-
@python_2_unicode_compatible
139130
class ProjectType(BaseModel):
140131
name = models.CharField(max_length=50)
141132

@@ -160,7 +151,6 @@ class ResearchProject(Project):
160151
supervisor = models.CharField(max_length=30)
161152

162153

163-
@python_2_unicode_compatible
164154
class Company(models.Model):
165155
name = models.CharField(max_length=100)
166156
current_project = models.ForeignKey(

‎example/requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,5 @@ pluggy
88
py
99
pyparsing
1010
pytz
11-
six
1211
sqlparse
1312
django-filter>=2.0

‎example/tests/integration/test_non_paginated_responses.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1+
from unittest import mock
2+
13
import pytest
24
from django.urls import reverse
35

4-
try:
5-
from unittest import mock
6-
except ImportError: # pragma: no cover
7-
import mock
8-
96
pytestmark = pytest.mark.django_db
107

118

‎example/tests/integration/test_pagination.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
1+
from unittest import mock
2+
13
import pytest
24
from django.urls import reverse
35

4-
try:
5-
from unittest import mock
6-
except ImportError: # pragma: no cover
7-
import mock
8-
9-
106
pytestmark = pytest.mark.django_db
117

128

‎example/tests/test_serializers.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from unittest import mock
2+
13
import pytest
24
from django.test import TestCase
35
from django.urls import reverse
@@ -15,11 +17,6 @@
1517
from example.models import Author, Blog, Entry
1618
from example.serializers import BlogSerializer
1719

18-
try:
19-
from unittest import mock
20-
except ImportError: # pragma: no cover
21-
import mock
22-
2320
request_factory = APIRequestFactory()
2421
pytestmark = pytest.mark.django_db
2522

‎example/tests/unit/test_utils.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import pytest
22
from django.contrib.auth import get_user_model
33
from django.test import override_settings
4-
from django.utils import six
54
from rest_framework import serializers
65
from rest_framework.generics import GenericAPIView
76
from rest_framework.response import Response
@@ -130,7 +129,7 @@ def test_get_included_serializers_against_class():
130129
'comments': CommentSerializer,
131130
'self': klass
132131
}
133-
assert six.viewkeys(included_serializers) == six.viewkeys(klass.included_serializers), (
132+
assert included_serializers.keys() == klass.included_serializers.keys(), (
134133
'the keys must be preserved'
135134
)
136135

@@ -147,7 +146,7 @@ def test_get_included_serializers_against_instance():
147146
'comments': CommentSerializer,
148147
'self': klass
149148
}
150-
assert six.viewkeys(included_serializers) == six.viewkeys(klass.included_serializers), (
149+
assert included_serializers.keys() == klass.included_serializers.keys(), (
151150
'the keys must be preserved'
152151
)
153152

0 commit comments

Comments
 (0)
Please sign in to comment.