From: Philip Jenvey Date: Wed, 8 Oct 2008 22:42:55 +0000 (+0000) Subject: fix Python 2.3 compat: rearrange set/itemgetter/rsplit/sorted/unicode.decode X-Git-Tag: 1.0~276 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7bb1c2aa03207a5b8e4a7c883daa58221e1e43f0;p=thirdparty%2Fbabel.git fix Python 2.3 compat: rearrange set/itemgetter/rsplit/sorted/unicode.decode usage. still has a few, unimportant failing tests --- diff --git a/ChangeLog b/ChangeLog index 49ad41e3..99196b07 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,7 @@ http://svn.edgewall.org/repos/babel/tags/1.0.0/ * Added support for the locale plural rules defined by the CLDR. * Added `format_timedelta` function to support localized formatting of relative times with strings such as "2 days" or "1 month" (ticket #126). + * Fixed Python 2.3 compatibility (ticket #146). Version 0.9.4 diff --git a/babel/messages/catalog.py b/babel/messages/catalog.py index 4569571b..51b438c5 100644 --- a/babel/messages/catalog.py +++ b/babel/messages/catalog.py @@ -19,17 +19,13 @@ from difflib import get_close_matches from email import message_from_string from copy import copy import re -try: - set -except NameError: - from sets import Set as set import time from babel import __version__ as VERSION from babel.core import Locale from babel.dates import format_datetime from babel.messages.plurals import get_plural -from babel.util import odict, distinct, LOCALTZ, UTC, FixedOffsetTimezone +from babel.util import odict, distinct, set, LOCALTZ, UTC, FixedOffsetTimezone __all__ = ['Message', 'Catalog', 'TranslationError'] __docformat__ = 'restructuredtext en' diff --git a/babel/messages/checkers.py b/babel/messages/checkers.py index 128eaddc..c07c5386 100644 --- a/babel/messages/checkers.py +++ b/babel/messages/checkers.py @@ -18,6 +18,7 @@ from itertools import izip from babel.messages.catalog import TranslationError, PYTHON_FORMAT +from babel.util import set #: list of format chars that are compatible to each other _string_format_compatibilities = [ diff --git a/babel/messages/extract.py b/babel/messages/extract.py index 1f3a6625..1fae4d94 100644 --- a/babel/messages/extract.py +++ b/babel/messages/extract.py @@ -22,14 +22,10 @@ The main entry points into the extraction functionality are the functions """ import os -try: - set -except NameError: - from sets import Set as set import sys from tokenize import generate_tokens, COMMENT, NAME, OP, STRING -from babel.util import parse_encoding, pathmatch, relpath +from babel.util import parse_encoding, pathmatch, relpath, set from textwrap import dedent __all__ = ['extract', 'extract_from_dir', 'extract_from_file'] diff --git a/babel/messages/frontend.py b/babel/messages/frontend.py index 421cff19..3296173b 100755 --- a/babel/messages/frontend.py +++ b/babel/messages/frontend.py @@ -1170,8 +1170,9 @@ def parse_mapping(fileobj, filename=None): def parse_keywords(strings=[]): """Parse keywords specifications from the given list of strings. - >>> kw = parse_keywords(['_', 'dgettext:2', 'dngettext:2,3']) - >>> for keyword, indices in sorted(kw.items()): + >>> kw = parse_keywords(['_', 'dgettext:2', 'dngettext:2,3']).items() + >>> kw.sort() + >>> for keyword, indices in kw: ... print (keyword, indices) ('_', None) ('dgettext', (2,)) diff --git a/babel/messages/jslexer.py b/babel/messages/jslexer.py index d063ef09..c794252f 100644 --- a/babel/messages/jslexer.py +++ b/babel/messages/jslexer.py @@ -16,7 +16,8 @@ extractor. """ import re -from operator import itemgetter + +from babel.util import itemgetter operators = [ diff --git a/babel/messages/plurals.py b/babel/messages/plurals.py index 7e0b5834..4edaf754 100644 --- a/babel/messages/plurals.py +++ b/babel/messages/plurals.py @@ -13,9 +13,8 @@ """Plural form definitions.""" - -from operator import itemgetter from babel.core import default_locale, Locale +from babel.util import itemgetter LC_CTYPE = default_locale('LC_CTYPE') diff --git a/babel/messages/pofile.py b/babel/messages/pofile.py index e7166707..98cd3f8d 100644 --- a/babel/messages/pofile.py +++ b/babel/messages/pofile.py @@ -21,14 +21,10 @@ format. from datetime import date, datetime import os import re -try: - set -except NameError: - from sets import Set as set from babel import __version__ as VERSION from babel.messages.catalog import Catalog, Message -from babel.util import wraptext, LOCALTZ +from babel.util import set, wraptext, LOCALTZ __all__ = ['read_po', 'write_po'] __docformat__ = 'restructuredtext en' @@ -207,7 +203,9 @@ def read_po(fileobj, locale=None, domain=None, ignore_obsolete=False): context.append(line.rstrip()) for lineno, line in enumerate(fileobj.readlines()): - line = line.strip().decode(catalog.charset) + line = line.strip() + if not isinstance(line, unicode): + line = line.decode(catalog.charset) if line.startswith('#'): in_msgid[0] = in_msgstr[0] = False if messages and translations: diff --git a/babel/numbers.py b/babel/numbers.py index 1a520746..47f96500 100644 --- a/babel/numbers.py +++ b/babel/numbers.py @@ -391,7 +391,10 @@ def parse_pattern(pattern): raise ValueError('Significant digit patterns can not contain ' '"@" or "0"') if '.' in number: - integer, fraction = number.rsplit('.', 1) + #integer, fraction = number.rsplit('.', 1) + # 2.3 compat: this is rsplit + parts = number.split('.') + integer, fraction = '.'.join(parts[:-1]), parts[-1] else: integer = number fraction = '' diff --git a/babel/plural.py b/babel/plural.py index b52f1a47..129b5baf 100644 --- a/babel/plural.py +++ b/babel/plural.py @@ -14,10 +14,8 @@ """CLDR Plural support. See UTS #35. EXPERIMENTAL""" import re -try: - set -except NameError: - from sets import ImmutableSet as frozenset, Set as set + +from babel.util import frozenset, set __all__ = ['PluralRule', 'RuleError', 'to_gettext', 'to_javascript', 'to_python'] diff --git a/babel/support.py b/babel/support.py index b5885399..ddc08940 100644 --- a/babel/support.py +++ b/babel/support.py @@ -20,17 +20,12 @@ in applications. from datetime import date, datetime, time, timedelta import gettext -try: - set -except NameError: - from sets import set - from babel.core import Locale from babel.dates import format_date, format_datetime, format_time, \ format_timedelta, LC_TIME from babel.numbers import format_number, format_decimal, format_currency, \ format_percent, format_scientific, LC_NUMERIC -from babel.util import UTC +from babel.util import set, UTC __all__ = ['Format', 'LazyProxy', 'Translations'] __docformat__ = 'restructuredtext en' diff --git a/babel/util.py b/babel/util.py index b59918f6..400c07c0 100644 --- a/babel/util.py +++ b/babel/util.py @@ -17,13 +17,21 @@ import codecs from datetime import timedelta, tzinfo import os import re -try: - set -except NameError: - from sets import Set as set import textwrap import time from itertools import izip, imap +try: + # assigned so they're importable + frozenset = frozenset + set = set +except NameError: + from sets import ImmutableSet as frozenset, Set as set +try: + from operator import itemgetter +except ImportError: + def itemgetter(item): + return lambda obj: obj[item] + missing = object() __all__ = ['distinct', 'pathmatch', 'relpath', 'wraptext', 'odict', 'UTC',