Fixed #31459 -- Fixed handling invalid indentifiers in URL path conversion.

This patch adjusted existing tests that used invalid identifiers.
This commit is contained in:
Adam Johnson 2020-04-13 09:07:28 +01:00 committed by Mariusz Felisiak
parent 578c03b276
commit 4bb33bb074
5 changed files with 13 additions and 5 deletions

View File

@ -197,7 +197,7 @@ class RegexPattern(CheckURLMixin):
_PATH_PARAMETER_COMPONENT_RE = _lazy_re_compile(
r'<(?:(?P<converter>[^>:]+):)?(?P<parameter>\w+)>'
r'<(?:(?P<converter>[^>:]+):)?(?P<parameter>[^>]+)>'
)

View File

@ -143,7 +143,7 @@ class UpdatedToPathTests(SimpleTestCase):
self.assertEqual(len(result), 1)
warning = result[0]
self.assertEqual(warning.id, '2_0.W001')
expected_msg = "Your URL pattern '(?P<named-group>\\d+)' has a route"
expected_msg = "Your URL pattern '(?P<named_group>\\d+)' has a route"
self.assertIn(expected_msg, warning.msg)
@override_settings(ROOT_URLCONF='check_framework.urls.path_compatibility.beginning_with_caret')

View File

@ -1,5 +1,5 @@
from django.urls import path
urlpatterns = [
path(r'(?P<named-group>\d+)', lambda x: x),
path(r'(?P<named_group>\d+)', lambda x: x),
]

View File

@ -20,7 +20,7 @@ urlpatterns += [
gis_sitemap_views.kml,
name='django.contrib.gis.sitemaps.views.kml'),
path(
'sitemaps/kml/<label>/<<model>/<field_name>.kmz',
'sitemaps/kml/<label>/<model>/<field_name>.kmz',
gis_sitemap_views.kmz,
name='django.contrib.gis.sitemaps.views.kmz'),
]

View File

@ -249,7 +249,7 @@ class SameNameTests(SimpleTestCase):
class ParameterRestrictionTests(SimpleTestCase):
def test_non_identifier_parameter_name_causes_exception(self):
def test_integer_parameter_name_causes_exception(self):
msg = (
"URL route 'hello/<int:1>/' uses parameter name '1' which isn't "
"a valid Python identifier."
@ -257,6 +257,14 @@ class ParameterRestrictionTests(SimpleTestCase):
with self.assertRaisesMessage(ImproperlyConfigured, msg):
path(r'hello/<int:1>/', lambda r: None)
def test_non_identifier_parameter_name_causes_exception(self):
msg = (
"URL route 'b/<int:book.id>/' uses parameter name 'book.id' which "
"isn't a valid Python identifier."
)
with self.assertRaisesMessage(ImproperlyConfigured, msg):
path(r'b/<int:book.id>/', lambda r: None)
def test_allows_non_ascii_but_valid_identifiers(self):
# \u0394 is "GREEK CAPITAL LETTER DELTA", a valid identifier.
p = path('hello/<str:\u0394>/', lambda r: None)