]> granicus.if.org Git - python/commitdiff
Port relevant patches for SF 1409455 to the trunk for email 3.0/Python 2.5.
authorBarry Warsaw <barry@python.org>
Wed, 8 Feb 2006 14:34:21 +0000 (14:34 +0000)
committerBarry Warsaw <barry@python.org>
Wed, 8 Feb 2006 14:34:21 +0000 (14:34 +0000)
Will port to Python 2.4.

Lib/email/Charset.py
Lib/email/Generator.py
Lib/email/Message.py
Lib/email/test/test_email.py
Lib/email/test/test_email_codecs.py

index df860c5e5bcbd079d203093a6b2b894fa8d22a8a..fd4043bb87c8fbe8ee78494a7cfb76b10b217b6e 100644 (file)
@@ -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()
index 9411a9e6ca2e402746f3e9e7701c3c1ffdeb5851..7969916ff96d997fe927cae125e2c759801fd8a4 100644 (file)
@@ -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_:
index 88fd78617fd2d91c71156b916107e1790f0db00b..bc764163412586761b14560c29b8907acdff9f23 100644 (file)
@@ -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):
index cf9f76150474f2eac15fe9cb9145ed6df9bb539f..5a42c2272d05a224f70451bf9d40c02d97a39e34 100644 (file)
@@ -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()
index 75ef0818cb0d752ced6f27c9cc87eb77819b8be9..159989c9e2c63ec36bfb8c7c028ae160093750c5 100644 (file)
@@ -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
+
 
 \f
 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))
+
 
 \f
 def suite():