summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2006-02-08 14:34:21 (GMT)
committerBarry Warsaw <barry@python.org>2006-02-08 14:34:21 (GMT)
commite58df82919808939f21e9756af65c5afb5d8b2e5 (patch)
treeebf1e42f435a305f4259a53b2d34675ff5f2bc1c
parenta871ef2b3e924f058ec1b0aed7d4c83a546414b7 (diff)
downloadcpython-e58df82919808939f21e9756af65c5afb5d8b2e5.zip
cpython-e58df82919808939f21e9756af65c5afb5d8b2e5.tar.gz
cpython-e58df82919808939f21e9756af65c5afb5d8b2e5.tar.bz2
Port relevant patches for SF 1409455 to the trunk for email 3.0/Python 2.5.
Will port to Python 2.4.
-rw-r--r--Lib/email/Charset.py4
-rw-r--r--Lib/email/Generator.py5
-rw-r--r--Lib/email/Message.py3
-rw-r--r--Lib/email/test/test_email.py3
-rw-r--r--Lib/email/test/test_email_codecs.py13
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():