From 79bc78182f82c44ea40b5d182b69f321e8da4373 Mon Sep 17 00:00:00 2001 From: Florian Schulze Date: Wed, 4 Nov 2015 19:08:10 +0100 Subject: [PATCH] Allow file locations without line numbers. --- babel/messages/pofile.py | 12 +++++++++--- tests/messages/test_pofile.py | 17 ++++++++++++++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/babel/messages/pofile.py b/babel/messages/pofile.py index 3d7dc3283..41fad0a8a 100644 --- a/babel/messages/pofile.py +++ b/babel/messages/pofile.py @@ -218,6 +218,8 @@ def _process_message_line(lineno, line): except ValueError: continue locations.append((location[:pos], lineno)) + else: + locations.append((location, None)) elif line[1:].startswith(','): for flag in line[2:].lstrip().split(','): flags.append(flag.strip()) @@ -449,9 +451,13 @@ def _write_message(message, prefix=''): _write_comment(comment, prefix='.') if not no_location: - locs = u' '.join([u'%s:%d' % (filename.replace(os.sep, '/'), lineno) - for filename, lineno in message.locations]) - _write_comment(locs, prefix=':') + locs = [] + for filename, lineno in message.locations: + if lineno: + locs.append(u'%s:%d' % (filename.replace(os.sep, '/'), lineno)) + else: + locs.append(u'%s' % filename.replace(os.sep, '/')) + _write_comment(' '.join(locs), prefix=':') if message.flags: _write('#%s\n' % ', '.join([''] + sorted(message.flags))) diff --git a/tests/messages/test_pofile.py b/tests/messages/test_pofile.py index 3bb055714..4e991c63c 100644 --- a/tests/messages/test_pofile.py +++ b/tests/messages/test_pofile.py @@ -513,6 +513,21 @@ def test_sorted_po(self): msgstr[1] "Voeh"''' in value assert value.find(b'msgid ""') < value.find(b'msgid "bar"') < value.find(b'msgid "foo"') + def test_file_with_no_lineno(self): + catalog = Catalog() + catalog.add(u'bar', locations=[('utils.py', None)], + user_comments=['Comment About `bar` with', + 'multiple lines.']) + buf = BytesIO() + pofile.write_po(buf, catalog, sort_output=True) + value = buf.getvalue().strip() + assert b'''\ +# Comment About `bar` with +# multiple lines. +#: utils.py +msgid "bar" +msgstr ""''' in value + def test_silent_location_fallback(self): buf = BytesIO(b'''\ #: broken_file.py @@ -523,7 +538,7 @@ def test_silent_location_fallback(self): msgid "broken line number" msgstr ""''') catalog = pofile.read_po(buf) - self.assertEqual(catalog['missing line number'].locations, []) + self.assertEqual(catalog['missing line number'].locations, [(u'broken_file.py', None)]) self.assertEqual(catalog['broken line number'].locations, [])