From: Aarni Koskela Date: Mon, 28 May 2018 09:57:45 +0000 (+0300) Subject: _compat: add force_text a la Django X-Git-Tag: v2.6.0~2^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=34a6ccce1d93843d53efb5985ff5bbb7ea063e31;p=thirdparty%2Fbabel.git _compat: add force_text a la Django --- diff --git a/babel/_compat.py b/babel/_compat.py index aea33893..1131f44a 100644 --- a/babel/_compat.py +++ b/babel/_compat.py @@ -8,11 +8,12 @@ _identity = lambda x: x if not PY2: text_type = str + binary_type = bytes string_types = (str,) integer_types = (int, ) - unichr = chr text_to_native = lambda s, enc: s + unichr = chr iterkeys = lambda d: iter(d.keys()) itervalues = lambda d: iter(d.values()) @@ -31,6 +32,7 @@ if not PY2: else: text_type = unicode + binary_type = str string_types = (str, unicode) integer_types = (int, long) @@ -57,6 +59,14 @@ else: number_types = integer_types + (float,) +def force_text(s, encoding='utf-8', errors='strict'): + if isinstance(s, text_type): + return s + if isinstance(s, binary_type): + return s.decode(encoding, errors) + return text_type(s) + + # # Since Python 3.3, a fast decimal implementation is already included in the # standard library. Otherwise use cdecimal when available