NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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