summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2002-09-10 16:13:45 (GMT)
committerBarry Warsaw <barry@python.org>2002-09-10 16:13:45 (GMT)
commitb1c1de3805590f5f67ed2aedd9bd471c81cca011 (patch)
tree94f208faed4b2d4ee0620eaa4068e1ff04f5b133
parent356afac41ff5384e8c82236f9fae162cf83d0559 (diff)
downloadcpython-b1c1de3805590f5f67ed2aedd9bd471c81cca011.zip
cpython-b1c1de3805590f5f67ed2aedd9bd471c81cca011.tar.gz
cpython-b1c1de3805590f5f67ed2aedd9bd471c81cca011.tar.bz2
Import _isstring() from the compatibility layer.
_handle_text(): Use _isstring() for stringiness test. _handle_multipart(): Add a test before the ListType test, checking for stringiness of the payload. String payloads for multitypes means a message with broken MIME chrome was parsed by a lax parser. Instead of raising a BoundaryError in those cases, the entire body is assigned to the message payload (but since the content type is still multipart/*, the Generator needs to be updated too).
-rw-r--r--Lib/email/Generator.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/Lib/email/Generator.py b/Lib/email/Generator.py
index 8ce3807..e8bce10 100644
--- a/Lib/email/Generator.py
+++ b/Lib/email/Generator.py
@@ -8,11 +8,17 @@ import time
import re
import random
-from types import ListType, StringType
+from types import ListType
from cStringIO import StringIO
from email.Header import Header
+try:
+ from email._compat22 import _isstring
+except SyntaxError:
+ from email._compat21 import _isstring
+
+
EMPTYSTRING = ''
SEMISPACE = '; '
BAR = '|'
@@ -187,7 +193,7 @@ class Generator:
cset = msg.get_charset()
if cset is not None:
payload = cset.body_encode(payload)
- if not isinstance(payload, StringType):
+ if not _isstring(payload):
raise TypeError, 'string payload expected: %s' % type(payload)
if self._mangle_from_:
payload = fcre.sub('>From ', payload)
@@ -209,6 +215,10 @@ class Generator:
print >> self._fp, '\n'
print >> self._fp, '--' + boundary + '--'
return
+ elif _isstring(subparts):
+ # e.g. a non-strict parse of a message with no starting boundary.
+ self._fp.write(subparts)
+ return
elif not isinstance(subparts, ListType):
# Scalar payload
subparts = [subparts]