| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | import base64import stringimport structfrom ._compat import text_typefrom .exc import BadDatadef want_bytes(s, encoding="utf-8", errors="strict"):    if isinstance(s, text_type):        s = s.encode(encoding, errors)    return sdef base64_encode(string):    """Base64 encode a string of bytes or text. The resulting bytes are    safe to use in URLs.    """    string = want_bytes(string)    return base64.urlsafe_b64encode(string).rstrip(b"=")def base64_decode(string):    """Base64 decode a URL-safe string of bytes or text. The result is    bytes.    """    string = want_bytes(string, encoding="ascii", errors="ignore")    string += b"=" * (-len(string) % 4)    try:        return base64.urlsafe_b64decode(string)    except (TypeError, ValueError):        raise BadData("Invalid base64-encoded data")# The alphabet used by base64.urlsafe_*_base64_alphabet = (string.ascii_letters + string.digits + "-_=").encode("ascii")_int64_struct = struct.Struct(">Q")_int_to_bytes = _int64_struct.pack_bytes_to_int = _int64_struct.unpackdef int_to_bytes(num):    return _int_to_bytes(num).lstrip(b"\x00")def bytes_to_int(bytestr):    return _bytes_to_int(bytestr.rjust(8, b"\x00"))[0]
 |