]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
Flatten NullTranslations.files into a list 301/head
authorAarni Koskela <akx@iki.fi>
Wed, 23 Dec 2015 21:21:33 +0000 (23:21 +0200)
committerAarni Koskela <akx@iki.fi>
Tue, 29 Dec 2015 05:30:34 +0000 (07:30 +0200)
`filter` is special in Python 3, and latter usages would error out in
strange ways.

Fixes #92 (https://github.com/python-babel/babel/pull/92)
Fixes #162 (https://github.com/python-babel/babel/pull/162)

babel/support.py
tests/test_support.py

index 3b4869cdb90949419904f7197f24f2ac73f8edba..e803138e0a9c6ede39eccf7a7e2e14e9cec36236 100644 (file)
@@ -298,7 +298,7 @@ class NullTranslations(gettext.NullTranslations, object):
         self._catalog = {}
         self.plural = lambda n: int(n != 1)
         super(NullTranslations, self).__init__(fp=fp)
-        self.files = filter(None, [getattr(fp, 'name', None)])
+        self.files = list(filter(None, [getattr(fp, 'name', None)]))
         self.domain = self.DEFAULT_DOMAIN
         self._domains = {}
 
index 4647f6b13be6539fe922070c1a1467d408dbb933..efdddeb71b7508c0dbaaadee815b87068cf2c3c2 100644 (file)
@@ -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 BytesIO
+from babel._compat import BytesIO, PY2
 
 
 @pytest.mark.usefixtures("os_environ")
@@ -328,3 +328,28 @@ def test_lazy_proxy():
         u"Hello, universe!",
         u"Hello, world!",
     ]
+
+
+def test_catalog_merge_files():
+    # Refs issues #92, #162
+    t1 = support.Translations()
+    assert t1.files == []
+    t1._catalog["foo"] = "bar"
+    if PY2:
+        # Explicitly use the pure-Python `StringIO` class, as we need to
+        # augment it with the `name` attribute, which we can't do for
+        # `babel._compat.BytesIO`, which is `cStringIO.StringIO` under
+        # `PY2`...
+        from StringIO import StringIO
+        fp = StringIO()
+    else:
+        fp = BytesIO()
+    write_mo(fp, Catalog())
+    fp.seek(0)
+    fp.name = "pro.mo"
+    t2 = support.Translations(fp)
+    assert t2.files == ["pro.mo"]
+    t2._catalog["bar"] = "quux"
+    t1.merge(t2)
+    assert t1.files == ["pro.mo"]
+    assert set(t1._catalog.keys()) == set(('', 'foo', 'bar'))