From 837627fdf361d775ffadf8f67e1dd28c4c026673 Mon Sep 17 00:00:00 2001 From: Oliver Sauder Date: Mon, 18 Mar 2024 22:05:07 +0400 Subject: [PATCH 1/2] Added support for Django REST framework 3.15 As per our policy this drops support for 3.13 as we only support two versions of DRF. --- CHANGELOG.md | 4 +++- README.rst | 2 +- docs/getting-started.md | 2 +- rest_framework_json_api/compat.py | 15 --------------- rest_framework_json_api/metadata.py | 2 -- rest_framework_json_api/schemas/openapi.py | 7 ++----- setup.cfg | 2 -- setup.py | 2 +- tox.ini | 10 +++++----- 9 files changed, 13 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f64e70ba..a3cff238 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ any parts of the framework not mentioned in the documentation should generally b * Added support for Python 3.12 * Added support for Django 5.0 +* Added support for Django REST framework 3.15 ### Fixed @@ -26,10 +27,11 @@ any parts of the framework not mentioned in the documentation should generally b * Removed support for Python 3.7. * Removed support for Django 4.0. +* Removed support for Django REST framework 3.13. ## [6.1.0] - 2023-08-25 -This is the last release supporting Python 3.7 and Django 4.0. +This is the last release supporting Python 3.7, Django 4.0 and Django REST framework 3.13. ### Added diff --git a/README.rst b/README.rst index 6292b387..e283f7bf 100644 --- a/README.rst +++ b/README.rst @@ -94,7 +94,7 @@ Requirements 1. Python (3.8, 3.9, 3.10, 3.11, 3.12) 2. Django (3.2, 4.1, 4.2, 5.0) -3. Django REST framework (3.13, 3.14) +3. Django REST framework (3.14, 3.15) We **highly** recommend and only officially support the latest patch release of each Python, Django and REST framework series. diff --git a/docs/getting-started.md b/docs/getting-started.md index 10a1ec41..aeccd46f 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -53,7 +53,7 @@ like the following: 1. Python (3.8, 3.9, 3.10, 3.11, 3.12) 2. Django (3.2, 4.1, 4.2, 5.0) -3. Django REST framework (3.13, 3.14) +3. Django REST framework (3.14, 3.15) We **highly** recommend and only officially support the latest patch release of each Python, Django and REST framework series. diff --git a/rest_framework_json_api/compat.py b/rest_framework_json_api/compat.py index 96648eb0..e69de29b 100644 --- a/rest_framework_json_api/compat.py +++ b/rest_framework_json_api/compat.py @@ -1,15 +0,0 @@ -# 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) diff --git a/rest_framework_json_api/metadata.py b/rest_framework_json_api/metadata.py index c7f7b7b4..e761e919 100644 --- a/rest_framework_json_api/metadata.py +++ b/rest_framework_json_api/metadata.py @@ -5,7 +5,6 @@ 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 @@ -22,7 +21,6 @@ class JSONAPIMetadata(SimpleMetadata): serializers.Field: "GenericField", serializers.RelatedField: "Relationship", serializers.BooleanField: "Boolean", - NullBooleanField: "Boolean", serializers.CharField: "String", serializers.URLField: "URL", serializers.EmailField: "Email", diff --git a/rest_framework_json_api/schemas/openapi.py b/rest_framework_json_api/schemas/openapi.py index c0d9ca3a..650876e6 100644 --- a/rest_framework_json_api/schemas/openapi.py +++ b/rest_framework_json_api/schemas/openapi.py @@ -7,7 +7,6 @@ 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.relations import ManySerializerMethodResourceRelatedField from rest_framework_json_api.utils import format_field_name @@ -533,12 +532,10 @@ def _get_toplevel_200_response(self, operation, path, method, collection=True): if collection: data = { "type": "array", - "items": get_reference( - self, self.get_response_serializer(path, method) - ), + "items": self.get_reference(self.get_response_serializer(path, method)), } else: - data = get_reference(self, self.get_response_serializer(path, method)) + data = self.get_reference(self.get_response_serializer(path, method)) return { "description": operation["operationId"], diff --git a/setup.cfg b/setup.cfg index a02f67e6..8f0317c8 100644 --- a/setup.cfg +++ b/setup.cfg @@ -63,8 +63,6 @@ DJANGO_SETTINGS_MODULE=example.settings.test filterwarnings = error::DeprecationWarning error::PendingDeprecationWarning - # Remove when DRF is not depending on it anymore - ignore:The django.utils.timezone.utc alias is deprecated. # Django filter schema generation. Can be removed once we remove # schema support ignore:Built-in schema generation is deprecated. diff --git a/setup.py b/setup.py index 359324fb..4ff629e4 100755 --- a/setup.py +++ b/setup.py @@ -106,7 +106,7 @@ def get_package_data(package): }, install_requires=[ "inflection>=0.5.0", - "djangorestframework>=3.13", + "djangorestframework>=3.14", "django>=3.2", ], extras_require={ diff --git a/tox.ini b/tox.ini index f7f83820..e2d842db 100644 --- a/tox.ini +++ b/tox.ini @@ -1,9 +1,9 @@ [tox] envlist = - py{38,39,310}-django32-drf{313,314,master}, - py{38,39,310,311}-django41-drf{314,master}, - py{38,39,310,311,312}-django42-drf{314,master}, - py{310,311,312}-django50-drf{314,master}, + py{38,39,310}-django32-drf{314,315,master}, + py{38,39,310,311}-django41-drf{314,315,master}, + py{38,39,310,311,312}-django42-drf{314,315,master}, + py{310,311,312}-django50-drf{314,315,master}, black, docs, lint @@ -14,8 +14,8 @@ deps = django41: Django>=4.1,<4.2 django42: Django>=4.2,<4.3 django50: Django>=5.0,<5.1 - drf313: djangorestframework>=3.13,<3.14 drf314: djangorestframework>=3.14,<3.15 + drf315: djangorestframework>=3.15,<3.16 drfmaster: https://github.com/encode/django-rest-framework/archive/master.zip -rrequirements/requirements-testing.txt -rrequirements/requirements-optionals.txt From 9b5a6b84905edba98fd273af8126d5687b3f5911 Mon Sep 17 00:00:00 2001 From: Oliver Sauder Date: Mon, 18 Mar 2024 22:15:49 +0400 Subject: [PATCH 2/2] Added clarification in changelog about removed compat definitions --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3cff238..b832850f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ any parts of the framework not mentioned in the documentation should generally b * Removed support for Python 3.7. * Removed support for Django 4.0. * Removed support for Django REST framework 3.13. +* Removed obsolete compat `NullBooleanField` and `get_reference` definitions. ## [6.1.0] - 2023-08-25