summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2017-09-02 20:47:47 -0400
committerTim Graham <timograham@gmail.com>2017-09-22 12:51:18 -0400
commit4502489a466b89cccd9d2c1b8d21b2f153d71b4b (patch)
tree1d7c3f1d0c11f981816c6d67e1f3c976013a6ee1
parent5e31be1b96f60232e1e04140c5f0e33d8c2319f1 (diff)
Refs #18974 -- Removed @models.permalink() decorator per deprecation timeline.
-rw-r--r--django/db/models/__init__.py32
-rw-r--r--docs/releases/2.1.txt2
-rw-r--r--tests/model_permalink/__init__.py0
-rw-r--r--tests/model_permalink/models.py30
-rw-r--r--tests/model_permalink/tests.py25
-rw-r--r--tests/model_permalink/urls.py7
-rw-r--r--tests/model_permalink/views.py5
7 files changed, 3 insertions, 98 deletions
diff --git a/django/db/models/__init__.py b/django/db/models/__init__.py
index 628f92db3c..27c67c7fc4 100644
--- a/django/db/models/__init__.py
+++ b/django/db/models/__init__.py
@@ -30,36 +30,6 @@ from django.db.models.fields.related import ( # isort:skip
)
-def permalink(func):
- """
- Decorator that calls urls.reverse() to return a URL using parameters
- returned by the decorated function "func".
-
- "func" should be a function that returns a tuple in one of the
- following formats:
- (viewname, viewargs)
- (viewname, viewargs, viewkwargs)
- """
- import warnings
- from functools import wraps
-
- from django.urls import reverse
- from django.utils.deprecation import RemovedInDjango21Warning
-
- warnings.warn(
- 'permalink() is deprecated in favor of calling django.urls.reverse() '
- 'in the decorated method.',
- RemovedInDjango21Warning,
- stacklevel=2,
- )
-
- @wraps(func)
- def inner(*args, **kwargs):
- bits = func(*args, **kwargs)
- return reverse(bits[0], None, *bits[1:3])
- return inner
-
-
__all__ = aggregates_all + fields_all + indexes_all
__all__ += [
'ObjectDoesNotExist', 'signals',
@@ -72,5 +42,5 @@ __all__ += [
'Prefetch', 'Q', 'QuerySet', 'prefetch_related_objects', 'DEFERRED', 'Model',
'FilteredRelation',
'ForeignKey', 'ForeignObject', 'OneToOneField', 'ManyToManyField',
- 'ManyToOneRel', 'ManyToManyRel', 'OneToOneRel', 'permalink',
+ 'ManyToOneRel', 'ManyToManyRel', 'OneToOneRel',
]
diff --git a/docs/releases/2.1.txt b/docs/releases/2.1.txt
index 085ad3aa7e..5effa6eba9 100644
--- a/docs/releases/2.1.txt
+++ b/docs/releases/2.1.txt
@@ -249,3 +249,5 @@ how to remove usage of these features.
* The ``authenticate()`` method of authentication backends requires ``request``
as the first positional argument.
+
+* The ``django.db.models.permalink()`` decorator is removed.
diff --git a/tests/model_permalink/__init__.py b/tests/model_permalink/__init__.py
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/model_permalink/__init__.py
+++ /dev/null
diff --git a/tests/model_permalink/models.py b/tests/model_permalink/models.py
deleted file mode 100644
index 9074837a8b..0000000000
--- a/tests/model_permalink/models.py
+++ /dev/null
@@ -1,30 +0,0 @@
-import warnings
-
-from django.db import models
-from django.utils.deprecation import RemovedInDjango21Warning
-
-
-def set_attr(name, value):
- def wrapper(function):
- setattr(function, name, value)
- return function
- return wrapper
-
-
-with warnings.catch_warnings():
- warnings.simplefilter('ignore', category=RemovedInDjango21Warning)
-
- class Guitarist(models.Model):
- name = models.CharField(max_length=50)
- slug = models.CharField(max_length=50)
-
- @models.permalink
- def url(self):
- "Returns the URL for this guitarist."
- return ('guitarist_detail', [self.slug])
-
- @models.permalink
- @set_attr('attribute', 'value')
- def url_with_attribute(self):
- "Returns the URL for this guitarist and holds an attribute"
- return ('guitarist_detail', [self.slug])
diff --git a/tests/model_permalink/tests.py b/tests/model_permalink/tests.py
deleted file mode 100644
index 3bc59d930f..0000000000
--- a/tests/model_permalink/tests.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from django.test import SimpleTestCase, override_settings
-
-from .models import Guitarist
-
-
-@override_settings(ROOT_URLCONF='model_permalink.urls')
-class PermalinkTests(SimpleTestCase):
-
- def test_permalink(self):
- g = Guitarist(name='Adrien Moignard', slug='adrienmoignard')
- self.assertEqual(g.url(), '/guitarists/adrienmoignard/')
-
- def test_wrapped_docstring(self):
- "Methods using the @permalink decorator retain their docstring."
- g = Guitarist(name='Adrien Moignard', slug='adrienmoignard')
- self.assertEqual(g.url.__doc__, "Returns the URL for this guitarist.")
-
- def test_wrapped_attribute(self):
- """
- Methods using the @permalink decorator can have attached attributes
- from other decorators
- """
- g = Guitarist(name='Adrien Moignard', slug='adrienmoignard')
- self.assertTrue(hasattr(g.url_with_attribute, 'attribute'))
- self.assertEqual(g.url_with_attribute.attribute, 'value')
diff --git a/tests/model_permalink/urls.py b/tests/model_permalink/urls.py
deleted file mode 100644
index be973aada5..0000000000
--- a/tests/model_permalink/urls.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from django.conf.urls import url
-
-from . import views
-
-urlpatterns = [
- url(r'^guitarists/(\w{1,50})/$', views.empty_view, name='guitarist_detail'),
-]
diff --git a/tests/model_permalink/views.py b/tests/model_permalink/views.py
deleted file mode 100644
index 50e23d1782..0000000000
--- a/tests/model_permalink/views.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from django.http import HttpResponse
-
-
-def empty_view(request, *args, **kwargs):
- return HttpResponse('')