Kaydet (Commit) d55e8829 authored tarafından Tim Graham's avatar Tim Graham

Refs #27753 -- Deprecated django.utils.encoding.force_text() and smart_text().

üst 3bb6a439
import codecs import codecs
import datetime import datetime
import locale import locale
import warnings
from decimal import Decimal from decimal import Decimal
from urllib.parse import quote from urllib.parse import quote
from django.utils.deprecation import RemovedInDjango40Warning
from django.utils.functional import Promise from django.utils.functional import Promise
...@@ -97,8 +99,20 @@ def force_bytes(s, encoding='utf-8', strings_only=False, errors='strict'): ...@@ -97,8 +99,20 @@ def force_bytes(s, encoding='utf-8', strings_only=False, errors='strict'):
return str(s).encode(encoding, errors) return str(s).encode(encoding, errors)
smart_text = smart_str def smart_text(s, encoding='utf-8', strings_only=False, errors='strict'):
force_text = force_str warnings.warn(
'smart_text() is deprecated in favor of smart_str().',
RemovedInDjango40Warning, stacklevel=2,
)
return smart_str(s, encoding, strings_only, errors)
def force_text(s, encoding='utf-8', strings_only=False, errors='strict'):
warnings.warn(
'force_text() is deprecated in favor of force_str().',
RemovedInDjango40Warning, stacklevel=2,
)
return force_str(s, encoding, strings_only, errors)
def iri_to_uri(iri): def iri_to_uri(iri):
......
...@@ -18,6 +18,8 @@ details on these changes. ...@@ -18,6 +18,8 @@ details on these changes.
* ``django.utils.http.urlquote()``, ``urlquote_plus()``, ``urlunquote()``, and * ``django.utils.http.urlquote()``, ``urlquote_plus()``, ``urlunquote()``, and
``urlunquote_plus()`` will be removed. ``urlunquote_plus()`` will be removed.
* ``django.utils.encoding.force_text()`` and ``smart_text()`` will be removed.
.. _deprecation-removed-in-3.1: .. _deprecation-removed-in-3.1:
3.1 3.1
......
...@@ -232,11 +232,15 @@ The functions defined in this module share the following properties: ...@@ -232,11 +232,15 @@ The functions defined in this module share the following properties:
.. function:: smart_text(s, encoding='utf-8', strings_only=False, errors='strict') .. function:: smart_text(s, encoding='utf-8', strings_only=False, errors='strict')
.. deprecated:: 3.0
Alias of :func:`force_str` for backwards compatibility, especially in code Alias of :func:`force_str` for backwards compatibility, especially in code
that supports Python 2. that supports Python 2.
.. function:: force_text(s, encoding='utf-8', strings_only=False, errors='strict') .. function:: force_text(s, encoding='utf-8', strings_only=False, errors='strict')
.. deprecated:: 3.0
Alias of :func:`force_str` for backwards compatibility, especially in code Alias of :func:`force_str` for backwards compatibility, especially in code
that supports Python 2. that supports Python 2.
......
...@@ -292,6 +292,14 @@ Miscellaneous ...@@ -292,6 +292,14 @@ Miscellaneous
Features deprecated in 3.0 Features deprecated in 3.0
========================== ==========================
``django.utils.encoding.force_text()`` and ``smart_text()``
-----------------------------------------------------------
The ``smart_text()`` and ``force_text()`` aliases (since Django 2.0) of
``smart_str()`` and ``force_str()`` are deprecated. Ignore this deprecation if
your code supports Python 2 as the behavior of ``smart_str()`` and
``force_str()`` is different there.
Miscellaneous Miscellaneous
------------- -------------
......
from django.test import SimpleTestCase, ignore_warnings
from django.utils.deprecation import RemovedInDjango40Warning
from django.utils.encoding import force_text, smart_text
from django.utils.functional import SimpleLazyObject
from django.utils.translation import gettext_lazy
@ignore_warnings(category=RemovedInDjango40Warning)
class TestDeprecatedEncodingUtils(SimpleTestCase):
def test_force_text(self):
s = SimpleLazyObject(lambda: 'x')
self.assertIs(type(force_text(s)), str)
def test_smart_text(self):
class Test:
def __str__(self):
return 'ŠĐĆŽćžšđ'
lazy_func = gettext_lazy('x')
self.assertIs(smart_text(lazy_func), lazy_func)
self.assertEqual(smart_text(Test()), '\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
self.assertEqual(smart_text(1), '1')
self.assertEqual(smart_text('foo'), 'foo')
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment