bpo-31522: mailbox.get_string: pass `from_` parameter to `get_bytes` (#9857)

This allows *from_* to be successfully set to a non-default value when calling mbox.get_string.
This commit is contained in:
Cheryl Sabella 2018-10-18 20:21:47 -04:00 committed by R. David Murray
parent 5be00247ae
commit d16f012f84
3 changed files with 30 additions and 1 deletions

View File

@ -784,7 +784,7 @@ class _mboxMMDF(_singlefileMailbox):
def get_string(self, key, from_=False): def get_string(self, key, from_=False):
"""Return a string representation or raise a KeyError.""" """Return a string representation or raise a KeyError."""
return email.message_from_bytes( return email.message_from_bytes(
self.get_bytes(key)).as_string(unixfrom=from_) self.get_bytes(key, from_)).as_string(unixfrom=from_)
def get_bytes(self, key, from_=False): def get_bytes(self, key, from_=False):
"""Return a string representation or raise a KeyError.""" """Return a string representation or raise a KeyError."""

View File

@ -988,6 +988,34 @@ class _TestMboxMMDF(_TestSingleFile):
with open(self._path) as f: with open(self._path) as f:
self.assertEqual(f.readlines(), []) self.assertEqual(f.readlines(), [])
def test_get_bytes_from(self):
# Get bytes representations of messages with _unixfrom.
unixfrom = 'From foo@bar blah\n'
key0 = self._box.add(unixfrom + self._template % 0)
key1 = self._box.add(unixfrom + _sample_message)
self.assertEqual(self._box.get_bytes(key0, from_=False),
(self._template % 0).encode('ascii'))
self.assertEqual(self._box.get_bytes(key1, from_=False),
_bytes_sample_message)
self.assertEqual(self._box.get_bytes(key0, from_=True),
(unixfrom + self._template % 0).encode('ascii'))
self.assertEqual(self._box.get_bytes(key1, from_=True),
unixfrom.encode('ascii') + _bytes_sample_message)
def test_get_string_from(self):
# Get string representations of messages with _unixfrom.
unixfrom = 'From foo@bar blah\n'
key0 = self._box.add(unixfrom + self._template % 0)
key1 = self._box.add(unixfrom + _sample_message)
self.assertEqual(self._box.get_string(key0, from_=False),
self._template % 0)
self.assertEqual(self._box.get_string(key1, from_=False).split('\n'),
_sample_message.split('\n'))
self.assertEqual(self._box.get_string(key0, from_=True),
unixfrom + self._template % 0)
self.assertEqual(self._box.get_string(key1, from_=True).split('\n'),
(unixfrom + _sample_message).split('\n'))
def test_add_from_string(self): def test_add_from_string(self):
# Add a string starting with 'From ' to the mailbox # Add a string starting with 'From ' to the mailbox
key = self._box.add('From foo@bar blah\nFrom: foo\n\n0\n') key = self._box.add('From foo@bar blah\nFrom: foo\n\n0\n')

View File

@ -0,0 +1 @@
The `mailbox.mbox.get_string` function *from_* parameter can now successfully be set to a non-default value.