base64mime.py (1838B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\stdlib\email\base64mime.py 2 __all__ = ['base64_len', 3 'body_decode', 4 'body_encode', 5 'decode', 6 'decodestring', 7 'encode', 8 'encodestring', 9 'header_encode'] 10 from binascii import b2a_base64, a2b_base64 11 from email.utils import fix_eols 12 CRLF = '\r\n' 13 NL = '\n' 14 EMPTYSTRING = '' 15 MISC_LEN = 7 16 17 def base64_len(s): 18 groups_of_3, leftover = divmod(len(s), 3) 19 n = groups_of_3 * 4 20 if leftover: 21 n += 4 22 return n 23 24 25 def header_encode(header, charset = 'iso-8859-1', keep_eols = False, maxlinelen = 76, eol = NL): 26 if not header: 27 return header 28 if not keep_eols: 29 header = fix_eols(header) 30 base64ed = [] 31 max_encoded = maxlinelen - len(charset) - MISC_LEN 32 max_unencoded = max_encoded * 3 // 4 33 for i in range(0, len(header), max_unencoded): 34 base64ed.append(b2a_base64(header[i:i + max_unencoded])) 35 36 lines = [] 37 for line in base64ed: 38 if line.endswith(NL): 39 line = line[:-1] 40 lines.append('=?%s?b?%s?=' % (charset, line)) 41 42 joiner = eol + ' ' 43 return joiner.join(lines) 44 45 46 def encode(s, binary = True, maxlinelen = 76, eol = NL): 47 if not s: 48 return s 49 if not binary: 50 s = fix_eols(s) 51 encvec = [] 52 max_unencoded = maxlinelen * 3 // 4 53 for i in range(0, len(s), max_unencoded): 54 enc = b2a_base64(s[i:i + max_unencoded]) 55 if enc.endswith(NL) and eol != NL: 56 enc = enc[:-1] + eol 57 encvec.append(enc) 58 59 return EMPTYSTRING.join(encvec) 60 61 62 body_encode = encode 63 encodestring = encode 64 65 def decode(s, convert_eols = None): 66 if not s: 67 return s 68 dec = a2b_base64(s) 69 if convert_eols: 70 return dec.replace(CRLF, convert_eols) 71 return dec 72 73 74 body_decode = decode 75 decodestring = decode