Skip to content

Commit

Permalink
Fix the way obsolete messages are stored (#1132)
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasr8 authored Oct 20, 2024
1 parent 8e12f54 commit 313277a
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 3 deletions.
2 changes: 1 addition & 1 deletion babel/messages/pofile.py
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ def _add_message(self) -> None:
context=msgctxt)
if self.obsolete:
if not self.ignore_obsolete:
self.catalog.obsolete[msgid] = message
self.catalog.obsolete[self.catalog._key_for(msgid, msgctxt)] = message
else:
self.catalog[msgid] = message
self.counter += 1
Expand Down
56 changes: 54 additions & 2 deletions tests/messages/test_pofile.py
Original file line number Diff line number Diff line change
Expand Up @@ -299,10 +299,62 @@ def test_obsolete_message_with_context(self):
catalog = pofile.read_po(buf)
assert len(catalog) == 2
assert len(catalog.obsolete) == 1
message = catalog.obsolete["foo"]
message = catalog.obsolete[("foo", "other")]
assert message.context == 'other'
assert message.string == 'Voh'

def test_obsolete_messages_with_context(self):
buf = StringIO('''
# This is an obsolete message
#~ msgctxt "apple"
#~ msgid "foo"
#~ msgstr "Foo"
# This is an obsolete message with the same id but different context
#~ msgctxt "orange"
#~ msgid "foo"
#~ msgstr "Bar"
''')
catalog = pofile.read_po(buf)
assert len(catalog) == 0
assert len(catalog.obsolete) == 2
assert 'foo' not in catalog.obsolete

apple_msg = catalog.obsolete[('foo', 'apple')]
assert apple_msg.id == 'foo'
assert apple_msg.string == 'Foo'
assert apple_msg.user_comments == ['This is an obsolete message']

orange_msg = catalog.obsolete[('foo', 'orange')]
assert orange_msg.id == 'foo'
assert orange_msg.string == 'Bar'
assert orange_msg.user_comments == ['This is an obsolete message with the same id but different context']

def test_obsolete_messages_roundtrip(self):
buf = StringIO('''\
# This message is not obsolete
#: main.py:1
msgid "bar"
msgstr "Bahr"
# This is an obsolete message
#~ msgid "foo"
#~ msgstr "Voh"
# This is an obsolete message
#~ msgctxt "apple"
#~ msgid "foo"
#~ msgstr "Foo"
# This is an obsolete message with the same id but different context
#~ msgctxt "orange"
#~ msgid "foo"
#~ msgstr "Bar"
''')
generated_po_file = ''.join(pofile.generate_po(pofile.read_po(buf), omit_header=True))
assert buf.getvalue() == generated_po_file

def test_multiline_context(self):
buf = StringIO('''
msgctxt "a really long "
Expand Down Expand Up @@ -394,7 +446,7 @@ def test_obsolete_plural_with_square_brackets(self):
assert len(catalog) == 0
assert len(catalog.obsolete) == 1
assert catalog.num_plurals == 2
message = catalog.obsolete[('foo', 'foos')]
message = catalog.obsolete['foo']
assert len(message.string) == 2
assert message.string[0] == 'Voh [text]'
assert message.string[1] == 'Vohs [text]'
Expand Down

0 comments on commit 313277a

Please sign in to comment.