From 74cf43f3dd2d3108548fa0ecc091711ef2ab4eb2 Mon Sep 17 00:00:00 2001 From: Maurits van Rees Date: Thu, 2 Sep 2021 11:15:07 +0200 Subject: Add _compat module to define text_type on Py 2 and 3. The old way worked, but gave a linting error because unicode is not defined. --- src/zope/i18n/__init__.py | 5 +++-- src/zope/i18n/_compat.py | 8 ++++++++ src/zope/i18n/format.py | 3 ++- src/zope/i18n/simpletranslationdomain.py | 4 +--- src/zope/i18n/tests/test_itranslationdomain.py | 3 +-- src/zope/i18n/tests/test_zcml.py | 2 +- src/zope/i18n/translationdomain.py | 3 +-- 7 files changed, 17 insertions(+), 11 deletions(-) create mode 100644 src/zope/i18n/_compat.py diff --git a/src/zope/i18n/__init__.py b/src/zope/i18n/__init__.py index aed9ded..b737d00 100644 --- a/src/zope/i18n/__init__.py +++ b/src/zope/i18n/__init__.py @@ -17,15 +17,16 @@ import re from zope.component import queryUtility from zope.i18nmessageid import Message -# I expect that MessageFactory might be there for BBB reasons, but not sure. +# MessageFactory is not used, but it might be here for BBB reasons, +# as it could be imported by other packages. from zope.i18nmessageid import MessageFactory # noqa +from zope.i18n._compat import text_type from zope.i18n.config import ALLOWED_LANGUAGES from zope.i18n.interfaces import INegotiator from zope.i18n.interfaces import ITranslationDomain from zope.i18n.interfaces import IFallbackTranslationDomainFactory -text_type = str if bytes is not str else unicode # Set up regular expressions for finding interpolation variables in text. # NAME_RE must exactly match the expression of the same name in the diff --git a/src/zope/i18n/_compat.py b/src/zope/i18n/_compat.py new file mode 100644 index 0000000..00fb20f --- /dev/null +++ b/src/zope/i18n/_compat.py @@ -0,0 +1,8 @@ +# This gives a linting error because unicode is not defined on Python 3: +# text_type = str if bytes is not str else unicode +try: + # Python 3 + text_type = unicode +except NameError: + # Python 2 + text_type = str diff --git a/src/zope/i18n/format.py b/src/zope/i18n/format.py index eaec5d1..05431e0 100644 --- a/src/zope/i18n/format.py +++ b/src/zope/i18n/format.py @@ -23,10 +23,11 @@ import datetime import pytz import pytz.reference +from zope.i18n._compat import text_type from zope.i18n.interfaces import IDateTimeFormat, INumberFormat from zope.interface import implementer -text_type = str if bytes is not str else unicode + NATIVE_NUMBER_TYPES = (int, float) try: NATIVE_NUMBER_TYPES += (long,) diff --git a/src/zope/i18n/simpletranslationdomain.py b/src/zope/i18n/simpletranslationdomain.py index b093db8..b20385a 100644 --- a/src/zope/i18n/simpletranslationdomain.py +++ b/src/zope/i18n/simpletranslationdomain.py @@ -15,13 +15,11 @@ """ from zope.interface import implementer from zope.component import getUtility +from zope.i18n._compat import text_type from zope.i18n.interfaces import ITranslationDomain, INegotiator from zope.i18n import interpolate -text_type = str if bytes is not str else unicode - - @implementer(ITranslationDomain) class SimpleTranslationDomain(object): """This is the simplest implementation of the ITranslationDomain I diff --git a/src/zope/i18n/tests/test_itranslationdomain.py b/src/zope/i18n/tests/test_itranslationdomain.py index 85e4c6a..bea5360 100644 --- a/src/zope/i18n/tests/test_itranslationdomain.py +++ b/src/zope/i18n/tests/test_itranslationdomain.py @@ -22,12 +22,11 @@ from zope.component.testing import PlacelessSetup from zope.schema import getValidationErrors +from zope.i18n._compat import text_type from zope.i18n.negotiator import negotiator from zope.i18n.interfaces import INegotiator, IUserPreferredLanguages from zope.i18n.interfaces import ITranslationDomain -text_type = str if bytes is not str else unicode - @implementer(IUserPreferredLanguages) class Environment(object): diff --git a/src/zope/i18n/tests/test_zcml.py b/src/zope/i18n/tests/test_zcml.py index 0467a40..cd3d2b4 100644 --- a/src/zope/i18n/tests/test_zcml.py +++ b/src/zope/i18n/tests/test_zcml.py @@ -25,10 +25,10 @@ from zope.component.testing import PlacelessSetup from zope.configuration import xmlconfig import zope.i18n.tests +from zope.i18n._compat import text_type from zope.i18n.interfaces import ITranslationDomain from zope.i18n import config -text_type = str if bytes is not str else unicode template = """\