diff options
author | Barry Warsaw <barry@python.org> | 2006-02-08 14:58:55 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 2006-02-08 14:58:55 (GMT) |
commit | 8413eab95b9d15f783711c7c9c21365f340b3114 (patch) | |
tree | e4014cd473f4210a12fd60f69e738f7de5bfa16f | |
parent | 90f1db3d5da2947045653d7ecff43c4161061229 (diff) | |
download | cpython-8413eab95b9d15f783711c7c9c21365f340b3114.zip cpython-8413eab95b9d15f783711c7c9c21365f340b3114.tar.gz cpython-8413eab95b9d15f783711c7c9c21365f340b3114.tar.bz2 |
Port of r42271 from the trunk -- relevant patches for SF 1409455 for email
3.0/Python 2.4.
-rw-r--r-- | Lib/email/Charset.py | 4 | ||||
-rw-r--r-- | Lib/email/Generator.py | 5 | ||||
-rw-r--r-- | Lib/email/Message.py | 3 | ||||
-rw-r--r-- | Lib/email/test/test_email.py | 3 | ||||
-rw-r--r-- | Lib/email/test/test_email_codecs.py | 13 |
5 files changed, 20 insertions, 8 deletions
diff --git a/Lib/email/Charset.py b/Lib/email/Charset.py index df860c5..fd4043b 100644 --- a/Lib/email/Charset.py +++ b/Lib/email/Charset.py @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2004 Python Software Foundation +# Copyright (C) 2001-2006 Python Software Foundation # Author: Ben Gertzfield, Barry Warsaw # Contact: email-sig@python.org @@ -206,7 +206,7 @@ class Charset: self.input_codec = CODEC_MAP.get(self.input_charset, self.input_charset) self.output_codec = CODEC_MAP.get(self.output_charset, - self.output_charset) + self.output_charset) def __str__(self): return self.input_charset.lower() diff --git a/Lib/email/Generator.py b/Lib/email/Generator.py index 9411a9e..7969916 100644 --- a/Lib/email/Generator.py +++ b/Lib/email/Generator.py @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2004 Python Software Foundation +# Copyright (C) 2001-2006 Python Software Foundation # Author: Barry Warsaw # Contact: email-sig@python.org @@ -175,9 +175,6 @@ class Generator: payload = msg.get_payload() if payload is None: return - cset = msg.get_charset() - if cset is not None: - payload = cset.body_encode(payload) if not isinstance(payload, basestring): raise TypeError('string payload expected: %s' % type(payload)) if self._mangle_from_: diff --git a/Lib/email/Message.py b/Lib/email/Message.py index 88fd786..bc76416 100644 --- a/Lib/email/Message.py +++ b/Lib/email/Message.py @@ -250,11 +250,14 @@ class Message: charset=charset.get_output_charset()) else: self.set_param('charset', charset.get_output_charset()) + if str(charset) <> charset.get_output_charset(): + self._payload = charset.body_encode(self._payload) if not self.has_key('Content-Transfer-Encoding'): cte = charset.get_body_encoding() try: cte(self) except TypeError: + self._payload = charset.body_encode(self._payload) self.add_header('Content-Transfer-Encoding', cte) def get_charset(self): diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py index cf9f761..5a42c227 100644 --- a/Lib/email/test/test_email.py +++ b/Lib/email/test/test_email.py @@ -2221,7 +2221,8 @@ class TestMiscellaneous(TestEmailBase): charset = Charset(charsets[0]) eq(charset.get_body_encoding(), 'base64') msg.set_payload('hello world', charset=charset) - eq(msg.get_payload(), 'hello world') + eq(msg.get_payload(), 'aGVsbG8gd29ybGQ=\n') + eq(msg.get_payload(decode=True), 'hello world') eq(msg['content-transfer-encoding'], 'base64') # Try another one msg = Message() diff --git a/Lib/email/test/test_email_codecs.py b/Lib/email/test/test_email_codecs.py index 75ef081..159989c 100644 --- a/Lib/email/test/test_email_codecs.py +++ b/Lib/email/test/test_email_codecs.py @@ -1,4 +1,5 @@ -# Copyright (C) 2002 Python Software Foundation +# Copyright (C) 2002-2006 Python Software Foundation +# Contact: email-sig@python.org # email package unit tests for (optional) Asian codecs import unittest @@ -7,6 +8,8 @@ from test.test_support import TestSkipped, run_unittest from email.test.test_email import TestEmailBase from email.Charset import Charset from email.Header import Header, decode_header +from email.Message import Message + class TestEmailAsianCodecs(TestEmailBase): @@ -42,6 +45,14 @@ Hello World! =?iso-2022-jp?b?GyRCJU8lbSE8JW8hPCVrJUkhKhsoQg==?= # TK: full decode comparison eq(h.__unicode__().encode('euc-jp'), long) + def test_payload_encoding(self): + jhello = '\xa5\xcf\xa5\xed\xa1\xbc\xa5\xef\xa1\xbc\xa5\xeb\xa5\xc9\xa1\xaa' + jcode = 'euc-jp' + msg = Message() + msg.set_payload(jhello, jcode) + ustr = unicode(msg.get_payload(), msg.get_content_charset()) + self.assertEqual(jhello, ustr.encode(jcode)) + def suite(): |