Skip to content

Commit 3a832bd

Browse files
authored
Added support for DRF 3.14 and dropping support for DRF 3.12. (#1090)
1 parent cbf52a3 commit 3a832bd

File tree

8 files changed

+30
-10
lines changed

8 files changed

+30
-10
lines changed

CHANGELOG.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ any parts of the framework not mentioned in the documentation should generally b
2020
### Added
2121

2222
* Added support for Django 4.1.
23+
* Added support for Django REST framework 3.14.
2324
* Expanded JSONParser API with `parse_data` method
2425

2526
### Changed
@@ -29,13 +30,14 @@ any parts of the framework not mentioned in the documentation should generally b
2930
### Removed
3031

3132
* Removed support for Django 2.2.
33+
* Removed support for Django REST framework 3.12.
3234

3335
## [5.0.0] - 2022-01-03
3436

3537
This release is not backwards compatible. For easy migration best upgrade first to version
3638
4.3.0 and resolve all deprecation warnings before updating to 5.0.0
3739

38-
This is the last release supporting Django 2.2.
40+
This is the last release supporting Django 2.2 and Django REST framework 3.12.
3941

4042
### Added
4143

README.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ Requirements
9090

9191
1. Python (3.7, 3.8, 3.9, 3.10)
9292
2. Django (3.2, 4.0, 4.1)
93-
3. Django REST framework (3.12, 3.13)
93+
3. Django REST framework (3.13, 3.14)
9494

9595
We **highly** recommend and only officially support the latest patch release of each Python, Django and REST framework series.
9696

docs/getting-started.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ like the following:
5353

5454
1. Python (3.7, 3.8, 3.9, 3.10)
5555
2. Django (3.2, 4.0, 4.1)
56-
3. Django REST framework (3.12, 3.13)
56+
3. Django REST framework (3.13, 3.14)
5757

5858
We **highly** recommend and only officially support the latest patch release of each Python, Django and REST framework series.
5959

rest_framework_json_api/compat.py

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Django REST framework 3.14 removed NullBooleanField
2+
# can be removed once support for DRF 3.13 is dropped.
3+
try:
4+
from rest_framework.serializers import NullBooleanField
5+
except ImportError: # pragma: no cover
6+
NullBooleanField = object()
7+
8+
9+
# Django REST framework 3.14 deprecates usage of `_get_reference`.
10+
# can be removed once support for DRF 3.13 is dropped.
11+
def get_reference(schema, serializer):
12+
try:
13+
return schema.get_reference(serializer)
14+
except AttributeError: # pragma: no cover
15+
return schema._get_reference(serializer)

rest_framework_json_api/metadata.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from rest_framework.settings import api_settings
88
from rest_framework.utils.field_mapping import ClassLookupDict
99

10+
from rest_framework_json_api.compat import NullBooleanField
1011
from rest_framework_json_api.utils import format_field_name, get_related_resource_type
1112

1213

@@ -23,7 +24,7 @@ class JSONAPIMetadata(SimpleMetadata):
2324
serializers.Field: "GenericField",
2425
serializers.RelatedField: "Relationship",
2526
serializers.BooleanField: "Boolean",
26-
serializers.NullBooleanField: "Boolean",
27+
NullBooleanField: "Boolean",
2728
serializers.CharField: "String",
2829
serializers.URLField: "URL",
2930
serializers.EmailField: "Email",

rest_framework_json_api/schemas/openapi.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from rest_framework.schemas.utils import is_list_view
88

99
from rest_framework_json_api import serializers, views
10+
from rest_framework_json_api.compat import get_reference
1011
from rest_framework_json_api.utils import format_field_name
1112

1213

@@ -515,10 +516,10 @@ def _get_toplevel_200_response(self, operation, collection=True):
515516
if collection:
516517
data = {
517518
"type": "array",
518-
"items": self._get_reference(self.view.get_serializer()),
519+
"items": get_reference(self, self.view.get_serializer()),
519520
}
520521
else:
521-
data = self._get_reference(self.view.get_serializer())
522+
data = get_reference(self, self.view.get_serializer())
522523

523524
return {
524525
"description": operation["operationId"],

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ def get_package_data(package):
9696
],
9797
install_requires=[
9898
"inflection>=0.5.0",
99-
"djangorestframework>=3.12,<3.14",
99+
"djangorestframework>=3.13,<3.15",
100100
"django>=3.2,<4.2",
101101
],
102102
extras_require={

tox.ini

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
[tox]
22
envlist =
3-
py{37,38,39,310}-django32-drf{312,313,master},
4-
py{38,39,310}-django{40,41}-drf{313,master},
3+
py{37,38,39,310}-django32-drf{313,314,master},
4+
py{38,39,310}-django40-drf{313,314,master},
5+
py{38,39,310}-django41-drf{314,master},
56
lint,docs
67

78
[testenv]
89
deps =
910
django32: Django>=3.2,<3.3
1011
django40: Django>=4.0,<4.1
1112
django41: Django>=4.1,<4.2
12-
drf312: djangorestframework>=3.12,<3.13
1313
drf313: djangorestframework>=3.13,<3.14
14+
drf314: djangorestframework>=3.14,<3.15
1415
drfmaster: https://github.com/encode/django-rest-framework/archive/master.zip
1516
-rrequirements/requirements-testing.txt
1617
-rrequirements/requirements-optionals.txt

0 commit comments

Comments
 (0)