Skip to content

Commit 856e33c

Browse files
committed
Remove support for CoreAPI
1 parent e45518a commit 856e33c

49 files changed

Lines changed: 20 additions & 7055 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

pyproject.toml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,6 @@ docs = [
6262
]
6363
optional = [
6464
# Optional packages which may be used with REST framework.
65-
"coreapi==2.3.3",
66-
"coreschema==0.0.4",
6765
"django-filter",
6866
"django-guardian>=2.4.0,<3.3",
6967
"inflection==0.5.1",
@@ -72,8 +70,6 @@ optional = [
7270
"psycopg[binary]>=3.1.8",
7371
"pygments>=2.17,<2.20",
7472
"pyyaml>=5.3.1,<6.1",
75-
# setuptools is needed for coreapi (imports pkg_resources)
76-
"setuptools<82",
7773
]
7874
django42 = [ "django>=4.2,<5.0" ]
7975
django50 = [ "django>=5.0,<5.1" ]
@@ -119,7 +115,6 @@ keep_full_version = true
119115
addopts = "--tb=short --strict-markers -ra"
120116
testpaths = [ "tests" ]
121117
filterwarnings = [
122-
"ignore:CoreAPI compatibility is deprecated*:rest_framework.RemovedInDRF318Warning",
123118
"ignore:'cgi' is deprecated:DeprecationWarning",
124119
]
125120

rest_framework/__init__.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,3 @@
2222
# Default datetime input and output formats
2323
ISO_8601 = 'iso-8601'
2424
DJANGO_DURATION_FORMAT = 'django'
25-
26-
27-
class RemovedInDRF318Warning(DeprecationWarning):
28-
pass

rest_framework/authtoken/views.py

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
from rest_framework import parsers, renderers
22
from rest_framework.authtoken.models import Token
33
from rest_framework.authtoken.serializers import AuthTokenSerializer
4-
from rest_framework.compat import coreapi, coreschema
54
from rest_framework.response import Response
6-
from rest_framework.schemas import ManualSchema
7-
from rest_framework.schemas import coreapi as coreapi_schema
85
from rest_framework.views import APIView
96

107

@@ -15,31 +12,6 @@ class ObtainAuthToken(APIView):
1512
renderer_classes = (renderers.JSONRenderer,)
1613
serializer_class = AuthTokenSerializer
1714

18-
if coreapi_schema.is_enabled():
19-
schema = ManualSchema(
20-
fields=[
21-
coreapi.Field(
22-
name="username",
23-
required=True,
24-
location='form',
25-
schema=coreschema.String(
26-
title="Username",
27-
description="Valid username for authentication",
28-
),
29-
),
30-
coreapi.Field(
31-
name="password",
32-
required=True,
33-
location='form',
34-
schema=coreschema.String(
35-
title="Password",
36-
description="Valid password for authentication",
37-
),
38-
),
39-
],
40-
encoding="application/json",
41-
)
42-
4315
def get_serializer_context(self):
4416
return {
4517
'request': self.request,

rest_framework/compat.py

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,26 +23,13 @@ def unicode_http_header(value):
2323
postgres_fields = None
2424

2525

26-
# coreapi is required for CoreAPI schema generation
27-
try:
28-
import coreapi
29-
except ImportError:
30-
coreapi = None
31-
32-
# uritemplate is required for OpenAPI and CoreAPI schema generation
26+
# uritemplate is required for OpenAPI schema generation
3327
try:
3428
import uritemplate
3529
except ImportError:
3630
uritemplate = None
3731

3832

39-
# coreschema is optional
40-
try:
41-
import coreschema
42-
except ImportError:
43-
coreschema = None
44-
45-
4633
# pyyaml is optional
4734
try:
4835
import yaml

rest_framework/documentation.py

Lines changed: 0 additions & 88 deletions
This file was deleted.

rest_framework/filters.py

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
returned by list views.
44
"""
55
import operator
6-
import warnings
76
from functools import reduce
87

98
from django.core.exceptions import FieldDoesNotExist, ImproperlyConfigured
@@ -14,8 +13,6 @@
1413
from django.utils.text import smart_split, unescape_string_literal
1514
from django.utils.translation import gettext_lazy as _
1615

17-
from rest_framework import RemovedInDRF318Warning
18-
from rest_framework.compat import coreapi, coreschema
1916
from rest_framework.fields import CharField
2017
from rest_framework.settings import api_settings
2118

@@ -48,13 +45,6 @@ def filter_queryset(self, request, queryset, view):
4845
"""
4946
raise NotImplementedError(".filter_queryset() must be overridden.")
5047

51-
def get_schema_fields(self, view):
52-
assert coreapi is not None, 'coreapi must be installed to use `get_schema_fields()`'
53-
if coreapi is not None:
54-
warnings.warn('CoreAPI compatibility is deprecated and will be removed in DRF 3.18', RemovedInDRF318Warning)
55-
assert coreschema is not None, 'coreschema must be installed to use `get_schema_fields()`'
56-
return []
57-
5848
def get_schema_operation_parameters(self, view):
5949
return []
6050

@@ -186,23 +176,6 @@ def to_html(self, request, queryset, view):
186176
template = loader.get_template(self.template)
187177
return template.render(context)
188178

189-
def get_schema_fields(self, view):
190-
assert coreapi is not None, 'coreapi must be installed to use `get_schema_fields()`'
191-
if coreapi is not None:
192-
warnings.warn('CoreAPI compatibility is deprecated and will be removed in DRF 3.18', RemovedInDRF318Warning)
193-
assert coreschema is not None, 'coreschema must be installed to use `get_schema_fields()`'
194-
return [
195-
coreapi.Field(
196-
name=self.search_param,
197-
required=False,
198-
location='query',
199-
schema=coreschema.String(
200-
title=force_str(self.search_title),
201-
description=force_str(self.search_description)
202-
)
203-
)
204-
]
205-
206179
def get_schema_operation_parameters(self, view):
207180
return [
208181
{
@@ -352,23 +325,6 @@ def to_html(self, request, queryset, view):
352325
context = self.get_template_context(request, queryset, view)
353326
return template.render(context)
354327

355-
def get_schema_fields(self, view):
356-
assert coreapi is not None, 'coreapi must be installed to use `get_schema_fields()`'
357-
if coreapi is not None:
358-
warnings.warn('CoreAPI compatibility is deprecated and will be removed in DRF 3.18', RemovedInDRF318Warning)
359-
assert coreschema is not None, 'coreschema must be installed to use `get_schema_fields()`'
360-
return [
361-
coreapi.Field(
362-
name=self.ordering_param,
363-
required=False,
364-
location='query',
365-
schema=coreschema.String(
366-
title=force_str(self.ordering_title),
367-
description=force_str(self.ordering_description)
368-
)
369-
)
370-
]
371-
372328
def get_schema_operation_parameters(self, view):
373329
return [
374330
{

rest_framework/management/commands/generateschema.py

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,17 @@
22
from django.utils.module_loading import import_string
33

44
from rest_framework import renderers
5-
from rest_framework.schemas import coreapi
65
from rest_framework.schemas.openapi import SchemaGenerator
76

8-
OPENAPI_MODE = 'openapi'
9-
COREAPI_MODE = 'coreapi'
10-
117

128
class Command(BaseCommand):
139
help = "Generates configured API schema for project."
1410

15-
def get_mode(self):
16-
return COREAPI_MODE if coreapi.is_enabled() else OPENAPI_MODE
17-
1811
def add_arguments(self, parser):
1912
parser.add_argument('--title', dest="title", default='', type=str)
2013
parser.add_argument('--url', dest="url", default=None, type=str)
2114
parser.add_argument('--description', dest="description", default=None, type=str)
22-
if self.get_mode() == COREAPI_MODE:
23-
parser.add_argument('--format', dest="format", choices=['openapi', 'openapi-json', 'corejson'], default='openapi', type=str)
24-
else:
25-
parser.add_argument('--format', dest="format", choices=['openapi', 'openapi-json'], default='openapi', type=str)
15+
parser.add_argument('--format', dest="format", choices=['openapi', 'openapi-json'], default='openapi', type=str)
2616
parser.add_argument('--urlconf', dest="urlconf", default=None, type=str)
2717
parser.add_argument('--generator_class', dest="generator_class", default=None, type=str)
2818
parser.add_argument('--file', dest="file", default=None, type=str)
@@ -32,7 +22,7 @@ def handle(self, *args, **options):
3222
if options['generator_class']:
3323
generator_class = import_string(options['generator_class'])
3424
else:
35-
generator_class = self.get_generator_class()
25+
generator_class = SchemaGenerator
3626
generator = generator_class(
3727
url=options['url'],
3828
title=options['title'],
@@ -51,21 +41,8 @@ def handle(self, *args, **options):
5141
self.stdout.write(output.decode())
5242

5343
def get_renderer(self, format):
54-
if self.get_mode() == COREAPI_MODE:
55-
renderer_cls = {
56-
'corejson': renderers.CoreJSONRenderer,
57-
'openapi': renderers.CoreAPIOpenAPIRenderer,
58-
'openapi-json': renderers.CoreAPIJSONOpenAPIRenderer,
59-
}[format]
60-
return renderer_cls()
61-
6244
renderer_cls = {
6345
'openapi': renderers.OpenAPIRenderer,
6446
'openapi-json': renderers.JSONOpenAPIRenderer,
6547
}[format]
6648
return renderer_cls()
67-
68-
def get_generator_class(self):
69-
if self.get_mode() == COREAPI_MODE:
70-
return coreapi.SchemaGenerator
71-
return SchemaGenerator

0 commit comments

Comments
 (0)