Commit a0a0203a authored by Aymeric Augustin's avatar Aymeric Augustin
Browse files

[py3] Added python_2_unicode_compatible decorator.

parent e7e08fd4
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -39,6 +39,19 @@ class StrAndUnicode(object):
        def __str__(self):
            return self.__unicode__().encode('utf-8')

def python_2_unicode_compatible(klass):
    """
    A decorator that defines __unicode__ and __str__ methods under Python 2.
    Under Python 3 it does nothing.

    To support Python 2 and 3 with a single code base, define a __str__ method
    returning text and apply this decorator to the class.
    """
    if not six.PY3:
        klass.__unicode__ = klass.__str__
        klass.__str__ = lambda self: self.__unicode__().encode('utf-8')
    return klass

def smart_text(s, encoding='utf-8', strings_only=False, errors='strict'):
    """
    Returns a text object representing 's' -- unicode on Python 2 and str on
+8 −0
Original line number Diff line number Diff line
@@ -187,6 +187,14 @@ The functions defined in this module share the following properties:
    Useful as a mix-in. If you support Python 2 and 3 with a single code base,
    you can inherit this mix-in and just define ``__unicode__``.

.. function:: python_2_unicode_compatible

    A decorator that defines ``__unicode__`` and ``__str__`` methods under
    Python 2. Under Python 3 it does nothing.

    To support Python 2 and 3 with a single code base, define a ``__str__``
    method returning text and apply this decorator to the class.

.. function:: smart_text(s, encoding='utf-8', strings_only=False, errors='strict')

    .. versionadded:: 1.5