Loading django/core/checks/urls.py +5 −5 Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ def check_url_config(app_configs, **kwargs): def check_resolver(resolver): """ Recursively check the resolver Recursively check the resolver. """ from django.core.urlresolvers import RegexURLPattern, RegexURLResolver warnings = [] Loading @@ -31,7 +31,7 @@ def check_resolver(resolver): def describe_pattern(pattern): """ Formats the URL pattern for display in warning messages Format the URL pattern for display in warning messages. """ description = "'{}'".format(pattern.regex.pattern) if getattr(pattern, 'name', False): Loading @@ -41,7 +41,7 @@ def describe_pattern(pattern): def check_include_trailing_dollar(pattern): """ Checks that include is not used with a regex ending with a dollar. Check that include is not used with a regex ending with a dollar. """ regex_pattern = pattern.regex.pattern if regex_pattern.endswith('$') and not regex_pattern.endswith('\$'): Loading @@ -58,7 +58,7 @@ def check_include_trailing_dollar(pattern): def check_pattern_startswith_slash(pattern): """ Checks that the pattern does not begin with a forward slash Check that the pattern does not begin with a forward slash. """ regex_pattern = pattern.regex.pattern if regex_pattern.startswith('/') or regex_pattern.startswith('^/'): Loading @@ -74,7 +74,7 @@ def check_pattern_startswith_slash(pattern): def check_pattern_name(pattern): """ Checks that the pattern name does not contain a colon Check that the pattern name does not contain a colon. """ if pattern.name is not None and ":" in pattern.name: warning = Warning( Loading tests/check_framework/test_urls.py +7 −7 Original line number Diff line number Diff line Loading @@ -4,12 +4,12 @@ from django.test.utils import override_settings class CheckUrlsTest(SimpleTestCase): @override_settings(ROOT_URLCONF='check_framework.urls_no_warnings') def test_include_no_warnings(self): @override_settings(ROOT_URLCONF='check_framework.urls.no_warnings') def test_no_warnings(self): result = check_url_config(None) self.assertEqual(result, []) @override_settings(ROOT_URLCONF='check_framework.urls_include') @override_settings(ROOT_URLCONF='check_framework.urls.include_with_dollar') def test_include_with_dollar(self): result = check_url_config(None) self.assertEqual(len(result), 1) Loading @@ -18,8 +18,8 @@ class CheckUrlsTest(SimpleTestCase): expected_msg = "Your URL pattern '^include-with-dollar$' uses include with a regex ending with a '$'." self.assertIn(expected_msg, warning.msg) @override_settings(ROOT_URLCONF='check_framework.urls_slash') def test_url_beginning_with_slash(self): @override_settings(ROOT_URLCONF='check_framework.urls.beginning_with_slash') def test_beginning_with_slash(self): result = check_url_config(None) self.assertEqual(len(result), 1) warning = result[0] Loading @@ -27,8 +27,8 @@ class CheckUrlsTest(SimpleTestCase): expected_msg = "Your URL pattern '/starting-with-slash/$' has a regex beginning with a '/'" self.assertIn(expected_msg, warning.msg) @override_settings(ROOT_URLCONF='check_framework.urls_name') def test_url_pattern_name_with_colon(self): @override_settings(ROOT_URLCONF='check_framework.urls.name_with_colon') def test_name_with_colon(self): result = check_url_config(None) self.assertEqual(len(result), 1) warning = result[0] Loading tests/check_framework/urls/__init__.py 0 → 100644 +0 −0 Empty file added. tests/check_framework/urls_slash.py→tests/check_framework/urls/beginning_with_slash.py +7 −0 Original line number Diff line number Diff line from django.conf.urls import include, url from django.http import HttpResponse def view(request): return HttpResponse('') urlpatterns = [ url('^', include([ url(r'/starting-with-slash/$', view), url(r'/starting-with-slash/$', lambda x: x), ])), ] tests/check_framework/urls_include.py→tests/check_framework/urls/include_with_dollar.py +0 −0 File moved. View file Loading
django/core/checks/urls.py +5 −5 Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ def check_url_config(app_configs, **kwargs): def check_resolver(resolver): """ Recursively check the resolver Recursively check the resolver. """ from django.core.urlresolvers import RegexURLPattern, RegexURLResolver warnings = [] Loading @@ -31,7 +31,7 @@ def check_resolver(resolver): def describe_pattern(pattern): """ Formats the URL pattern for display in warning messages Format the URL pattern for display in warning messages. """ description = "'{}'".format(pattern.regex.pattern) if getattr(pattern, 'name', False): Loading @@ -41,7 +41,7 @@ def describe_pattern(pattern): def check_include_trailing_dollar(pattern): """ Checks that include is not used with a regex ending with a dollar. Check that include is not used with a regex ending with a dollar. """ regex_pattern = pattern.regex.pattern if regex_pattern.endswith('$') and not regex_pattern.endswith('\$'): Loading @@ -58,7 +58,7 @@ def check_include_trailing_dollar(pattern): def check_pattern_startswith_slash(pattern): """ Checks that the pattern does not begin with a forward slash Check that the pattern does not begin with a forward slash. """ regex_pattern = pattern.regex.pattern if regex_pattern.startswith('/') or regex_pattern.startswith('^/'): Loading @@ -74,7 +74,7 @@ def check_pattern_startswith_slash(pattern): def check_pattern_name(pattern): """ Checks that the pattern name does not contain a colon Check that the pattern name does not contain a colon. """ if pattern.name is not None and ":" in pattern.name: warning = Warning( Loading
tests/check_framework/test_urls.py +7 −7 Original line number Diff line number Diff line Loading @@ -4,12 +4,12 @@ from django.test.utils import override_settings class CheckUrlsTest(SimpleTestCase): @override_settings(ROOT_URLCONF='check_framework.urls_no_warnings') def test_include_no_warnings(self): @override_settings(ROOT_URLCONF='check_framework.urls.no_warnings') def test_no_warnings(self): result = check_url_config(None) self.assertEqual(result, []) @override_settings(ROOT_URLCONF='check_framework.urls_include') @override_settings(ROOT_URLCONF='check_framework.urls.include_with_dollar') def test_include_with_dollar(self): result = check_url_config(None) self.assertEqual(len(result), 1) Loading @@ -18,8 +18,8 @@ class CheckUrlsTest(SimpleTestCase): expected_msg = "Your URL pattern '^include-with-dollar$' uses include with a regex ending with a '$'." self.assertIn(expected_msg, warning.msg) @override_settings(ROOT_URLCONF='check_framework.urls_slash') def test_url_beginning_with_slash(self): @override_settings(ROOT_URLCONF='check_framework.urls.beginning_with_slash') def test_beginning_with_slash(self): result = check_url_config(None) self.assertEqual(len(result), 1) warning = result[0] Loading @@ -27,8 +27,8 @@ class CheckUrlsTest(SimpleTestCase): expected_msg = "Your URL pattern '/starting-with-slash/$' has a regex beginning with a '/'" self.assertIn(expected_msg, warning.msg) @override_settings(ROOT_URLCONF='check_framework.urls_name') def test_url_pattern_name_with_colon(self): @override_settings(ROOT_URLCONF='check_framework.urls.name_with_colon') def test_name_with_colon(self): result = check_url_config(None) self.assertEqual(len(result), 1) warning = result[0] Loading
tests/check_framework/urls_slash.py→tests/check_framework/urls/beginning_with_slash.py +7 −0 Original line number Diff line number Diff line from django.conf.urls import include, url from django.http import HttpResponse def view(request): return HttpResponse('') urlpatterns = [ url('^', include([ url(r'/starting-with-slash/$', view), url(r'/starting-with-slash/$', lambda x: x), ])), ]
tests/check_framework/urls_include.py→tests/check_framework/urls/include_with_dollar.py +0 −0 File moved. View file