Skip to content

Commit 5924fd4

Browse files
[3.14] gh-157880: Write visible headers of BabylMessage in mailbox.Babyl (GH-157881) (GH-160277)
(cherry picked from commit 1512f78) Co-authored-by: Vasiliy Kiryanov <vasiliy.kiryanov@gmail.com>
1 parent be986a6 commit 5924fd4

3 files changed

Lines changed: 28 additions & 0 deletions

File tree

‎Lib/mailbox.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1488,6 +1488,7 @@ def _install_message(self, message):
14881488
vis_buffer = io.BytesIO()
14891489
vis_generator = email.generator.BytesGenerator(vis_buffer, False, 0)
14901490
vis_generator.flatten(message.get_visible())
1491+
vis_buffer.seek(0)
14911492
while True:
14921493
line = vis_buffer.readline()
14931494
self._file.write(line.replace(b'\n', linesep))

‎Lib/test/test_mailbox.py‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1506,6 +1506,31 @@ def test_labels(self):
15061506
self._box.remove(key1)
15071507
self.assertEqual(set(self._box.get_labels()), set(['blah']))
15081508

1509+
def test_visible_headers(self):
1510+
# gh-157880: visible headers are written to the file and read back
1511+
msg = mailbox.BabylMessage(self._template % 0)
1512+
msg.update_visible()
1513+
key = self._box.add(msg)
1514+
for retrieved in (self._box.get_message(key), self._box[key]):
1515+
self.assertEqual(retrieved['from'], 'foo')
1516+
self.assertEqual(retrieved.get_payload(), '0\n')
1517+
self.assertEqual(retrieved.get_visible().keys(), ['From'])
1518+
self.assertEqual(retrieved.get_visible()['from'], 'foo')
1519+
self.assertEqual(self._box.get_bytes(key),
1520+
(self._template % 0).encode('ascii'))
1521+
1522+
def test_no_visible_headers(self):
1523+
# gh-157880: empty visible headers are written to the file
1524+
# and read back
1525+
msg = mailbox.BabylMessage(self._template % 0)
1526+
key = self._box.add(msg)
1527+
for retrieved in (self._box.get_message(key), self._box[key]):
1528+
self.assertEqual(retrieved['from'], 'foo')
1529+
self.assertEqual(retrieved.get_payload(), '0\n')
1530+
self.assertEqual(retrieved.get_visible().keys(), [])
1531+
self.assertEqual(self._box.get_bytes(key),
1532+
(self._template % 0).encode('ascii'))
1533+
15091534

15101535
class FakeFileLikeObject:
15111536

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix :class:`mailbox.Babyl` to write the visible headers of a
2+
:class:`mailbox.BabylMessage` to the mailbox file.

0 commit comments

Comments
 (0)