]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Fix a more bytes/str confusion.
authorBarry Warsaw <barry@python.org>
Thu, 30 Aug 2007 02:10:49 +0000 (02:10 +0000)
committerBarry Warsaw <barry@python.org>
Thu, 30 Aug 2007 02:10:49 +0000 (02:10 +0000)
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.

Lib/email/base64mime.py
Lib/email/message.py
Lib/email/quoprimime.py
Lib/email/test/test_email.py

index 0319bbbf38fc7f2fce60054270771e2dc410d575..e309f30a2bd35a55b40e8e489d0de979dcb4d571 100644 (file)
@@ -109,7 +109,7 @@ def header_encode(header, charset='iso-8859-1', keep_eols=False,
     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 @@ encodestring = encode
 
 
 \f
-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
index 539af90a788c3def780be244a856517f2fbe1dc3..ad795f939d539cb2d2e4585ecf24c68c3ca9293a 100644 (file)
@@ -201,7 +201,7 @@ class Message:
                 # 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 @@ class Message:
                 # 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
index ce624d95ee79c77917b08b53bec542cfc8285456..dfd3ccbf68e74b77608611b210cf4360b82313b6 100644 (file)
@@ -55,7 +55,10 @@ EMPTYSTRING = ''
 # 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')
index fc8224a602d5c50fee119d9b93780c70d1e1298f..981441c71215c4e1839e2e11c9cb482564ab2e82 100644 (file)
@@ -2531,10 +2531,8 @@ class TestBase64(unittest.TestCase):
 
     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 @@ class TestHeader(TestEmailBase):
     def test_empty_header_encode(self):
         h = Header()
         self.assertEqual(h.encode(), '')
-        
+
     def test_header_ctor_default_args(self):
         eq = self.ndiffAssertEqual
         h = Header()