[Python-3000-checkins] r57693 - in python/branches/py3k/Lib/email: base64mime.py message.py quoprimime.py test/test_email.py

barry.warsaw python-3000-checkins at python.org
Thu Aug 30 04:10:49 CEST 2007


Author: barry.warsaw
Date: Thu Aug 30 04:10:49 2007
New Revision: 57693

Modified:
   python/branches/py3k/Lib/email/base64mime.py
   python/branches/py3k/Lib/email/message.py
   python/branches/py3k/Lib/email/quoprimime.py
   python/branches/py3k/Lib/email/test/test_email.py
Log:
Fix a more bytes/str confusion.

Use str.encode('raw-unicode-escape') consistently instead of bytes(string).

Remove the convert_eols argument from base64mime.decode().  This matches
previous API changes done to the quoprimime module.

Modified: python/branches/py3k/Lib/email/base64mime.py
==============================================================================
--- python/branches/py3k/Lib/email/base64mime.py	(original)
+++ python/branches/py3k/Lib/email/base64mime.py	Thu Aug 30 04:10:49 2007
@@ -109,7 +109,7 @@
     lines = []
     for line in base64ed:
         # Ignore the last character of each line if it is a newline
-        if line.endswith(NL):
+        if line[-1] == ord(NL):
             line = line[:-1]
         # Add the chrome
         lines.append('=?%s?b?%s?=' % (charset, line))
@@ -158,25 +158,19 @@
 
 
 
-def decode(s, convert_eols=False):
+def decode(string):
     """Decode a raw base64 string, returning a bytes object.
 
-    If convert_eols is set to a string value, all canonical email linefeeds,
-    e.g. "\\r\\n", in the decoded text will be converted to the value of
-    convert_eols.  os.linesep is a good choice for convert_eols if you are
-    decoding a text attachment.
-
-    This function does not parse a full MIME header value encoded with
-    base64 (like =?iso-8895-1?b?bmloISBuaWgh?=) -- please use the high
-    level email.Header class for that functionality.
+    This function does not parse a full MIME header value encoded with base64
+    (like =?iso-8895-1?b?bmloISBuaWgh?=) -- use the high level
+    email.Header class for that functionality.
     """
-    if not s:
-        return s
-
-    dec = a2b_base64(s)
-    if convert_eols:
-        return dec.replace(CRLF, convert_eols)
-    return dec
+    if not string:
+        return bytes()
+    elif isinstance(string, str):
+        return a2b_base64(string.encode('raw-unicode-escape'))
+    else:
+        return a2b_base64(string)
 
 
 # For convenience and backwards compatibility w/ standard base64 module

Modified: python/branches/py3k/Lib/email/message.py
==============================================================================
--- python/branches/py3k/Lib/email/message.py	(original)
+++ python/branches/py3k/Lib/email/message.py	Thu Aug 30 04:10:49 2007
@@ -201,7 +201,7 @@
                 # Incorrect padding
                 pass
         elif cte in ('x-uuencode', 'uuencode', 'uue', 'x-uue'):
-            in_file = BytesIO(bytes(payload + '\n'))
+            in_file = BytesIO((payload + '\n').encode('raw-unicode-escape'))
             out_file = BytesIO()
             try:
                 uu.decode(in_file, out_file, quiet=True)
@@ -757,7 +757,8 @@
                 # LookupError will be raised if the charset isn't known to
                 # Python.  UnicodeError will be raised if the encoded text
                 # contains a character not in the charset.
-                charset = str(bytes(charset[2]), pcharset)
+                as_bytes = charset[2].encode('raw-unicode-escape')
+                charset = str(as_bytes, pcharset)
             except (LookupError, UnicodeError):
                 charset = charset[2]
         # charset characters must be in us-ascii range

Modified: python/branches/py3k/Lib/email/quoprimime.py
==============================================================================
--- python/branches/py3k/Lib/email/quoprimime.py	(original)
+++ python/branches/py3k/Lib/email/quoprimime.py	Thu Aug 30 04:10:49 2007
@@ -55,7 +55,10 @@
 # See also Charset.py
 MISC_LEN = 7
 
-HEADER_SAFE_BYTES = b'-!*+/ ' + bytes(ascii_letters) + bytes(digits)
+HEADER_SAFE_BYTES = (b'-!*+/ ' +
+                     ascii_letters.encode('raw-unicode-escape') +
+                     digits.encode('raw-unicode-escape'))
+
 BODY_SAFE_BYTES   = (b' !"#$%&\'()*+,-./0123456789:;<>'
                      b'?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`'
                      b'abcdefghijklmnopqrstuvwxyz{|}~\t')

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	Thu Aug 30 04:10:49 2007
@@ -2531,10 +2531,8 @@
 
     def test_decode(self):
         eq = self.assertEqual
-        eq(base64mime.decode(''), '')
+        eq(base64mime.decode(''), b'')
         eq(base64mime.decode('aGVsbG8='), b'hello')
-        eq(base64mime.decode('aGVsbG8=', 'X'), b'hello')
-        eq(base64mime.decode('aGVsbG8NCndvcmxk\n', 'X'), b'helloXworld')
 
     def test_encode(self):
         eq = self.assertEqual
@@ -2844,7 +2842,7 @@
     def test_empty_header_encode(self):
         h = Header()
         self.assertEqual(h.encode(), '')
-        
+
     def test_header_ctor_default_args(self):
         eq = self.ndiffAssertEqual
         h = Header()


More information about the Python-3000-checkins mailing list