From 34a6ccce1d93843d53efb5985ff5bbb7ea063e31 Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Mon, 28 May 2018 12:57:45 +0300 Subject: [PATCH] _compat: add force_text a la Django --- babel/_compat.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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 -- 2.47.2