mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	Merge #14360: make encoders.encode_quopri work.
This commit is contained in:
		
						commit
						c723da361a
					
				
					 2 changed files with 35 additions and 2 deletions
				
			
		| 
						 | 
					@ -20,7 +20,7 @@ from quopri import encodestring as _encodestring
 | 
				
			||||||
def _qencode(s):
 | 
					def _qencode(s):
 | 
				
			||||||
    enc = _encodestring(s, quotetabs=True)
 | 
					    enc = _encodestring(s, quotetabs=True)
 | 
				
			||||||
    # Must encode spaces, which quopri.encodestring() doesn't do
 | 
					    # Must encode spaces, which quopri.encodestring() doesn't do
 | 
				
			||||||
    return enc.replace(' ', '=20')
 | 
					    return enc.replace(b' ', b'=20')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def encode_base64(msg):
 | 
					def encode_base64(msg):
 | 
				
			||||||
| 
						 | 
					@ -41,8 +41,12 @@ def encode_quopri(msg):
 | 
				
			||||||
    Also, add an appropriate Content-Transfer-Encoding header.
 | 
					    Also, add an appropriate Content-Transfer-Encoding header.
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    orig = msg.get_payload()
 | 
					    orig = msg.get_payload()
 | 
				
			||||||
 | 
					    if isinstance(orig, str):
 | 
				
			||||||
 | 
					        # If it is a string, the model data may have binary data encoded in via
 | 
				
			||||||
 | 
					        # surrogateescape.  Convert back to bytes so we can CTE encode it.
 | 
				
			||||||
 | 
					        orig = orig.encode('ascii', 'surrogateescape')
 | 
				
			||||||
    encdata = _qencode(orig)
 | 
					    encdata = _qencode(orig)
 | 
				
			||||||
    msg.set_payload(encdata)
 | 
					    msg.set_payload(encdata.decode('ascii', 'surrogateescape'))
 | 
				
			||||||
    msg['Content-Transfer-Encoding'] = 'quoted-printable'
 | 
					    msg['Content-Transfer-Encoding'] = 'quoted-printable'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1474,6 +1474,35 @@ class TestMIMEApplication(unittest.TestCase):
 | 
				
			||||||
        self.assertEqual(msg.get_payload(), '\uFFFD' * len(bytesdata))
 | 
					        self.assertEqual(msg.get_payload(), '\uFFFD' * len(bytesdata))
 | 
				
			||||||
        self.assertEqual(msg2.get_payload(decode=True), bytesdata)
 | 
					        self.assertEqual(msg2.get_payload(decode=True), bytesdata)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_binary_body_with_encode_quopri(self):
 | 
				
			||||||
 | 
					        # Issue 14360.
 | 
				
			||||||
 | 
					        bytesdata = b'\xfa\xfb\xfc\xfd\xfe\xff '
 | 
				
			||||||
 | 
					        msg = MIMEApplication(bytesdata, _encoder=encoders.encode_quopri)
 | 
				
			||||||
 | 
					        self.assertEqual(msg.get_payload(), '=FA=FB=FC=FD=FE=FF=20')
 | 
				
			||||||
 | 
					        self.assertEqual(msg.get_payload(decode=True), bytesdata)
 | 
				
			||||||
 | 
					        self.assertEqual(msg['Content-Transfer-Encoding'], 'quoted-printable')
 | 
				
			||||||
 | 
					        s = BytesIO()
 | 
				
			||||||
 | 
					        g = BytesGenerator(s)
 | 
				
			||||||
 | 
					        g.flatten(msg)
 | 
				
			||||||
 | 
					        wireform = s.getvalue()
 | 
				
			||||||
 | 
					        msg2 = email.message_from_bytes(wireform)
 | 
				
			||||||
 | 
					        self.assertEqual(msg.get_payload(), '=FA=FB=FC=FD=FE=FF=20')
 | 
				
			||||||
 | 
					        self.assertEqual(msg2.get_payload(decode=True), bytesdata)
 | 
				
			||||||
 | 
					        self.assertEqual(msg2['Content-Transfer-Encoding'], 'quoted-printable')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_binary_body_with_encode_base64(self):
 | 
				
			||||||
 | 
					        bytesdata = b'\xfa\xfb\xfc\xfd\xfe\xff'
 | 
				
			||||||
 | 
					        msg = MIMEApplication(bytesdata, _encoder=encoders.encode_base64)
 | 
				
			||||||
 | 
					        self.assertEqual(msg.get_payload(), '+vv8/f7/\n')
 | 
				
			||||||
 | 
					        self.assertEqual(msg.get_payload(decode=True), bytesdata)
 | 
				
			||||||
 | 
					        s = BytesIO()
 | 
				
			||||||
 | 
					        g = BytesGenerator(s)
 | 
				
			||||||
 | 
					        g.flatten(msg)
 | 
				
			||||||
 | 
					        wireform = s.getvalue()
 | 
				
			||||||
 | 
					        msg2 = email.message_from_bytes(wireform)
 | 
				
			||||||
 | 
					        self.assertEqual(msg.get_payload(), '+vv8/f7/\n')
 | 
				
			||||||
 | 
					        self.assertEqual(msg2.get_payload(decode=True), bytesdata)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Test the basic MIMEText class
 | 
					# Test the basic MIMEText class
 | 
				
			||||||
class TestMIMEText(unittest.TestCase):
 | 
					class TestMIMEText(unittest.TestCase):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue