mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-06-10 08:33:24 +03:00
Update framework deprecation warnings (#7075)
- Bump version numbers for deprecation warnings - Drop deprecated features
This commit is contained in:
parent
95d4843abe
commit
90eaf51839
|
@ -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
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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'),
|
|
||||||
]
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user