Commit 28fd876b authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #17892 -- Do not include whole RegexURLPattern lists in RegexURLResolver repr

Thanks milosu for the report and the initial patch.
parent c6088bc9
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -245,8 +245,13 @@ class RegexURLResolver(LocaleRegexProvider):
        self._app_dict = {}

    def __repr__(self):
        if isinstance(self.urlconf_name, list) and len(self.urlconf_name):
            # Don't bother to output the whole list, it can be huge
            urlconf_repr = '<%s list>' % self.urlconf_name[0].__class__.__name__
        else:
            urlconf_repr = repr(self.urlconf_name)
        return force_str('<%s %s (%s:%s) %s>' % (
            self.__class__.__name__, self.urlconf_name, self.app_name,
            self.__class__.__name__, urlconf_repr, self.app_name,
            self.namespace, self.regex.pattern))

    def _populate(self):
+11 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ from __future__ import absolute_import, unicode_literals
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist
from django.core.urlresolvers import (reverse, resolve, get_callable,
    NoReverseMatch, Resolver404, ResolverMatch, RegexURLResolver,
    get_resolver, NoReverseMatch, Resolver404, ResolverMatch, RegexURLResolver,
    RegexURLPattern)
from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
from django.shortcuts import redirect
@@ -172,6 +172,16 @@ class URLPatternReverse(TestCase):
        self.assertRaises(NoReverseMatch, reverse, None)

class ResolverTests(unittest.TestCase):
    def test_resolver_repr(self):
        """
        Test repr of RegexURLResolver, especially when urlconf_name is a list
        (#17892).
        """
        # Pick a resolver from a namespaced urlconf
        resolver = get_resolver('regressiontests.urlpatterns_reverse.namespace_urls')
        sub_resolver = resolver.namespace_dict['test-ns1'][1]
        self.assertIn('<RegexURLPattern list>', repr(sub_resolver))

    def test_non_regex(self):
        """
        Verifies that we raise a Resolver404 if what we are resolving doesn't