[Python-3000-checkins] r57801 - in python/branches/py3k/Lib/email: encoders.py message.py test/test_email.py utils.py

barry.warsaw python-3000-checkins at python.org
Fri Aug 31 05:04:48 CEST 2007


Author: barry.warsaw
Date: Fri Aug 31 05:04:26 2007
New Revision: 57801

Modified:
   python/branches/py3k/Lib/email/encoders.py
   python/branches/py3k/Lib/email/message.py
   python/branches/py3k/Lib/email/test/test_email.py
   python/branches/py3k/Lib/email/utils.py
Log:
More email package fixes.

MIMEApplication() requires a bytes object for its _data, so fix the tests.

We no longer need utils._identity() or utils._bdecode().  The former isn't
used anywhere AFAICT (where's "make test's" lint? <wink>) and the latter is a
kludge that is eliminated by base64.b64encode().

Current status: 5F/5E


Modified: python/branches/py3k/Lib/email/encoders.py
==============================================================================
--- python/branches/py3k/Lib/email/encoders.py	(original)
+++ python/branches/py3k/Lib/email/encoders.py	Fri Aug 31 05:04:26 2007
@@ -11,8 +11,8 @@
     'encode_quopri',
     ]
 
-import base64
 
+from base64 import b64encode as _bencode
 from quopri import encodestring as _encodestring
 
 
@@ -23,19 +23,6 @@
     return enc.replace(' ', '=20')
 
 
-def _bencode(s):
-    # We can't quite use base64.encodestring() since it tacks on a "courtesy
-    # newline".  Blech!
-    if not s:
-        return s
-    hasnewline = (s[-1] == '\n')
-    value = base64.encodestring(s)
-    if not hasnewline and value[-1] == '\n':
-        return value[:-1]
-    return value
-
-
-
 def encode_base64(msg):
     """Encode the message's payload in Base64.
 

Modified: python/branches/py3k/Lib/email/message.py
==============================================================================
--- python/branches/py3k/Lib/email/message.py	(original)
+++ python/branches/py3k/Lib/email/message.py	Fri Aug 31 05:04:26 2007
@@ -8,6 +8,7 @@
 
 import re
 import uu
+import base64
 import binascii
 import warnings
 from io import BytesIO, StringIO
@@ -196,12 +197,14 @@
             return utils._qdecode(payload)
         elif cte == 'base64':
             try:
-                return utils._bdecode(payload)
+                if isinstance(payload, str):
+                    payload = payload.encode('raw-unicode-escape')
+                return base64.b64decode(payload)
+                #return utils._bdecode(payload)
             except binascii.Error:
                 # Incorrect padding
                 pass
         elif cte in ('x-uuencode', 'uuencode', 'uue', 'x-uue'):
-            payload += '\n'
             in_file = BytesIO(payload.encode('raw-unicode-escape'))
             out_file = BytesIO()
             try:
@@ -212,7 +215,9 @@
                 pass
         # Is there a better way to do this?  We can't use the bytes
         # constructor.
-        return bytes(payload, 'raw-unicode-escape')
+        if isinstance(payload, str):
+            return payload.encode('raw-unicode-escape')
+        return payload
 
     def set_payload(self, payload, charset=None):
         """Set the payload to the given value.

Modified: python/branches/py3k/Lib/email/test/test_email.py
==============================================================================
--- python/branches/py3k/Lib/email/test/test_email.py	(original)
+++ python/branches/py3k/Lib/email/test/test_email.py	Fri Aug 31 05:04:26 2007
@@ -1012,7 +1012,7 @@
 class TestMIMEApplication(unittest.TestCase):
     def test_headers(self):
         eq = self.assertEqual
-        msg = MIMEApplication('\xfa\xfb\xfc\xfd\xfe\xff')
+        msg = MIMEApplication(b'\xfa\xfb\xfc\xfd\xfe\xff')
         eq(msg.get_content_type(), 'application/octet-stream')
         eq(msg['content-transfer-encoding'], 'base64')
 

Modified: python/branches/py3k/Lib/email/utils.py
==============================================================================
--- python/branches/py3k/Lib/email/utils.py	(original)
+++ python/branches/py3k/Lib/email/utils.py	Fri Aug 31 05:04:26 2007
@@ -55,22 +55,6 @@
 
 # Helpers
 
-def _identity(s):
-    return s
-
-
-def _bdecode(s):
-    # We can't quite use base64.encodestring() since it tacks on a "courtesy
-    # newline".  Blech!
-    if not s:
-        return s
-    value = base64.decodestring(s)
-    if not s.endswith('\n') and value.endswith('\n'):
-        return value[:-1]
-    return value
-
-
-
 def formataddr(pair):
     """The inverse of parseaddr(), this takes a 2-tuple of the form
     (realname, email_address) and returns the string value suitable


More information about the Python-3000-checkins mailing list