babel/Introduce-invariant-that-_invalid_pofile-takes-unico.patch
2020-06-29 15:56:17 +08:00

62 lines
2.4 KiB
Diff

From f4f6653e6aa053724d2c6dc0ee71dcb928013352 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niklas=20Hamb=C3=BCchen?= <mail@nh2.me>
Date: Tue, 28 Jan 2020 02:46:25 +0100
Subject: [PATCH] Introduce invariant that _invalid_pofile() takes unicode
line.
This makes debugging and reasoning about the code easier;
otherwise it is surprising that sometimes `line` is a unicode
and sometimes not.
So far, when it was not, it could either be only `""` or
`'Algo esta mal'`; thus this commit makes those two u"" strings.
In all other cases, it was guaranteed that it's unicode,
because all code paths leading to `_invalid_pofile()` went through
if not isinstance(line, text_type):
line = line.decode(self.catalog.charset)
before.
---
babel/messages/pofile.py | 3 ++-
tests/messages/test_pofile.py | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/babel/messages/pofile.py b/babel/messages/pofile.py
index 93b0697..f6771be 100644
--- a/babel/messages/pofile.py
+++ b/babel/messages/pofile.py
@@ -178,7 +178,7 @@ class PoFileParser(object):
string = ['' for _ in range(self.catalog.num_plurals)]
for idx, translation in self.translations:
if idx >= self.catalog.num_plurals:
- self._invalid_pofile("", self.offset, "msg has more translations than num_plurals of catalog")
+ self._invalid_pofile(u"", self.offset, "msg has more translations than num_plurals of catalog")
continue
string[idx] = translation.denormalize()
string = tuple(string)
@@ -319,6 +319,7 @@ class PoFileParser(object):
self._add_message()
def _invalid_pofile(self, line, lineno, msg):
+ assert isinstance(line, text_type)
if self.abort_invalid:
raise PoFileError(msg, self.catalog, line, lineno)
print("WARNING:", msg)
diff --git a/tests/messages/test_pofile.py b/tests/messages/test_pofile.py
index e77fa6e..214ddf5 100644
--- a/tests/messages/test_pofile.py
+++ b/tests/messages/test_pofile.py
@@ -480,7 +480,7 @@ msgstr[2] "Vohs [text]"
def test_invalid_pofile_with_abort_flag(self):
parser = pofile.PoFileParser(None, abort_invalid=True)
lineno = 10
- line = 'Algo esta mal'
+ line = u'Algo esta mal'
msg = 'invalid file'
with self.assertRaises(pofile.PoFileError) as e:
parser._invalid_pofile(line, lineno, msg)
--
1.8.3.1