encode/python/alibabacloud_darabonba_encode_util/encoder.py (47 lines of code) (raw):
# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
from urllib.parse import urlencode, quote
import binascii
import hashlib
import base64
from .sm3 import hash_sm3
class Encoder:
"""
Encode Util for Darabonba.
"""
def __init__(self):
pass
@staticmethod
def url_encode(
url: str,
) -> str:
"""
Encode the URL
@param url: string
@return: encoded string
"""
return urlencode(url)
@staticmethod
def percent_encode(
raw: str,
) -> str:
"""
Special encoding for url params.
@param params: string
@return: encoded string
"""
return quote(raw, safe='~', encoding="utf-8")
@staticmethod
def path_encode(
path: str,
) -> str:
"""
Encode the partial path of url.
@param path: string
@return: encoded string
"""
return quote(path, safe='/~', encoding="utf-8")
@staticmethod
def hex_encode(
raw: bytes,
) -> str:
"""
Hex encode for byte array.
@param raw: byte array
@return: encoded string
"""
return binascii.b2a_hex(raw).decode('utf-8')
@staticmethod
def hash(
raw: bytes,
signature_algorithm: str,
) -> bytes:
"""
Hash the raw data with signatureAlgorithm.
@param raw: hashing data
@param signature_algorithm: the autograph method
@return: hashed bytes
"""
if 'HMAC-SHA256' in signature_algorithm or 'RSA-SHA256' in signature_algorithm:
return hashlib.sha256(raw).digest()
elif 'HMAC-SM3' in signature_algorithm:
return hash_sm3(raw)
@staticmethod
def base_64encode_to_string(
raw: bytes,
) -> str:
"""
Base64 encoder for byte array.
@param raw: byte array
@return: encoded string
"""
return str(base64.b64encode(raw), encoding="utf-8")
@staticmethod
def base_64decode(
src: str,
) -> bytes:
"""
Base64 dncoder for string.
@param src: string
@return: dncoded byte array
"""
return base64.b64encode(src).decode('utf-8')