]> granicus.if.org Git - python/commitdiff
#14380: Make actual default match docs, fix __init__ order.
authorR David Murray <rdmurray@bitdance.com>
Fri, 23 Mar 2012 02:40:44 +0000 (22:40 -0400)
committerR David Murray <rdmurray@bitdance.com>
Fri, 23 Mar 2012 02:40:44 +0000 (22:40 -0400)
Éric pointed out that given that the default was documented as None, someone
would reasonably pass that to get the default behavior.  In fixing the code to
use None, I noticed that the change to _charset was being done after it had
already been passed to MIMENonMultipart.  The change to the test verifies that
the order is now correct.

Lib/email/mime/text.py
Lib/test/test_email/test_email.py

index 5a5e39bb3891f3823f4501c6ddbfb7a334bae34f..80ff95010fc2487df93acf88ed43bed5aa1ef2a3 100644 (file)
@@ -14,7 +14,7 @@ from email.mime.nonmultipart import MIMENonMultipart
 class MIMEText(MIMENonMultipart):
     """Class for generating text/* type MIME documents."""
 
-    def __init__(self, _text, _subtype='plain', _charset='us-ascii'):
+    def __init__(self, _text, _subtype='plain', _charset=None):
         """Create a text/* type MIME document.
 
         _text is the string for this message object.
@@ -25,16 +25,18 @@ class MIMEText(MIMENonMultipart):
         header.  This defaults to "us-ascii".  Note that as a side-effect, the
         Content-Transfer-Encoding header will also be set.
         """
-        MIMENonMultipart.__init__(self, 'text', _subtype,
-                                  **{'charset': _charset})
 
-        # If _charset was defualted, check to see see if there are non-ascii
-        # characters present. Default to utf-8 if there are.
+        # If no _charset was specified, check to see see if there are non-ascii
+        # characters present. If not, use 'us-ascii', otherwise use utf-8.
         # XXX: This can be removed once #7304 is fixed.
-        if _charset =='us-ascii':
+        if _charset is None:
             try:
-                _text.encode(_charset)
+                _text.encode('us-ascii')
+                _charset = 'us-ascii'
             except UnicodeEncodeError:
                 _charset = 'utf-8'
 
+        MIMENonMultipart.__init__(self, 'text', _subtype,
+                                  **{'charset': _charset})
+
         self.set_payload(_text, _charset)
index 86aa60c13444964704e26ca2992743bdcfd9a84e..b07f67593cd87d13c632b4ffd515965411f3907c 100644 (file)
@@ -621,15 +621,14 @@ class TestMessageAPI(TestEmailBase):
         # Issue 14291
         m = MIMEText('É testabc\n')
         self.assertEqual(str(m),textwrap.dedent("""\
-            MIME-Version: 1.0
             Content-Type: text/plain; charset="utf-8"
+            MIME-Version: 1.0
             Content-Transfer-Encoding: base64
 
             w4kgdGVzdGFiYwo=
             """))
 
 
-
 # Test the email.encoders module
 class TestEncoders(unittest.TestCase):