mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Generator.__call__() => Generator.flatten()
Also, adjust to the new message/rfc822 tree layout.
This commit is contained in:
parent
d2b2e533c0
commit
2c68506604
1 changed files with 56 additions and 28 deletions
|
@ -7,7 +7,7 @@ import time
|
||||||
import unittest
|
import unittest
|
||||||
import base64
|
import base64
|
||||||
from cStringIO import StringIO
|
from cStringIO import StringIO
|
||||||
from types import StringType
|
from types import StringType, ListType
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
import email
|
import email
|
||||||
|
@ -191,7 +191,7 @@ class TestMessageAPI(TestEmailBase):
|
||||||
fp.close()
|
fp.close()
|
||||||
s = StringIO()
|
s = StringIO()
|
||||||
g = DecodedGenerator(s)
|
g = DecodedGenerator(s)
|
||||||
g(msg)
|
g.flatten(msg)
|
||||||
eq(s.getvalue(), text)
|
eq(s.getvalue(), text)
|
||||||
|
|
||||||
def test__contains__(self):
|
def test__contains__(self):
|
||||||
|
@ -403,7 +403,7 @@ class TestLongHeaders(unittest.TestCase):
|
||||||
'spooge="yummy"; hippos="gargantuan"; marshmallows="gooey"')
|
'spooge="yummy"; hippos="gargantuan"; marshmallows="gooey"')
|
||||||
sfp = StringIO()
|
sfp = StringIO()
|
||||||
g = Generator(sfp)
|
g = Generator(sfp)
|
||||||
g(msg)
|
g.flatten(msg)
|
||||||
self.assertEqual(sfp.getvalue(), '''\
|
self.assertEqual(sfp.getvalue(), '''\
|
||||||
Content-Type: text/plain; charset="us-ascii"
|
Content-Type: text/plain; charset="us-ascii"
|
||||||
MIME-Version: 1.0
|
MIME-Version: 1.0
|
||||||
|
@ -423,7 +423,7 @@ X-Foobar-Spoink-Defrobnit: wasnipoop; giraffes="very-long-necked-animals";
|
||||||
msg.set_payload('Test')
|
msg.set_payload('Test')
|
||||||
sfp = StringIO()
|
sfp = StringIO()
|
||||||
g = Generator(sfp)
|
g = Generator(sfp)
|
||||||
g(msg)
|
g.flatten(msg)
|
||||||
self.assertEqual(sfp.getvalue(), """\
|
self.assertEqual(sfp.getvalue(), """\
|
||||||
From: test@dom.ain
|
From: test@dom.ain
|
||||||
References: <0@dom.ain> <1@dom.ain> <2@dom.ain> <3@dom.ain> <4@dom.ain>
|
References: <0@dom.ain> <1@dom.ain> <2@dom.ain> <3@dom.ain> <4@dom.ain>
|
||||||
|
@ -439,7 +439,7 @@ Test""")
|
||||||
msg.set_payload('Test')
|
msg.set_payload('Test')
|
||||||
sfp = StringIO()
|
sfp = StringIO()
|
||||||
g = Generator(sfp)
|
g = Generator(sfp)
|
||||||
g(msg)
|
g.flatten(msg)
|
||||||
self.assertEqual(sfp.getvalue(), """\
|
self.assertEqual(sfp.getvalue(), """\
|
||||||
From: test@dom.ain
|
From: test@dom.ain
|
||||||
References: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
References: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
@ -477,7 +477,7 @@ class TestFromMangling(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.msg = Message()
|
self.msg = Message()
|
||||||
self.msg['From'] = 'aaa@bbb.org'
|
self.msg['From'] = 'aaa@bbb.org'
|
||||||
self.msg.add_payload("""\
|
self.msg.set_payload("""\
|
||||||
From the desk of A.A.A.:
|
From the desk of A.A.A.:
|
||||||
Blah blah blah
|
Blah blah blah
|
||||||
""")
|
""")
|
||||||
|
@ -485,7 +485,7 @@ Blah blah blah
|
||||||
def test_mangled_from(self):
|
def test_mangled_from(self):
|
||||||
s = StringIO()
|
s = StringIO()
|
||||||
g = Generator(s, mangle_from_=1)
|
g = Generator(s, mangle_from_=1)
|
||||||
g(self.msg)
|
g.flatten(self.msg)
|
||||||
self.assertEqual(s.getvalue(), """\
|
self.assertEqual(s.getvalue(), """\
|
||||||
From: aaa@bbb.org
|
From: aaa@bbb.org
|
||||||
|
|
||||||
|
@ -496,7 +496,7 @@ Blah blah blah
|
||||||
def test_dont_mangle_from(self):
|
def test_dont_mangle_from(self):
|
||||||
s = StringIO()
|
s = StringIO()
|
||||||
g = Generator(s, mangle_from_=0)
|
g = Generator(s, mangle_from_=0)
|
||||||
g(self.msg)
|
g.flatten(self.msg)
|
||||||
self.assertEqual(s.getvalue(), """\
|
self.assertEqual(s.getvalue(), """\
|
||||||
From: aaa@bbb.org
|
From: aaa@bbb.org
|
||||||
|
|
||||||
|
@ -658,8 +658,8 @@ Hi there,
|
||||||
|
|
||||||
This is the dingus fish.
|
This is the dingus fish.
|
||||||
''')
|
''')
|
||||||
container.add_payload(intro)
|
container.attach(intro)
|
||||||
container.add_payload(image)
|
container.attach(image)
|
||||||
container['From'] = 'Barry <barry@digicool.com>'
|
container['From'] = 'Barry <barry@digicool.com>'
|
||||||
container['To'] = 'Dingus Lovers <cravindogs@cravindogs.com>'
|
container['To'] = 'Dingus Lovers <cravindogs@cravindogs.com>'
|
||||||
container['Subject'] = 'Here is your dingus fish'
|
container['Subject'] = 'Here is your dingus fish'
|
||||||
|
@ -851,24 +851,38 @@ class TestMIMEMessage(TestEmailBase):
|
||||||
|
|
||||||
def test_valid_argument(self):
|
def test_valid_argument(self):
|
||||||
eq = self.assertEqual
|
eq = self.assertEqual
|
||||||
|
unless = self.failUnless
|
||||||
subject = 'A sub-message'
|
subject = 'A sub-message'
|
||||||
m = Message()
|
m = Message()
|
||||||
m['Subject'] = subject
|
m['Subject'] = subject
|
||||||
r = MIMEMessage(m)
|
r = MIMEMessage(m)
|
||||||
eq(r.get_type(), 'message/rfc822')
|
eq(r.get_type(), 'message/rfc822')
|
||||||
self.failUnless(r.get_payload() is m)
|
payload = r.get_payload()
|
||||||
eq(r.get_payload()['subject'], subject)
|
unless(type(payload), ListType)
|
||||||
|
eq(len(payload), 1)
|
||||||
|
subpart = payload[0]
|
||||||
|
unless(subpart is m)
|
||||||
|
eq(subpart['subject'], subject)
|
||||||
|
|
||||||
|
def test_bad_multipart(self):
|
||||||
|
eq = self.assertEqual
|
||||||
|
msg1 = Message()
|
||||||
|
msg1['Subject'] = 'subpart 1'
|
||||||
|
msg2 = Message()
|
||||||
|
msg2['Subject'] = 'subpart 2'
|
||||||
|
r = MIMEMessage(msg1)
|
||||||
|
self.assertRaises(Errors.MultipartConversionError, r.attach, msg2)
|
||||||
|
|
||||||
def test_generate(self):
|
def test_generate(self):
|
||||||
# First craft the message to be encapsulated
|
# First craft the message to be encapsulated
|
||||||
m = Message()
|
m = Message()
|
||||||
m['Subject'] = 'An enclosed message'
|
m['Subject'] = 'An enclosed message'
|
||||||
m.add_payload('Here is the body of the message.\n')
|
m.set_payload('Here is the body of the message.\n')
|
||||||
r = MIMEMessage(m)
|
r = MIMEMessage(m)
|
||||||
r['Subject'] = 'The enclosing message'
|
r['Subject'] = 'The enclosing message'
|
||||||
s = StringIO()
|
s = StringIO()
|
||||||
g = Generator(s)
|
g = Generator(s)
|
||||||
g(r)
|
g.flatten(r)
|
||||||
self.assertEqual(s.getvalue(), """\
|
self.assertEqual(s.getvalue(), """\
|
||||||
Content-Type: message/rfc822
|
Content-Type: message/rfc822
|
||||||
MIME-Version: 1.0
|
MIME-Version: 1.0
|
||||||
|
@ -881,10 +895,13 @@ Here is the body of the message.
|
||||||
|
|
||||||
def test_parse_message_rfc822(self):
|
def test_parse_message_rfc822(self):
|
||||||
eq = self.assertEqual
|
eq = self.assertEqual
|
||||||
|
unless = self.failUnless
|
||||||
msg = self._msgobj('msg_11.txt')
|
msg = self._msgobj('msg_11.txt')
|
||||||
eq(msg.get_type(), 'message/rfc822')
|
eq(msg.get_type(), 'message/rfc822')
|
||||||
eq(len(msg.get_payload()), 1)
|
payload = msg.get_payload()
|
||||||
submsg = msg.get_payload()
|
unless(isinstance(payload, ListType))
|
||||||
|
eq(len(payload), 1)
|
||||||
|
submsg = payload[0]
|
||||||
self.failUnless(isinstance(submsg, Message))
|
self.failUnless(isinstance(submsg, Message))
|
||||||
eq(submsg['subject'], 'An enclosed message')
|
eq(submsg['subject'], 'An enclosed message')
|
||||||
eq(submsg.get_payload(), 'Here is the body of the message.\n')
|
eq(submsg.get_payload(), 'Here is the body of the message.\n')
|
||||||
|
@ -938,7 +955,10 @@ Your message cannot be delivered to the following recipients:
|
||||||
# Subpart 3 is the original message
|
# Subpart 3 is the original message
|
||||||
subpart = msg.get_payload(2)
|
subpart = msg.get_payload(2)
|
||||||
eq(subpart.get_type(), 'message/rfc822')
|
eq(subpart.get_type(), 'message/rfc822')
|
||||||
subsubpart = subpart.get_payload()
|
payload = subpart.get_payload()
|
||||||
|
unless(isinstance(payload, ListType))
|
||||||
|
eq(len(payload), 1)
|
||||||
|
subsubpart = payload[0]
|
||||||
unless(isinstance(subsubpart, Message))
|
unless(isinstance(subsubpart, Message))
|
||||||
eq(subsubpart.get_type(), 'text/plain')
|
eq(subsubpart.get_type(), 'text/plain')
|
||||||
eq(subsubpart['message-id'],
|
eq(subsubpart['message-id'],
|
||||||
|
@ -959,11 +979,11 @@ Your message cannot be delivered to the following recipients:
|
||||||
msg1 = MIMEText('One')
|
msg1 = MIMEText('One')
|
||||||
msg2 = MIMEText('Two')
|
msg2 = MIMEText('Two')
|
||||||
msg.add_header('Content-Type', 'multipart/mixed', boundary='BOUNDARY')
|
msg.add_header('Content-Type', 'multipart/mixed', boundary='BOUNDARY')
|
||||||
msg.add_payload(msg1)
|
msg.attach(msg1)
|
||||||
msg.add_payload(msg2)
|
msg.attach(msg2)
|
||||||
sfp = StringIO()
|
sfp = StringIO()
|
||||||
g = Generator(sfp)
|
g = Generator(sfp)
|
||||||
g(msg)
|
g.flatten(msg)
|
||||||
self.assertEqual(sfp.getvalue(), text)
|
self.assertEqual(sfp.getvalue(), text)
|
||||||
|
|
||||||
|
|
||||||
|
@ -987,7 +1007,7 @@ class TestIdempotent(unittest.TestCase):
|
||||||
eq = self.assertEquals
|
eq = self.assertEquals
|
||||||
s = StringIO()
|
s = StringIO()
|
||||||
g = Generator(s, maxheaderlen=0)
|
g = Generator(s, maxheaderlen=0)
|
||||||
g(msg)
|
g.flatten(msg)
|
||||||
eq(text, s.getvalue())
|
eq(text, s.getvalue())
|
||||||
|
|
||||||
def test_parse_text_message(self):
|
def test_parse_text_message(self):
|
||||||
|
@ -1044,6 +1064,7 @@ class TestIdempotent(unittest.TestCase):
|
||||||
|
|
||||||
def test_content_type(self):
|
def test_content_type(self):
|
||||||
eq = self.assertEquals
|
eq = self.assertEquals
|
||||||
|
unless = self.failUnless
|
||||||
# Get a message object and reset the seek pointer for other tests
|
# Get a message object and reset the seek pointer for other tests
|
||||||
msg, text = self._msgobj('msg_05.txt')
|
msg, text = self._msgobj('msg_05.txt')
|
||||||
eq(msg.get_type(), 'multipart/report')
|
eq(msg.get_type(), 'multipart/report')
|
||||||
|
@ -1066,18 +1087,25 @@ class TestIdempotent(unittest.TestCase):
|
||||||
msg3 = msg.get_payload(2)
|
msg3 = msg.get_payload(2)
|
||||||
eq(msg3.get_type(), 'message/rfc822')
|
eq(msg3.get_type(), 'message/rfc822')
|
||||||
self.failUnless(isinstance(msg3, Message))
|
self.failUnless(isinstance(msg3, Message))
|
||||||
msg4 = msg3.get_payload()
|
payload = msg3.get_payload()
|
||||||
self.failUnless(isinstance(msg4, Message))
|
unless(isinstance(payload, ListType))
|
||||||
|
eq(len(payload), 1)
|
||||||
|
msg4 = payload[0]
|
||||||
|
unless(isinstance(msg4, Message))
|
||||||
eq(msg4.get_payload(), 'Yadda yadda yadda\n')
|
eq(msg4.get_payload(), 'Yadda yadda yadda\n')
|
||||||
|
|
||||||
def test_parser(self):
|
def test_parser(self):
|
||||||
eq = self.assertEquals
|
eq = self.assertEquals
|
||||||
|
unless = self.failUnless
|
||||||
msg, text = self._msgobj('msg_06.txt')
|
msg, text = self._msgobj('msg_06.txt')
|
||||||
# Check some of the outer headers
|
# Check some of the outer headers
|
||||||
eq(msg.get_type(), 'message/rfc822')
|
eq(msg.get_type(), 'message/rfc822')
|
||||||
# Make sure there's exactly one thing in the payload and that's a
|
# Make sure the payload is a list of exactly one sub-Message, and that
|
||||||
# sub-Message object of type text/plain
|
# that submessage has a type of text/plain
|
||||||
msg1 = msg.get_payload()
|
payload = msg.get_payload()
|
||||||
|
unless(isinstance(payload, ListType))
|
||||||
|
eq(len(payload), 1)
|
||||||
|
msg1 = payload[0]
|
||||||
self.failUnless(isinstance(msg1, Message))
|
self.failUnless(isinstance(msg1, Message))
|
||||||
eq(msg1.get_type(), 'text/plain')
|
eq(msg1.get_type(), 'text/plain')
|
||||||
self.failUnless(isinstance(msg1.get_payload(), StringType))
|
self.failUnless(isinstance(msg1.get_payload(), StringType))
|
||||||
|
@ -1097,7 +1125,7 @@ class TestMiscellaneous(unittest.TestCase):
|
||||||
# Don't wrap/continue long headers since we're trying to test
|
# Don't wrap/continue long headers since we're trying to test
|
||||||
# idempotency.
|
# idempotency.
|
||||||
g = Generator(s, maxheaderlen=0)
|
g = Generator(s, maxheaderlen=0)
|
||||||
g(msg)
|
g.flatten(msg)
|
||||||
self.assertEqual(text, s.getvalue())
|
self.assertEqual(text, s.getvalue())
|
||||||
|
|
||||||
def test_message_from_file(self):
|
def test_message_from_file(self):
|
||||||
|
@ -1110,7 +1138,7 @@ class TestMiscellaneous(unittest.TestCase):
|
||||||
# Don't wrap/continue long headers since we're trying to test
|
# Don't wrap/continue long headers since we're trying to test
|
||||||
# idempotency.
|
# idempotency.
|
||||||
g = Generator(s, maxheaderlen=0)
|
g = Generator(s, maxheaderlen=0)
|
||||||
g(msg)
|
g.flatten(msg)
|
||||||
self.assertEqual(text, s.getvalue())
|
self.assertEqual(text, s.getvalue())
|
||||||
finally:
|
finally:
|
||||||
fp.close()
|
fp.close()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue