Commit 72c57338 authored by Adrian Holovaty's avatar Adrian Holovaty
Browse files

Fixed #15604 -- Changed django.db.models.permalink to use wraps() so that it...

Fixed #15604 -- Changed django.db.models.permalink to use wraps() so that it doesn't eat the docstring. Thanks for the report, sfllaw. Also added tests.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@15798 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 3a5b87cf
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ from django.db.models.fields.files import FileField, ImageField
from django.db.models.fields.related import ForeignKey, OneToOneField, ManyToManyField, ManyToOneRel, ManyToManyRel, OneToOneRel
from django.db.models.deletion import CASCADE, PROTECT, SET, SET_NULL, SET_DEFAULT, DO_NOTHING, ProtectedError
from django.db.models import signals
from django.utils.decorators import wraps

# Admin stages.
ADD, CHANGE, BOTH = 1, 2, 3
@@ -28,6 +29,7 @@ def permalink(func):
        (viewname, viewargs, viewkwargs)
    """
    from django.core.urlresolvers import reverse
    @wraps(func)
    def inner(*args, **kwargs):
        bits = func(*args, **kwargs)
        return reverse(bits[0], None, *bits[1:3])
+0 −0

Empty file added.

+10 −0
Original line number Diff line number Diff line
from django.db import models

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])
+14 −0
Original line number Diff line number Diff line
from django.test import TestCase
from regressiontests.model_permalink.models import Guitarist

class PermalinkTests(TestCase):
    urls = 'regressiontests.model_permalink.urls'

    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.")
+5 −0
Original line number Diff line number Diff line
from django.conf.urls.defaults import *

urlpatterns = patterns('',
    url(r'^guitarists/(\w{1,50})/$', 'unimplemented_view_placeholder', name='guitarist_detail'),
)