changeset 414:ea0da9db79ef

fix Python 2.3 compat: rearrange set/itemgetter/rsplit/sorted/unicode.decode usage. still has a few, unimportant failing tests
author pjenvey
date Wed, 08 Oct 2008 22:42:55 +0000
parents 3fb050ad01ae
children 7431c47b91bb
files ChangeLog babel/messages/catalog.py babel/messages/checkers.py babel/messages/extract.py babel/messages/frontend.py babel/messages/jslexer.py babel/messages/plurals.py babel/messages/pofile.py babel/numbers.py babel/plural.py babel/support.py babel/util.py
diffstat 12 files changed, 33 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,7 @@
  * 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
--- a/babel/messages/catalog.py
+++ b/babel/messages/catalog.py
@@ -19,17 +19,13 @@
 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'
--- 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 = [
--- a/babel/messages/extract.py
+++ b/babel/messages/extract.py
@@ -22,14 +22,10 @@
 """
 
 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']
--- a/babel/messages/frontend.py
+++ b/babel/messages/frontend.py
@@ -1170,8 +1170,9 @@
 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,))
--- a/babel/messages/jslexer.py
+++ b/babel/messages/jslexer.py
@@ -16,7 +16,8 @@
 """
 
 import re
-from operator import itemgetter
+
+from babel.util import itemgetter
 
 
 operators = [
--- 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')
--- a/babel/messages/pofile.py
+++ b/babel/messages/pofile.py
@@ -21,14 +21,10 @@
 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 @@
                 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:
--- a/babel/numbers.py
+++ b/babel/numbers.py
@@ -391,7 +391,10 @@
             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 = ''
--- 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']
--- a/babel/support.py
+++ b/babel/support.py
@@ -20,17 +20,12 @@
 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'
--- a/babel/util.py
+++ b/babel/util.py
@@ -17,13 +17,21 @@
 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',
Copyright (C) 2012-2017 Edgewall Software