Skip to content

Added support for DRF 3.14 and dropping support for DRF 3.12. #1090

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ any parts of the framework not mentioned in the documentation should generally b
### Added

* Added support for Django 4.1.
* Added support for Django REST framework 3.14.
* Expanded JSONParser API with `parse_data` method

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

* Removed support for Django 2.2.
* Removed support for Django REST framework 3.12.

## [5.0.0] - 2022-01-03

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

This is the last release supporting Django 2.2.
This is the last release supporting Django 2.2 and Django REST framework 3.12.

### Added

Expand Down
2 changes: 1 addition & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ Requirements

1. Python (3.7, 3.8, 3.9, 3.10)
2. Django (3.2, 4.0, 4.1)
3. Django REST framework (3.12, 3.13)
3. Django REST framework (3.13, 3.14)

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

Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ like the following:

1. Python (3.7, 3.8, 3.9, 3.10)
2. Django (3.2, 4.0, 4.1)
3. Django REST framework (3.12, 3.13)
3. Django REST framework (3.13, 3.14)

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

Expand Down
15 changes: 15 additions & 0 deletions rest_framework_json_api/compat.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Django REST framework 3.14 removed NullBooleanField
# can be removed once support for DRF 3.13 is dropped.
try:
from rest_framework.serializers import NullBooleanField
except ImportError: # pragma: no cover
NullBooleanField = object()


# Django REST framework 3.14 deprecates usage of `_get_reference`.
# can be removed once support for DRF 3.13 is dropped.
def get_reference(schema, serializer):
try:
return schema.get_reference(serializer)
except AttributeError: # pragma: no cover
return schema._get_reference(serializer)
3 changes: 2 additions & 1 deletion rest_framework_json_api/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from rest_framework.settings import api_settings
from rest_framework.utils.field_mapping import ClassLookupDict

from rest_framework_json_api.compat import NullBooleanField
from rest_framework_json_api.utils import format_field_name, get_related_resource_type


Expand All @@ -23,7 +24,7 @@ class JSONAPIMetadata(SimpleMetadata):
serializers.Field: "GenericField",
serializers.RelatedField: "Relationship",
serializers.BooleanField: "Boolean",
serializers.NullBooleanField: "Boolean",
NullBooleanField: "Boolean",
serializers.CharField: "String",
serializers.URLField: "URL",
serializers.EmailField: "Email",
Expand Down
5 changes: 3 additions & 2 deletions rest_framework_json_api/schemas/openapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from rest_framework.schemas.utils import is_list_view

from rest_framework_json_api import serializers, views
from rest_framework_json_api.compat import get_reference
from rest_framework_json_api.utils import format_field_name


Expand Down Expand Up @@ -515,10 +516,10 @@ def _get_toplevel_200_response(self, operation, collection=True):
if collection:
data = {
"type": "array",
"items": self._get_reference(self.view.get_serializer()),
"items": get_reference(self, self.view.get_serializer()),
}
else:
data = self._get_reference(self.view.get_serializer())
data = get_reference(self, self.view.get_serializer())

return {
"description": operation["operationId"],
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def get_package_data(package):
],
install_requires=[
"inflection>=0.5.0",
"djangorestframework>=3.12,<3.14",
"djangorestframework>=3.13,<3.15",
"django>=3.2,<4.2",
],
extras_require={
Expand Down
7 changes: 4 additions & 3 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
[tox]
envlist =
py{37,38,39,310}-django32-drf{312,313,master},
py{38,39,310}-django{40,41}-drf{313,master},
py{37,38,39,310}-django32-drf{313,314,master},
py{38,39,310}-django40-drf{313,314,master},
py{38,39,310}-django41-drf{314,master},
lint,docs

[testenv]
deps =
django32: Django>=3.2,<3.3
django40: Django>=4.0,<4.1
django41: Django>=4.1,<4.2
drf312: djangorestframework>=3.12,<3.13
drf313: djangorestframework>=3.13,<3.14
drf314: djangorestframework>=3.14,<3.15
drfmaster: https://github.com/encode/django-rest-framework/archive/master.zip
-rrequirements/requirements-testing.txt
-rrequirements/requirements-optionals.txt
Expand Down