]> granicus.if.org Git - python/commitdiff
More email package fixes.
authorBarry Warsaw <barry@python.org>
Fri, 31 Aug 2007 03:04:26 +0000 (03:04 +0000)
committerBarry Warsaw <barry@python.org>
Fri, 31 Aug 2007 03:04:26 +0000 (03:04 +0000)
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

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

index 06016cdea7c08064b655ac167c06594a23aadfb7..2e77e619e1d6281daa475b95025e17630d489ce5 100644 (file)
@@ -11,8 +11,8 @@ __all__ = [
     'encode_quopri',
     ]
 
-import base64
 
+from base64 import b64encode as _bencode
 from quopri import encodestring as _encodestring
 
 
@@ -23,19 +23,6 @@ def _qencode(s):
     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
-
-
-\f
 def encode_base64(msg):
     """Encode the message's payload in Base64.
 
index e368737efdfe62cb505ba8311baf46f0e38af488..ff262c7c8f5f925f1b4488a13d2c89f6fdc8fe43 100644 (file)
@@ -8,6 +8,7 @@ __all__ = ['Message']
 
 import re
 import uu
+import base64
 import binascii
 import warnings
 from io import BytesIO, StringIO
@@ -196,12 +197,14 @@ class Message:
             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 @@ class Message:
                 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.
index ef11e1730efc3b2f3d276797ea0ce26ce5148577..15c8325e69b111020c96b23c2d33c504450e8778 100644 (file)
@@ -1012,7 +1012,7 @@ class TestMIMEImage(unittest.TestCase):
 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')
 
index 5771209c1be8e74432bd6005aa361971b784412c..8747110ef8c40a3fa7cab4219761d95a03eed9e6 100644 (file)
@@ -55,22 +55,6 @@ escapesre = re.compile(r'[][\\()"]')
 \f
 # 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
-
-
-\f
 def formataddr(pair):
     """The inverse of parseaddr(), this takes a 2-tuple of the form
     (realname, email_address) and returns the string value suitable