Skip to content

Commit a16dbfd

Browse files
smithdc1auvipy
andauthored
Added Deprecation Warnings for CoreAPI (#7519)
* Added Deprecation Warnings for CoreAPI * Bumped removal to DRF315 * Update rest_framework/__init__.py * Update rest_framework/filters.py * Update rest_framework/filters.py * Update tests/schemas/test_coreapi.py * Update rest_framework/filters.py * Update rest_framework/filters.py * Update tests/schemas/test_coreapi.py * Update tests/schemas/test_coreapi.py * Update tests/schemas/test_coreapi.py * Update tests/schemas/test_coreapi.py * Update rest_framework/pagination.py * Update rest_framework/pagination.py * Update rest_framework/pagination.py * Update rest_framework/pagination.py * Update rest_framework/schemas/coreapi.py * Update rest_framework/schemas/coreapi.py * Update rest_framework/schemas/coreapi.py * Update rest_framework/schemas/coreapi.py * Update rest_framework/schemas/coreapi.py * Update tests/schemas/test_coreapi.py * Update setup.cfg * Update tests/schemas/test_coreapi.py * Update tests/schemas/test_coreapi.py * Update tests/schemas/test_coreapi.py * Update tests/schemas/test_coreapi.py * Update tests/schemas/test_coreapi.py * Update tests/schemas/test_coreapi.py * Update rest_framework/pagination.py --------- Co-authored-by: Asif Saif Uddin <[email protected]>
1 parent 8333134 commit a16dbfd

File tree

6 files changed

+89
-3
lines changed

6 files changed

+89
-3
lines changed

rest_framework/__init__.py

+4
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,7 @@
3131

3232
class RemovedInDRF315Warning(DeprecationWarning):
3333
pass
34+
35+
36+
class RemovedInDRF317Warning(PendingDeprecationWarning):
37+
pass

rest_framework/filters.py

+8
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
returned by list views.
44
"""
55
import operator
6+
import warnings
67
from functools import reduce
78

89
from django.core.exceptions import ImproperlyConfigured
@@ -12,6 +13,7 @@
1213
from django.utils.encoding import force_str
1314
from django.utils.translation import gettext_lazy as _
1415

16+
from rest_framework import RemovedInDRF317Warning
1517
from rest_framework.compat import coreapi, coreschema, distinct
1618
from rest_framework.settings import api_settings
1719

@@ -29,6 +31,8 @@ def filter_queryset(self, request, queryset, view):
2931

3032
def get_schema_fields(self, view):
3133
assert coreapi is not None, 'coreapi must be installed to use `get_schema_fields()`'
34+
if coreapi is not None:
35+
warnings.warn('CoreAPI compatibility is deprecated and will be removed in DRF 3.17', RemovedInDRF317Warning)
3236
assert coreschema is not None, 'coreschema must be installed to use `get_schema_fields()`'
3337
return []
3438

@@ -146,6 +150,8 @@ def to_html(self, request, queryset, view):
146150

147151
def get_schema_fields(self, view):
148152
assert coreapi is not None, 'coreapi must be installed to use `get_schema_fields()`'
153+
if coreapi is not None:
154+
warnings.warn('CoreAPI compatibility is deprecated and will be removed in DRF 3.17', RemovedInDRF317Warning)
149155
assert coreschema is not None, 'coreschema must be installed to use `get_schema_fields()`'
150156
return [
151157
coreapi.Field(
@@ -306,6 +312,8 @@ def to_html(self, request, queryset, view):
306312

307313
def get_schema_fields(self, view):
308314
assert coreapi is not None, 'coreapi must be installed to use `get_schema_fields()`'
315+
if coreapi is not None:
316+
warnings.warn('CoreAPI compatibility is deprecated and will be removed in DRF 3.17', RemovedInDRF317Warning)
309317
assert coreschema is not None, 'coreschema must be installed to use `get_schema_fields()`'
310318
return [
311319
coreapi.Field(

rest_framework/pagination.py

+11
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
"""
55

66
import contextlib
7+
import warnings
8+
79
from base64 import b64decode, b64encode
810
from collections import namedtuple
911
from urllib import parse
@@ -15,6 +17,7 @@
1517
from django.utils.encoding import force_str
1618
from django.utils.translation import gettext_lazy as _
1719

20+
from rest_framework import RemovedInDRF317Warning
1821
from rest_framework.compat import coreapi, coreschema
1922
from rest_framework.exceptions import NotFound
2023
from rest_framework.response import Response
@@ -152,6 +155,8 @@ def get_results(self, data):
152155

153156
def get_schema_fields(self, view):
154157
assert coreapi is not None, 'coreapi must be installed to use `get_schema_fields()`'
158+
if coreapi is not None:
159+
warnings.warn('CoreAPI compatibility is deprecated and will be removed in DRF 3.17', RemovedInDRF317Warning)
155160
return []
156161

157162
def get_schema_operation_parameters(self, view):
@@ -311,6 +316,8 @@ def to_html(self):
311316

312317
def get_schema_fields(self, view):
313318
assert coreapi is not None, 'coreapi must be installed to use `get_schema_fields()`'
319+
if coreapi is not None:
320+
warnings.warn('CoreAPI compatibility is deprecated and will be removed in DRF 3.17', RemovedInDRF317Warning)
314321
assert coreschema is not None, 'coreschema must be installed to use `get_schema_fields()`'
315322
fields = [
316323
coreapi.Field(
@@ -525,6 +532,8 @@ def get_count(self, queryset):
525532

526533
def get_schema_fields(self, view):
527534
assert coreapi is not None, 'coreapi must be installed to use `get_schema_fields()`'
535+
if coreapi is not None:
536+
warnings.warn('CoreAPI compatibility is deprecated and will be removed in DRF 3.17', RemovedInDRF317Warning)
528537
assert coreschema is not None, 'coreschema must be installed to use `get_schema_fields()`'
529538
return [
530539
coreapi.Field(
@@ -930,6 +939,8 @@ def to_html(self):
930939

931940
def get_schema_fields(self, view):
932941
assert coreapi is not None, 'coreapi must be installed to use `get_schema_fields()`'
942+
if coreapi is not None:
943+
warnings.warn('CoreAPI compatibility is deprecated and will be removed in DRF 3.17', RemovedInDRF317Warning)
933944
assert coreschema is not None, 'coreschema must be installed to use `get_schema_fields()`'
934945
fields = [
935946
coreapi.Field(

rest_framework/schemas/coreapi.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from django.db import models
66
from django.utils.encoding import force_str
77

8-
from rest_framework import exceptions, serializers
8+
from rest_framework import RemovedInDRF317Warning, exceptions, serializers
99
from rest_framework.compat import coreapi, coreschema, uritemplate
1010
from rest_framework.settings import api_settings
1111

@@ -118,6 +118,8 @@ class SchemaGenerator(BaseSchemaGenerator):
118118

119119
def __init__(self, title=None, url=None, description=None, patterns=None, urlconf=None, version=None):
120120
assert coreapi, '`coreapi` must be installed for schema support.'
121+
if coreapi is not None:
122+
warnings.warn('CoreAPI compatibility is deprecated and will be removed in DRF 3.17', RemovedInDRF317Warning)
121123
assert coreschema, '`coreschema` must be installed for schema support.'
122124

123125
super().__init__(title, url, description, patterns, urlconf)
@@ -351,6 +353,9 @@ def __init__(self, manual_fields=None):
351353
will be added to auto-generated fields, overwriting on `Field.name`
352354
"""
353355
super().__init__()
356+
if coreapi is not None:
357+
warnings.warn('CoreAPI compatibility is deprecated and will be removed in DRF 3.17', RemovedInDRF317Warning)
358+
354359
if manual_fields is None:
355360
manual_fields = []
356361
self._manual_fields = manual_fields
@@ -592,6 +597,9 @@ def __init__(self, fields, description='', encoding=None):
592597
* `description`: String description for view. Optional.
593598
"""
594599
super().__init__()
600+
if coreapi is not None:
601+
warnings.warn('CoreAPI compatibility is deprecated and will be removed in DRF 3.17', RemovedInDRF317Warning)
602+
595603
assert all(isinstance(f, coreapi.Field) for f in fields), "`fields` must be a list of coreapi.Field instances"
596604
self._fields = fields
597605
self._description = description
@@ -613,4 +621,6 @@ def get_link(self, path, method, base_url):
613621

614622
def is_enabled():
615623
"""Is CoreAPI Mode enabled?"""
624+
if coreapi is not None:
625+
warnings.warn('CoreAPI compatibility is deprecated and will be removed in DRF 3.17', RemovedInDRF317Warning)
616626
return issubclass(api_settings.DEFAULT_SCHEMA_CLASS, AutoSchema)

setup.cfg

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ license_files = LICENSE.md
33

44
[tool:pytest]
55
addopts=--tb=short --strict-markers -ra
6+
testspath = tests
7+
filterwarnings = ignore:CoreAPI compatibility is deprecated*:rest_framework.RemovedInDRF317Warning
68

79
[flake8]
810
ignore = E501,W503,W504

tests/schemas/test_coreapi.py

+53-2
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,24 @@
77
from django.urls import include, path
88

99
from rest_framework import (
10-
filters, generics, pagination, permissions, serializers
10+
RemovedInDRF317Warning, filters, generics, pagination, permissions,
11+
serializers
1112
)
1213
from rest_framework.compat import coreapi, coreschema
1314
from rest_framework.decorators import action, api_view, schema
15+
from rest_framework.filters import (
16+
BaseFilterBackend, OrderingFilter, SearchFilter
17+
)
18+
from rest_framework.pagination import (
19+
BasePagination, CursorPagination, LimitOffsetPagination,
20+
PageNumberPagination
21+
)
1422
from rest_framework.request import Request
1523
from rest_framework.routers import DefaultRouter, SimpleRouter
1624
from rest_framework.schemas import (
1725
AutoSchema, ManualSchema, SchemaGenerator, get_schema_view
1826
)
19-
from rest_framework.schemas.coreapi import field_to_schema
27+
from rest_framework.schemas.coreapi import field_to_schema, is_enabled
2028
from rest_framework.schemas.generators import EndpointEnumerator
2129
from rest_framework.schemas.utils import is_list_view
2230
from rest_framework.test import APIClient, APIRequestFactory
@@ -1433,3 +1441,46 @@ def test_schema_handles_exception():
14331441
response.render()
14341442
assert response.status_code == 403
14351443
assert b"You do not have permission to perform this action." in response.content
1444+
1445+
1446+
@pytest.mark.skipif(not coreapi, reason='coreapi is not installed')
1447+
def test_coreapi_deprecation():
1448+
with pytest.warns(RemovedInDRF317Warning):
1449+
SchemaGenerator()
1450+
1451+
with pytest.warns(RemovedInDRF317Warning):
1452+
AutoSchema()
1453+
1454+
with pytest.warns(RemovedInDRF317Warning):
1455+
ManualSchema({})
1456+
1457+
with pytest.warns(RemovedInDRF317Warning):
1458+
deprecated_filter = OrderingFilter()
1459+
deprecated_filter.get_schema_fields({})
1460+
1461+
with pytest.warns(RemovedInDRF317Warning):
1462+
deprecated_filter = BaseFilterBackend()
1463+
deprecated_filter.get_schema_fields({})
1464+
1465+
with pytest.warns(RemovedInDRF317Warning):
1466+
deprecated_filter = SearchFilter()
1467+
deprecated_filter.get_schema_fields({})
1468+
1469+
with pytest.warns(RemovedInDRF317Warning):
1470+
paginator = BasePagination()
1471+
paginator.get_schema_fields({})
1472+
1473+
with pytest.warns(RemovedInDRF317Warning):
1474+
paginator = PageNumberPagination()
1475+
paginator.get_schema_fields({})
1476+
1477+
with pytest.warns(RemovedInDRF317Warning):
1478+
paginator = LimitOffsetPagination()
1479+
paginator.get_schema_fields({})
1480+
1481+
with pytest.warns(RemovedInDRF317Warning):
1482+
paginator = CursorPagination()
1483+
paginator.get_schema_fields({})
1484+
1485+
with pytest.warns(RemovedInDRF317Warning):
1486+
is_enabled()

0 commit comments

Comments
 (0)