summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Phalip <jphalip@gmail.com>2012-07-21 13:30:34 -0700
committerJulien Phalip <jphalip@gmail.com>2012-07-21 13:30:34 -0700
commit1af0271d7c6f5ecda2247a2b363d25f493c7b05a (patch)
treeeaa0dc2e4c6d157e0560464115bd81631a727691
parent9ecd978e269f28f711080fa66e47c84e6ff08d90 (diff)
Fixed #6170 -- Ensured that a useful exception is raised when a regex is invalid in the URLConf.
Thanks to abrahamson.j for the report, to guettli for initial work on the patch, and to David Gouldin for the new patch and test.
-rw-r--r--django/core/urlresolvers.py8
-rw-r--r--tests/regressiontests/urlpatterns_reverse/erroneous_urls.py2
-rw-r--r--tests/regressiontests/urlpatterns_reverse/tests.py8
3 files changed, 17 insertions, 1 deletions
diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py
index 625ec6348b..58213a3a73 100644
--- a/django/core/urlresolvers.py
+++ b/django/core/urlresolvers.py
@@ -160,10 +160,16 @@ class LocaleRegexProvider(object):
language_code = get_language()
if language_code not in self._regex_dict:
if isinstance(self._regex, basestring):
- compiled_regex = re.compile(self._regex, re.UNICODE)
+ regex = self._regex
else:
regex = force_unicode(self._regex)
+ try:
compiled_regex = re.compile(regex, re.UNICODE)
+ except re.error, e:
+ raise ImproperlyConfigured(
+ u'"%s" is not a valid regular expression: %s' %
+ (regex, unicode(e)))
+
self._regex_dict[language_code] = compiled_regex
return self._regex_dict[language_code]
diff --git a/tests/regressiontests/urlpatterns_reverse/erroneous_urls.py b/tests/regressiontests/urlpatterns_reverse/erroneous_urls.py
index 8e6433e16e..d1e4f3db5d 100644
--- a/tests/regressiontests/urlpatterns_reverse/erroneous_urls.py
+++ b/tests/regressiontests/urlpatterns_reverse/erroneous_urls.py
@@ -11,4 +11,6 @@ urlpatterns = patterns('',
url(r'uncallable/$', 'regressiontests.urlpatterns_reverse.views.uncallable'),
# Module does not exist
url(r'missing_outer/$', 'regressiontests.urlpatterns_reverse.missing_module.missing_view'),
+ # Regex contains an error (refs #6170)
+ url(r'(regex_error/$', 'regressiontestes.urlpatterns_reverse.views.empty_view'),
)
diff --git a/tests/regressiontests/urlpatterns_reverse/tests.py b/tests/regressiontests/urlpatterns_reverse/tests.py
index bb25806830..500a0e0327 100644
--- a/tests/regressiontests/urlpatterns_reverse/tests.py
+++ b/tests/regressiontests/urlpatterns_reverse/tests.py
@@ -511,3 +511,11 @@ class ErroneousViewTests(TestCase):
self.assertRaises(ViewDoesNotExist, self.client.get, '/missing_outer/')
self.assertRaises(ViewDoesNotExist, self.client.get, '/uncallable/')
+ def test_erroneous_reverse(self):
+ """
+ Ensure that a useful exception is raised when a regex is invalid in the
+ URLConf.
+ Refs #6170.
+ """
+ # The regex error will be hit before NoReverseMatch can be raised
+ self.assertRaises(ImproperlyConfigured, reverse, 'whatever blah blah')