Update framework deprecation warnings (#7075)

- Bump version numbers for deprecation warnings
- Drop deprecated features
This commit is contained in:
Ryan P Kilby 2019-12-04 16:18:38 -08:00 committed by GitHub
parent 95d4843abe
commit 90eaf51839
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 6 additions and 95 deletions

View File

@ -25,9 +25,9 @@ ISO_8601 = 'iso-8601'
default_app_config = 'rest_framework.apps.RestFrameworkConfig' default_app_config = 'rest_framework.apps.RestFrameworkConfig'
class RemovedInDRF311Warning(DeprecationWarning): class RemovedInDRF312Warning(DeprecationWarning):
pass pass
class RemovedInDRF312Warning(PendingDeprecationWarning): class RemovedInDRF313Warning(PendingDeprecationWarning):
pass pass

View File

@ -14,15 +14,13 @@ For example, you might have a `urls.py` that looks something like this:
urlpatterns = router.urls urlpatterns = router.urls
""" """
import itertools import itertools
import warnings
from collections import OrderedDict, namedtuple from collections import OrderedDict, namedtuple
from django.conf.urls import url from django.conf.urls import url
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.urls import NoReverseMatch from django.urls import NoReverseMatch
from django.utils.deprecation import RenameMethodsBase
from rest_framework import RemovedInDRF311Warning, views from rest_framework import views
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.reverse import reverse from rest_framework.reverse import reverse
from rest_framework.schemas import SchemaGenerator from rest_framework.schemas import SchemaGenerator
@ -48,27 +46,11 @@ def flatten(list_of_lists):
return itertools.chain(*list_of_lists) return itertools.chain(*list_of_lists)
class RenameRouterMethods(RenameMethodsBase): class BaseRouter:
renamed_methods = (
('get_default_base_name', 'get_default_basename', RemovedInDRF311Warning),
)
class BaseRouter(metaclass=RenameRouterMethods):
def __init__(self): def __init__(self):
self.registry = [] self.registry = []
def register(self, prefix, viewset, basename=None, base_name=None): def register(self, prefix, viewset, basename=None):
if base_name is not None:
msg = "The `base_name` argument is pending deprecation in favor of `basename`."
warnings.warn(msg, RemovedInDRF311Warning, 2)
assert not (basename and base_name), (
"Do not provide both the `basename` and `base_name` arguments.")
if basename is None:
basename = base_name
if basename is None: if basename is None:
basename = self.get_default_basename(viewset) basename = self.get_default_basename(viewset)
self.registry.append((prefix, viewset, basename)) self.registry.append((prefix, viewset, basename))

View File

@ -1,4 +1,3 @@
import warnings
from collections import namedtuple from collections import namedtuple
import pytest import pytest
@ -8,9 +7,7 @@ from django.db import models
from django.test import TestCase, override_settings from django.test import TestCase, override_settings
from django.urls import resolve, reverse from django.urls import resolve, reverse
from rest_framework import ( from rest_framework import permissions, serializers, viewsets
RemovedInDRF311Warning, permissions, serializers, viewsets
)
from rest_framework.compat import get_regex_pattern from rest_framework.compat import get_regex_pattern
from rest_framework.decorators import action from rest_framework.decorators import action
from rest_framework.response import Response from rest_framework.response import Response
@ -488,71 +485,3 @@ class TestViewInitkwargs(URLPatternsTestCase, TestCase):
initkwargs = match.func.initkwargs initkwargs = match.func.initkwargs
assert initkwargs['basename'] == 'routertestmodel' assert initkwargs['basename'] == 'routertestmodel'
class TestBaseNameRename(TestCase):
def test_base_name_and_basename_assertion(self):
router = SimpleRouter()
msg = "Do not provide both the `basename` and `base_name` arguments."
with warnings.catch_warnings(record=True) as w, \
self.assertRaisesMessage(AssertionError, msg):
warnings.simplefilter('always')
router.register('mock', MockViewSet, 'mock', base_name='mock')
msg = "The `base_name` argument is pending deprecation in favor of `basename`."
assert len(w) == 1
assert str(w[0].message) == msg
def test_base_name_argument_deprecation(self):
router = SimpleRouter()
with pytest.warns(RemovedInDRF311Warning) as w:
warnings.simplefilter('always')
router.register('mock', MockViewSet, base_name='mock')
msg = "The `base_name` argument is pending deprecation in favor of `basename`."
assert len(w) == 1
assert str(w[0].message) == msg
assert router.registry == [
('mock', MockViewSet, 'mock'),
]
def test_basename_argument_no_warnings(self):
router = SimpleRouter()
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always')
router.register('mock', MockViewSet, basename='mock')
assert len(w) == 0
assert router.registry == [
('mock', MockViewSet, 'mock'),
]
def test_get_default_base_name_deprecation(self):
msg = "`CustomRouter.get_default_base_name` method should be renamed `get_default_basename`."
# Class definition should raise a warning
with pytest.warns(RemovedInDRF311Warning) as w:
warnings.simplefilter('always')
class CustomRouter(SimpleRouter):
def get_default_base_name(self, viewset):
return 'foo'
assert len(w) == 1
assert str(w[0].message) == msg
# Deprecated method implementation should still be called
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always')
router = CustomRouter()
router.register('mock', MockViewSet)
assert len(w) == 0
assert router.registry == [
('mock', MockViewSet, 'foo'),
]