Skip to content

Commit 84215c4

Browse files
committed
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
1 parent 09ae4a0 commit 84215c4

18 files changed

+49
-165
lines changed

.travis.yml

+22-78
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:

README.rst

+3-3
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

+3-3
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

+4-4
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

-10
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/tests/integration/test_non_paginated_responses.py

+2-5
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

+2-6
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

+2-5
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/views.py

-5
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,6 @@ class NonPaginatedEntryViewSet(EntryViewSet):
140140
'blog__name': rels,
141141
'blog__tagline': rels,
142142
}
143-
filter_fields = filterset_fields # django-filter<=1.1 (required for py27)
144143
search_fields = ('headline', 'body_text', 'blog__name', 'blog__tagline')
145144

146145

@@ -160,8 +159,6 @@ class FiltersetEntryViewSet(EntryViewSet):
160159
pagination_class = NoPagination
161160
filterset_fields = None
162161
filterset_class = EntryFilter
163-
filter_fields = filterset_fields # django-filter<=1.1
164-
filter_class = filterset_class
165162

166163

167164
class NoFiltersetEntryViewSet(EntryViewSet):
@@ -171,8 +168,6 @@ class NoFiltersetEntryViewSet(EntryViewSet):
171168
pagination_class = NoPagination
172169
filterset_fields = None
173170
filterset_class = None
174-
filter_fields = filterset_fields # django-filter<=1.1
175-
filter_class = filterset_class
176171

177172

178173
class AuthorViewSet(ModelViewSet):

pytest.ini

-10
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,4 @@ filterwarnings =
44
error::DeprecationWarning
55
error::PendingDeprecationWarning
66
# TODO: restructure tests so this can be ignored on a test level
7-
ignore:MarkInfo objects are deprecated as they contain merged marks which are hard to deal with correctly.
8-
ignore:use of getfuncargvalue is deprecated, use getfixturevalue
9-
ignore:`list_route`
10-
ignore:`detail_route`
11-
ignore:`FiltersetEntryViewSet.filter_fields` attribute should be renamed
12-
ignore:`NoFiltersetEntryViewSet.filter_fields` attribute should be renamed
13-
ignore:`NoFiltersetEntryViewSet.filter_class` attribute should be renamed `filterset_class`
147
ignore:MultipleIDMixin is deprecated
15-
# can be removed once following DRF PR is released
16-
# https://github.com/encode/django-rest-framework/pull/6268
17-
ignore:Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated

requirements-development.txt

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ factory-boy==2.12.0
77
flake8==3.7.7
88
flake8-isort==2.7.0
99
isort==4.3.21
10-
mock==3.0.5
1110
pytest==4.6.3
1211
pytest-cov==2.7.1
1312
pytest-django==3.5.0

rest_framework_json_api/compat.py

-4
This file was deleted.

0 commit comments

Comments
 (0)