1
0
mirror of https://github.com/django/django.git synced 2025-06-05 11:39:13 +00:00

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

This commit is contained in:
Tim Graham 2019-02-05 09:19:49 -05:00
parent 3bb6a4390c
commit d55e882927
5 changed files with 54 additions and 2 deletions

View File

@ -1,9 +1,11 @@
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'):
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):

View File

@ -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

View File

@ -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.

View File

@ -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
------------- -------------

View File

@ -0,0 +1,24 @@
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')