Hello community,
here is the log from the commit of package python-polib for openSUSE:Factory checked in at 2012-06-14 22:26:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-polib (Old)
and /work/SRC/openSUSE:Factory/.python-polib.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-polib", Maintainer is ""
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-polib/python-polib.changes 2012-02-17 12:08:58.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python-polib.new/python-polib.changes 2012-06-14 22:26:34.000000000 +0200
@@ -1,0 +2,13 @@
+Wed Jun 13 00:41:24 UTC 2012 - os-dev@jacraig.com
+
+- Update to 1.0.0:
+ * polib.pofile and polib.mofile functions can now return a custom class
+ (thanks Craig Blaszczyk)
+ * polib now can find the metadata entry no matter where it is located (thanks
+ François Poirotte)
+ * fixed issue #28 (IOError on reading obsolete "previous msgid" entries)
+ (thanks James Ni)
+ * Dropped python 2.4 support
+- Add %check section to run unit tests
+
+-------------------------------------------------------------------
Old:
----
polib-0.7.0.tar.bz2
New:
----
polib-1.0.0.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-polib.spec ++++++
--- /var/tmp/diff_new_pack.tTkbb9/_old 2012-06-14 22:26:36.000000000 +0200
+++ /var/tmp/diff_new_pack.tTkbb9/_new 2012-06-14 22:26:36.000000000 +0200
@@ -16,8 +16,9 @@
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
+
Name: python-polib
-Version: 0.7.0
+Version: 1.0.0
Release: 0
Url: http://bitbucket.org/izi/polib/
Summary: A library to manipulate gettext files
@@ -73,6 +74,9 @@
python setup.py install --prefix=%{_prefix} --root=%{buildroot}
%fdupes -s %{buildroot}/%{_prefix}
+%check
+./runtests.sh
+
%files
%defattr(-,root,root)
%doc LICENSE CHANGELOG README.rst
++++++ polib-0.7.0.tar.bz2 -> polib-1.0.0.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polib-0.7.0/CHANGELOG new/polib-1.0.0/CHANGELOG
--- old/polib-0.7.0/CHANGELOG 2011-07-14 14:32:11.000000000 +0200
+++ new/polib-1.0.0/CHANGELOG 2012-06-07 22:10:37.000000000 +0200
@@ -2,6 +2,15 @@
Changelog
=========
+Version 1.0.0 (2012/06/08)
+--------------------------
+Yeah... after nearly 6 years, polib reaches the stable state :)
+Changes and fixes in this release:
+- polib.pofile and polib.mofile functions can now return a custom class (thanks Craig Blaszczyk)
+- polib now can find the metadata entry no matter where it is located (thanks François Poirotte)
+- fixed issue #28 (IOError on reading obsolete "previous msgid" entries) (thanks James Ni)
+- Dropped python 2.4 support
+
Version 0.7.0 (2011/07/14)
--------------------------
This version adds support for python 3 (thanks to Vinay Sajip).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polib-0.7.0/PKG-INFO new/polib-1.0.0/PKG-INFO
--- old/polib-0.7.0/PKG-INFO 2011-07-14 14:34:33.000000000 +0200
+++ new/polib-1.0.0/PKG-INFO 2012-06-08 19:02:28.000000000 +0200
@@ -1,12 +1,12 @@
Metadata-Version: 1.0
Name: polib
-Version: 0.7.0
+Version: 1.0.0
Summary: A library to manipulate gettext files (po and mo files).
Home-page: http://bitbucket.org/izi/polib/
Author: David Jean Louis
Author-email:
License: MIT
-Download-URL: http://bitbucket.org/izi/polib/downloads/polib-0.7.0.tar.gz
+Download-URL: http://bitbucket.org/izi/polib/downloads/polib-1.0.0.tar.gz
Description:
.. contents:: Table of Contents
@@ -38,6 +38,15 @@
Changelog
=========
+ Version 1.0.0 (2012/06/08)
+ --------------------------
+ Yeah... after nearly 6 years, polib reaches the stable state :)
+ Changes and fixes in this release:
+ - polib.pofile and polib.mofile functions can now return a custom class (thanks Craig Blaszczyk)
+ - polib now can find the metadata entry no matter where it is located (thanks François Poirotte)
+ - fixed issue #28 (IOError on reading obsolete "previous msgid" entries) (thanks James Ni)
+ - Dropped python 2.4 support
+
Version 0.7.0 (2011/07/14)
--------------------------
This version adds support for python 3 (thanks to Vinay Sajip).
Files old/polib-0.7.0/docs/.index.rst.un~ and new/polib-1.0.0/docs/.index.rst.un~ differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polib-0.7.0/docs/conf.py new/polib-1.0.0/docs/conf.py
--- old/polib-0.7.0/docs/conf.py 2011-07-13 14:18:07.000000000 +0200
+++ new/polib-1.0.0/docs/conf.py 2011-08-01 18:45:10.000000000 +0200
@@ -18,6 +18,8 @@
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath('..'))
+import polib
+
# -- General configuration -----------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
@@ -48,9 +50,9 @@
# built documents.
#
# The short X.Y version.
-version = '0.6.0'
+version = polib.__version__
# The full version, including alpha/beta/rc tags.
-release = '0.6.0'
+release = polib.__version__
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polib-0.7.0/polib.py new/polib-1.0.0/polib.py
--- old/polib-0.7.0/polib.py 2011-07-14 14:33:15.000000000 +0200
+++ new/polib-1.0.0/polib.py 2012-06-08 18:54:34.000000000 +0200
@@ -13,7 +13,7 @@
"""
__author__ = 'David Jean Louis '
-__version__ = '0.7.0'
+__version__ = '1.0.0'
__all__ = ['pofile', 'POFile', 'POEntry', 'mofile', 'MOFile', 'MOEntry',
'detect_encoding', 'escape', 'unescape', 'detect_encoding',]
@@ -68,7 +68,8 @@
parser = kls(
f,
encoding=enc,
- check_for_duplicates=kwargs.get('check_for_duplicates', False)
+ check_for_duplicates=kwargs.get('check_for_duplicates', False),
+ klass = kwargs.get('klass')
)
instance = parser.parse()
instance.wrapwidth = kwargs.get('wrapwidth', 78)
@@ -98,6 +99,11 @@
``check_for_duplicates``
whether to check for duplicate entries when adding entries to the
file (optional, default: ``False``).
+
+ ``klass``
+ class which is used to instantiate the return value (optional,
+ default: ``None``, the return value with be a :class:`~polib.POFile`
+ instance).
"""
return _pofile_or_mofile(pofile, 'pofile', **kwargs)
@@ -126,6 +132,11 @@
``check_for_duplicates``
whether to check for duplicate entries when adding entries to the
file (optional, default: ``False``).
+
+ ``klass``
+ class which is used to instantiate the return value (optional,
+ default: ``None``, the return value with be a :class:`~polib.POFile`
+ instance).
"""
return _pofile_or_mofile(mofile, 'mofile', **kwargs)
@@ -1096,7 +1107,10 @@
else:
self.fhandle = pofile.splitlines()
- self.instance = POFile(
+ klass = kwargs.get('klass')
+ if klass is None:
+ klass = POFile
+ self.instance = klass(
pofile=pofile,
encoding=enc,
check_for_duplicates=kwargs.get('check_for_duplicates', False)
@@ -1174,6 +1188,9 @@
tokens = line.split(None, 2)
nb_tokens = len(tokens)
+ if tokens[0] == '#~|':
+ continue
+
if tokens[0] == '#~' and nb_tokens > 1:
line = line[3:].strip()
tokens = tokens[1:]
@@ -1186,6 +1203,10 @@
# msgid, msgid_plural, msgctxt & msgstr.
if tokens[0] in keywords and nb_tokens > 1:
line = line[len(tokens[0]):].lstrip()
+ if re.search(r'([^\\]|^)"', line[1:-1]):
+ raise IOError('Syntax error in po file %s (line %s): '\
+ 'unescaped double quote found' % \
+ (self.instance.fpath, i))
self.current_token = line
self.process(keywords[tokens[0]], i)
continue
@@ -1198,13 +1219,17 @@
elif line[:1] == '"':
# we are on a continuation line
+ if re.search(r'([^\\]|^)"', line[1:-1]):
+ raise IOError('Syntax error in po file %s (line %s): '\
+ 'unescaped double quote found' % \
+ (self.instance.fpath, i))
self.process('MC', i)
elif line[:7] == 'msgstr[':
# we are on a msgstr plural
self.process('MX', i)
- elif tokens[0] == '#,' and nb_tokens > 1:
+ elif tokens[0] == '#,' and nb_tokens >= 1:
# we are on a flags line
self.process('FL', i)
@@ -1213,14 +1238,14 @@
# we are on a translator comment line
self.process('TC', i)
- elif tokens[0] == '#.' and nb_tokens > 1:
+ elif tokens[0] == '#.' and nb_tokens >= 1:
# we are on a generated comment line
self.process('GC', i)
elif tokens[0] == '#|':
if nb_tokens < 2:
- self.process('??', i)
- continue
+ raise IOError('Syntax error in po file %s (line %s)' % \
+ (self.instance.fpath, i))
# Remove the marker and any whitespace right after that.
line = line[2:].lstrip()
@@ -1233,12 +1258,16 @@
if nb_tokens == 2:
# Invalid continuation line.
- self.process('??', i)
+ raise IOError('Syntax error in po file %s (line %s): '\
+ 'invalid continuation line' % \
+ (self.instance.fpath, i))
# we are on a "previous translation" comment line,
if tokens[1] not in prev_keywords:
# Unknown keyword in previous translation comment.
- self.process('??', i)
+ raise IOError('Syntax error in po file %s (line %s): '\
+ 'unknown keyword %s' % \
+ (self.instance.fpath, i, tokens[1]))
# Remove the keyword and any whitespace
# between it and the starting quote.
@@ -1247,7 +1276,8 @@
self.process(prev_keywords[tokens[1]], i)
else:
- self.process('??', i)
+ raise IOError('Syntax error in po file %s (line %s)' % \
+ (self.instance.fpath, i))
if self.current_entry:
# since entries are added when another entry is found, we must add
@@ -1255,13 +1285,13 @@
self.instance.append(self.current_entry)
# before returning the instance, check if there's metadata and if
# so extract it in a dict
- firstentry = self.instance[0]
- if firstentry.msgid == '': # metadata found
+ metadataentry = self.instance.find('')
+ if metadataentry: # metadata found
# remove the entry
- firstentry = self.instance.pop(0)
- self.instance.metadata_is_fuzzy = firstentry.flags
+ self.instance.remove(metadataentry)
+ self.instance.metadata_is_fuzzy = metadataentry.flags
key = None
- for msg in firstentry.msgstr.splitlines():
+ for msg in metadataentry.msgstr.splitlines():
try:
key, val = msg.split(':', 1)
self.instance.metadata[key] = val.strip()
@@ -1487,7 +1517,11 @@
file (optional, default: ``False``).
"""
self.fhandle = open(mofile, 'rb')
- self.instance = MOFile(
+
+ klass = kwargs.get('klass')
+ if klass is None:
+ klass = MOFile
+ self.instance = klass(
fpath=mofile,
encoding=kwargs.get('encoding', default_encoding),
check_for_duplicates=kwargs.get('check_for_duplicates', False)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polib-0.7.0/tests/test_obsolete_previousmsgid.po new/polib-1.0.0/tests/test_obsolete_previousmsgid.po
--- old/polib-0.7.0/tests/test_obsolete_previousmsgid.po 1970-01-01 01:00:00.000000000 +0100
+++ new/polib-1.0.0/tests/test_obsolete_previousmsgid.po 2012-06-08 18:56:29.000000000 +0200
@@ -0,0 +1,44 @@
+# Evolution translation to Catalan.
+# Copyright © 2000, 2004, 2005, 2006 Free Software Foundation, Inc.
+# Softcatalà , 2000, 2004-2006
+#
+# Víctor Nieto
+# Aleix Badia i Bosch , 2004
+# Xavier Conde Rueda , 2004-2007
+# Francesc Dorca , 2004
+# Jordi Mas , 2004-2007
+# Enric Balletbò i Serra , 2004
+# Gil Forcada , 2006, 2011.
+# David Planella Molas , 2007, 2008, 2009, 2010, 2011, 2012.
+# Jordi Serratosa , 2012.
+#
+#: ../shell/main.c:573
+msgid ""
+msgstr ""
+"Project-Id-Version: evolution\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"product=evolution&keywords=I18N+L10N&component=Miscellaneous\n"
+"POT-Creation-Date: 2012-06-04 00:00+0000\n"
+"PO-Revision-Date: 2012-03-18 13:14+0100\n"
+"Last-Translator: David Planella \n"
+"Language-Team: Catalan \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bits\n"
+"Language: ca\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: ../addressbook/addressbook.error.xml.h:1
+msgid "This address book could not be opened."
+msgstr "No s'ha pogut obrir aquesta llibreta d'adreces."
+
+#, fuzzy
+#~| msgid ""
+#~| "Error on %s\n"
+#~| "%s"
+#~ msgid ""
+#~ "Error on %s: %s\n"
+#~ "%s"
+#~ msgstr ""
+#~ "S'ha produït un error en %s:\n"
+#~ "%s"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polib-0.7.0/tests/test_unusual_metadata_location.po new/polib-1.0.0/tests/test_unusual_metadata_location.po
--- old/polib-0.7.0/tests/test_unusual_metadata_location.po 1970-01-01 01:00:00.000000000 +0100
+++ new/polib-1.0.0/tests/test_unusual_metadata_location.po 2012-06-07 21:35:01.000000000 +0200
@@ -0,0 +1,17 @@
+# Po file where metadata is not located
+# in the first entry.
+#
+msgid "foo"
+msgstr "foo"
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-02-08 16:57+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polib-0.7.0/tests/test_weird_occurrences.po new/polib-1.0.0/tests/test_weird_occurrences.po
--- old/polib-0.7.0/tests/test_weird_occurrences.po 2011-07-13 14:18:07.000000000 +0200
+++ new/polib-1.0.0/tests/test_weird_occurrences.po 2011-10-31 08:42:06.000000000 +0100
@@ -14,6 +14,13 @@
"X-Etoys-Domain: etoys\n"
"X-Etoys-SystemVersion: etoys3.0 of 24 February 2008 update 2029\n"
+#. Test for empty comment lines
+#.
+#,
+#: main.c:117
+msgid "Override the default prgname"
+msgstr "Override the default prgname"
+
#: Balloon-Fills,BitmapFillStyle>>addFillStyleMenuItems:hand:from:
msgid "choose new graphic"
msgstr "escolher novo gráfico"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polib-0.7.0/tests/tests.py new/polib-1.0.0/tests/tests.py
--- old/polib-0.7.0/tests/tests.py 2011-07-14 13:09:10.000000000 +0200
+++ new/polib-1.0.0/tests/tests.py 2012-06-08 18:54:34.000000000 +0200
@@ -83,6 +83,86 @@
po = polib.pofile('tests/test_iso-8859-15.po', encoding='iso-8859-15')
self.assertTrue(po.encoding == 'iso-8859-15')
+ def test_pofile_and_mofile8(self):
+ """
+ Test that weird occurrences are correctly parsed.
+ """
+ po = polib.pofile('tests/test_weird_occurrences.po')
+ self.assertEqual(len(po), 46)
+
+ def test_pofile_and_mofile9(self):
+ """
+ Test that obsolete previous msgid are ignored
+ """
+ po = polib.pofile('tests/test_obsolete_previousmsgid.po')
+ self.assertTrue(isinstance(po, polib.POFile))
+
+ def test_unescaped_double_quote1(self):
+ """
+ Test that polib reports an error when unescaped double quote is found.
+ """
+ data = r'''
+msgid "Some msgid with \"double\" quotes"
+msgid "Some msgstr with "double\" quotes"
+'''
+ try:
+ po = polib.pofile(data)
+ self.fail("Unescaped quote not detected")
+ except IOError:
+ exc = sys.exc_info()[1]
+ msg = 'Syntax error in po file None (line 3): unescaped double quote found'
+ self.assertEqual(str(exc), msg)
+
+ def test_unescaped_double_quote2(self):
+ """
+ Test that polib reports an error when unescaped double quote is found.
+ """
+ data = r'''
+msgid "Some msgid with \"double\" quotes"
+msgstr ""
+"Some msgstr with "double\" quotes"
+'''
+ try:
+ po = polib.pofile(data)
+ self.fail("Unescaped quote not detected")
+ except IOError:
+ exc = sys.exc_info()[1]
+ msg = 'Syntax error in po file None (line 4): unescaped double quote found'
+ self.assertEqual(str(exc), msg)
+
+ def test_unescaped_double_quote3(self):
+ """
+ Test that polib reports an error when unescaped double quote is found at the beginning of the string.
+ """
+ data = r'''
+msgid "Some msgid with \"double\" quotes"
+msgid ""Some msgstr with double\" quotes"
+'''
+ try:
+ po = polib.pofile(data)
+ self.fail("Unescaped quote not detected")
+ except IOError:
+ exc = sys.exc_info()[1]
+ msg = 'Syntax error in po file None (line 3): unescaped double quote found'
+ self.assertEqual(str(exc), msg)
+
+ def test_unescaped_double_quote4(self):
+ """
+ Test that polib reports an error when unescaped double quote is found at the beginning of the string.
+ """
+ data = r'''
+msgid "Some msgid with \"double\" quotes"
+msgstr ""
+""Some msgstr with double\" quotes"
+'''
+ try:
+ po = polib.pofile(data)
+ self.fail("Unescaped quote not detected")
+ except IOError:
+ exc = sys.exc_info()[1]
+ msg = 'Syntax error in po file None (line 4): unescaped double quote found'
+ self.assertEqual(str(exc), msg)
+
def test_detect_encoding1(self):
"""
Test that given enconding is returned when file has no encoding defined.
@@ -146,6 +226,28 @@
polib.unescape('\\\\t and \\\\n and \\\\r and \\\\" and \\\\\\\\'),
'\\t and \\n and \\r and \\" and \\\\'
)
+
+ def test_pofile_with_subclass(self):
+ """
+ Test that the pofile function correctly returns an instance of the
+ passed in class
+ """
+ class CustomPOFile(polib.POFile):
+ pass
+
+ pofile = polib.pofile('tests/test_indented.po', klass=CustomPOFile)
+ self.assertEqual(pofile.__class__, CustomPOFile)
+
+ def test_mofile_with_subclass(self):
+ """
+ Test that the mofile function correctly returns an instance of the
+ passed in class
+ """
+ class CustomMOFile(polib.MOFile):
+ pass
+
+ mofile = polib.mofile('tests/test_utf8.mo', klass=CustomMOFile)
+ self.assertEqual(mofile.__class__, CustomMOFile)
class TestBaseFile(unittest.TestCase):
@@ -336,7 +438,7 @@
class TestPoFile(unittest.TestCase):
"""
- Tests for MoFile class.
+ Tests for PoFile class.
"""
def test_save_as_mofile(self):
@@ -394,6 +496,10 @@
po = polib.pofile('tests/test_pofile_helpers.po')
self.assertEqual(len(po.obsolete_entries()), 4)
+ def test_unusual_metadata_location(self):
+ po = polib.pofile('tests/test_unusual_metadata_location.po')
+ self.assertNotEqual(po.metadata, {})
+ self.assertEqual(po.metadata['Content-Type'], 'text/plain; charset=UTF-8')
class TestMoFile(unittest.TestCase):
"""
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org