summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2018-07-14 10:38:18 +0200
committerTim Graham <timograham@gmail.com>2018-07-20 10:44:30 -0400
commitb004bd62e83588fdb0e533fdeec993aec358281d (patch)
tree0752bdad31c3132e1eb96b0a10346b7c394a8910
parent861638a3074f289faf729d739edf6326332a484f (diff)
Fixed #29412 -- Stopped marking slugify() result as HTML safe.
-rw-r--r--django/utils/text.py9
-rw-r--r--docs/releases/2.2.txt3
-rw-r--r--tests/utils_tests/test_safestring.py6
-rw-r--r--tests/utils_tests/test_text.py3
4 files changed, 10 insertions, 11 deletions
diff --git a/django/utils/text.py b/django/utils/text.py
index 746a67ee00..e980f7170f 100644
--- a/django/utils/text.py
+++ b/django/utils/text.py
@@ -4,10 +4,7 @@ import unicodedata
from gzip import GzipFile
from io import BytesIO
-from django.utils.functional import (
- SimpleLazyObject, keep_lazy, keep_lazy_text, lazy,
-)
-from django.utils.safestring import SafeText, mark_safe
+from django.utils.functional import SimpleLazyObject, keep_lazy_text, lazy
from django.utils.translation import gettext as _, gettext_lazy, pgettext
@@ -399,7 +396,7 @@ def unescape_string_literal(s):
return s[1:-1].replace(r'\%s' % quote, quote).replace(r'\\', '\\')
-@keep_lazy(str, SafeText)
+@keep_lazy_text
def slugify(value, allow_unicode=False):
"""
Convert to ASCII if 'allow_unicode' is False. Convert spaces to hyphens.
@@ -412,7 +409,7 @@ def slugify(value, allow_unicode=False):
else:
value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii')
value = re.sub(r'[^\w\s-]', '', value).strip().lower()
- return mark_safe(re.sub(r'[-\s]+', '-', value))
+ return re.sub(r'[-\s]+', '-', value)
def camel_case_to_spaces(value):
diff --git a/docs/releases/2.2.txt b/docs/releases/2.2.txt
index ce8bcd6fa4..0145b0d5e2 100644
--- a/docs/releases/2.2.txt
+++ b/docs/releases/2.2.txt
@@ -244,6 +244,9 @@ Miscellaneous
* For consistency with WSGI servers, the test client now sets the
``Content-Length`` header to a string rather than an integer.
+* The return value of :func:`django.utils.text.slugify` is no longer marked as
+ HTML safe.
+
.. _deprecated-features-2.2:
Features deprecated in 2.2
diff --git a/tests/utils_tests/test_safestring.py b/tests/utils_tests/test_safestring.py
index bb4dfd1280..b880d19f27 100644
--- a/tests/utils_tests/test_safestring.py
+++ b/tests/utils_tests/test_safestring.py
@@ -1,6 +1,6 @@
from django.template import Context, Template
from django.test import SimpleTestCase
-from django.utils import html, text
+from django.utils import html
from django.utils.functional import lazy, lazystr
from django.utils.safestring import SafeData, mark_safe
@@ -69,10 +69,6 @@ class SafeStringTest(SimpleTestCase):
s += mark_safe('&b')
self.assertRenderEqual('{{ s }}', 'a&b', s=s)
- s = text.slugify(lazystr('a'))
- s += mark_safe('&b')
- self.assertRenderEqual('{{ s }}', 'a&b', s=s)
-
def test_mark_safe_as_decorator(self):
"""
mark_safe used as a decorator leaves the result of a function
diff --git a/tests/utils_tests/test_text.py b/tests/utils_tests/test_text.py
index 693c436eb8..5e12391116 100644
--- a/tests/utils_tests/test_text.py
+++ b/tests/utils_tests/test_text.py
@@ -1,4 +1,5 @@
import json
+import sys
from django.test import SimpleTestCase
from django.utils import text
@@ -179,6 +180,8 @@ class TestUtilsText(SimpleTestCase):
)
for value, output, is_unicode in items:
self.assertEqual(text.slugify(value, allow_unicode=is_unicode), output)
+ # interning the result may be useful, e.g. when fed to Path.
+ self.assertEqual(sys.intern(text.slugify('a')), 'a')
def test_unescape_entities(self):
items = [