Skip to content

Commit 28fd876

Browse files
committed
Fixed django#17892 -- Do not include whole RegexURLPattern lists in RegexURLResolver repr
Thanks milosu for the report and the initial patch.
1 parent c6088bc commit 28fd876

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

django/core/urlresolvers.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,8 +245,13 @@ def __init__(self, regex, urlconf_name, default_kwargs=None, app_name=None, name
245245
self._app_dict = {}
246246

247247
def __repr__(self):
248+
if isinstance(self.urlconf_name, list) and len(self.urlconf_name):
249+
# Don't bother to output the whole list, it can be huge
250+
urlconf_repr = '<%s list>' % self.urlconf_name[0].__class__.__name__
251+
else:
252+
urlconf_repr = repr(self.urlconf_name)
248253
return force_str('<%s %s (%s:%s) %s>' % (
249-
self.__class__.__name__, self.urlconf_name, self.app_name,
254+
self.__class__.__name__, urlconf_repr, self.app_name,
250255
self.namespace, self.regex.pattern))
251256

252257
def _populate(self):

tests/regressiontests/urlpatterns_reverse/tests.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from django.conf import settings
77
from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist
88
from django.core.urlresolvers import (reverse, resolve, get_callable,
9-
NoReverseMatch, Resolver404, ResolverMatch, RegexURLResolver,
9+
get_resolver, NoReverseMatch, Resolver404, ResolverMatch, RegexURLResolver,
1010
RegexURLPattern)
1111
from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
1212
from django.shortcuts import redirect
@@ -172,6 +172,16 @@ def test_reverse_none(self):
172172
self.assertRaises(NoReverseMatch, reverse, None)
173173

174174
class ResolverTests(unittest.TestCase):
175+
def test_resolver_repr(self):
176+
"""
177+
Test repr of RegexURLResolver, especially when urlconf_name is a list
178+
(#17892).
179+
"""
180+
# Pick a resolver from a namespaced urlconf
181+
resolver = get_resolver('regressiontests.urlpatterns_reverse.namespace_urls')
182+
sub_resolver = resolver.namespace_dict['test-ns1'][1]
183+
self.assertIn('<RegexURLPattern list>', repr(sub_resolver))
184+
175185
def test_non_regex(self):
176186
"""
177187
Verifies that we raise a Resolver404 if what we are resolving doesn't

0 commit comments

Comments
 (0)