]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
#19957: Simplify encode_7or8bit now that _payload is always str.
authorR David Murray <rdmurray@bitdance.com>
Fri, 13 Dec 2013 02:40:20 +0000 (21:40 -0500)
committerR David Murray <rdmurray@bitdance.com>
Fri, 13 Dec 2013 02:40:20 +0000 (21:40 -0500)
Patch by Vajrasky Kok, test enhancement by me.

Lib/email/encoders.py
Lib/test/test_email/test_email.py

index f9657f0a255db2597e670ebbf0cba4c9e279b729..0a66acb6240bd78b6aa0d3d698ec8d58c26cfe96 100644 (file)
@@ -54,21 +54,12 @@ def encode_7or8bit(msg):
         # There's no payload.  For backwards compatibility we use 7bit
         msg['Content-Transfer-Encoding'] = '7bit'
         return
-    # We play a trick to make this go fast.  If encoding/decode to ASCII
-    # succeeds, we know the data must be 7bit, otherwise treat it as 8bit.
+    # We play a trick to make this go fast.  If decoding from ASCII succeeds,
+    # we know the data must be 7bit, otherwise treat it as 8bit.
     try:
-        if isinstance(orig, str):
-            orig.encode('ascii')
-        else:
-            orig.decode('ascii')
+        orig.decode('ascii')
     except UnicodeError:
-        charset = msg.get_charset()
-        output_cset = charset and charset.output_charset
-        # iso-2022-* is non-ASCII but encodes to a 7-bit representation
-        if output_cset and output_cset.lower().startswith('iso-2022-'):
-            msg['Content-Transfer-Encoding'] = '7bit'
-        else:
-            msg['Content-Transfer-Encoding'] = '8bit'
+        msg['Content-Transfer-Encoding'] = '8bit'
     else:
         msg['Content-Transfer-Encoding'] = '7bit'
 
index 51a9438fa1fb0613bc5fab69b9423ab495da6809..ded356249fa1001238f292957a16d9844d9c4841 100644 (file)
@@ -765,8 +765,15 @@ class TestEncoders(unittest.TestCase):
         # whose output character set is 7bit gets a transfer-encoding
         # of 7bit.
         eq = self.assertEqual
-        msg = MIMEText('文', _charset='euc-jp')
+        msg = MIMEText('文\n', _charset='euc-jp')
         eq(msg['content-transfer-encoding'], '7bit')
+        eq(msg.as_string(), textwrap.dedent("""\
+            MIME-Version: 1.0
+            Content-Type: text/plain; charset="iso-2022-jp"
+            Content-Transfer-Encoding: 7bit
+
+            \x1b$BJ8\x1b(B
+            """))
 
     def test_qp_encode_latin1(self):
         msg = MIMEText('\xe1\xf6\n', 'text', 'ISO-8859-1')