From: Alex Morega Date: Sun, 7 Jul 2013 09:47:48 +0000 (+0200) Subject: fix babel.support for py3 strings/bytes X-Git-Tag: 1.0~71 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bd743feefa4e1b14f0ba7ade45edd86a6c7e3a00;p=thirdparty%2Fbabel.git fix babel.support for py3 strings/bytes --- diff --git a/babel/_compat.py b/babel/_compat.py index 0a26e8e9..147f2a58 100644 --- a/babel/_compat.py +++ b/babel/_compat.py @@ -24,6 +24,8 @@ if not PY2: string_types = (str,) integer_types = (int, ) + text_to_native = lambda s, enc: s + iterkeys = lambda d: iter(d.keys()) itervalues = lambda d: iter(d.values()) iteritems = lambda d: iter(d.items()) @@ -42,6 +44,8 @@ else: string_types = (str, unicode) integer_types = (int, long) + text_to_native = lambda s, enc: s.encode(enc) + iterkeys = lambda d: d.iterkeys() itervalues = lambda d: d.itervalues() iteritems = lambda d: d.iteritems() diff --git a/babel/support.py b/babel/support.py index 24866ff5..8e4f40fd 100644 --- a/babel/support.py +++ b/babel/support.py @@ -25,7 +25,7 @@ from babel.dates import format_date, format_datetime, format_time, \ format_timedelta from babel.numbers import format_number, format_decimal, format_currency, \ format_percent, format_scientific -from babel._compat import PY2 +from babel._compat import PY2, text_type, text_to_native __all__ = ['Format', 'LazyProxy', 'NullTranslations', 'Translations'] @@ -375,9 +375,9 @@ class NullTranslations(gettext.NullTranslations, object): return message # Encode the Unicode tmsg back to an 8-bit string, if possible if self._output_charset: - return tmsg.encode(self._output_charset) + return text_to_native(tmsg, self._output_charset) elif self._charset: - return tmsg.encode(self._charset) + return text_to_native(tmsg, self._charset) return tmsg def lpgettext(self, context, message): @@ -411,9 +411,9 @@ class NullTranslations(gettext.NullTranslations, object): try: tmsg = self._catalog[(ctxt_msg_id, self.plural(num))] if self._output_charset: - return tmsg.encode(self._output_charset) + return text_to_native(tmsg, self._output_charset) elif self._charset: - return tmsg.encode(self._charset) + return text_to_native(tmsg, self._charset) return tmsg except KeyError: if self._fallback: @@ -455,7 +455,7 @@ class NullTranslations(gettext.NullTranslations, object): if tmsg is missing: if self._fallback: return self._fallback.upgettext(context, message) - return unicode(message) + return text_type(message) return tmsg def unpgettext(self, context, singular, plural, num): @@ -476,9 +476,9 @@ class NullTranslations(gettext.NullTranslations, object): if self._fallback: return self._fallback.unpgettext(context, singular, plural, num) if num == 1: - tmsg = unicode(singular) + tmsg = text_type(singular) else: - tmsg = unicode(plural) + tmsg = text_type(plural) return tmsg def dpgettext(self, domain, context, message): diff --git a/tests/test_support.py b/tests/test_support.py index d20e9df7..8c182fc7 100644 --- a/tests/test_support.py +++ b/tests/test_support.py @@ -22,7 +22,7 @@ from datetime import date, datetime, timedelta from babel import support from babel.messages import Catalog from babel.messages.mofile import write_mo -from babel._compat import StringIO +from babel._compat import BytesIO @pytest.mark.usefixtures("os_environ") @@ -49,8 +49,8 @@ class TranslationsTestCase(unittest.TestCase): catalog1.add(ids, **kwargs) for ids, kwargs in messages2: catalog2.add(ids, **kwargs) - catalog1_fp = StringIO() - catalog2_fp = StringIO() + catalog1_fp = BytesIO() + catalog2_fp = BytesIO() write_mo(catalog1_fp, catalog1) catalog1_fp.seek(0) write_mo(catalog2_fp, catalog2) @@ -187,7 +187,7 @@ class TranslationsTestCase(unittest.TestCase): class NullTranslationsTestCase(unittest.TestCase): def setUp(self): - fp = StringIO() + fp = BytesIO() write_mo(fp, Catalog(locale='de')) fp.seek(0) self.translations = support.Translations(fp=fp)