Skip to content

Commit

Permalink
Port relevant patches for SF 1409455 to the trunk for email 3.0/Pytho…
Browse files Browse the repository at this point in the history
…n 2.5.

Will port to Python 2.4.
  • Loading branch information
warsaw committed Feb 8, 2006
1 parent a871ef2 commit e58df82
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 8 deletions.
4 changes: 2 additions & 2 deletions Lib/email/Charset.py
Original file line number Diff line number Diff line change
@@ -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 protected]

Expand Down Expand Up @@ -206,7 +206,7 @@ def __init__(self, input_charset=DEFAULT_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()
Expand Down
5 changes: 1 addition & 4 deletions Lib/email/Generator.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 2001-2004 Python Software Foundation
# Copyright (C) 2001-2006 Python Software Foundation
# Author: Barry Warsaw
# Contact: [email protected]

Expand Down Expand Up @@ -175,9 +175,6 @@ def _handle_text(self, msg):
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_:
Expand Down
3 changes: 3 additions & 0 deletions Lib/email/Message.py
Original file line number Diff line number Diff line change
Expand Up @@ -250,11 +250,14 @@ def set_charset(self, charset):
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):
Expand Down
3 changes: 2 additions & 1 deletion Lib/email/test/test_email.py
Original file line number Diff line number Diff line change
Expand Up @@ -2221,7 +2221,8 @@ def test_get_body_encoding_with_uppercase_charset(self):
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()
Expand Down
13 changes: 12 additions & 1 deletion Lib/email/test/test_email_codecs.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright (C) 2002 Python Software Foundation
# Copyright (C) 2002-2006 Python Software Foundation
# Contact: [email protected]
# email package unit tests for (optional) Asian codecs

import unittest
Expand All @@ -7,6 +8,8 @@
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):
Expand Down Expand Up @@ -42,6 +45,14 @@ def test_japanese_codecs(self):
# 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():
Expand Down

0 comments on commit e58df82

Please sign in to comment.