parameter_helper.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from urllib.parse import quote_plus, urlencode
  2. import hmac
  3. import hashlib
  4. import base64
  5. import socket
  6. import uuid
  7. import datetime
  8. import platform
  9. import alibabacloud_credentials
  10. from Tea.request import TeaRequest
  11. TIME_ZONE = "UTC"
  12. FORMAT_ISO_8601 = "yyyy-MM-dd'T'HH:mm:ss'Z'"
  13. FORMAT_RFC_2616 = "%a, %d %b %Y %H:%M:%S GMT"
  14. SEPARATOR = "&"
  15. ENCODING = "UTF-8"
  16. ALGORITHM_NAME = "HmacSHA1"
  17. def get_new_request():
  18. request = TeaRequest()
  19. request.headers['user-agent'] = f'AlibabaCloud ({platform.system()}; {platform.machine()}) ' \
  20. f'Python/{platform.python_version()} ' \
  21. f'Credentials/{alibabacloud_credentials.__version__} ' \
  22. f'TeaDSL/1'
  23. return request
  24. def get_uuid():
  25. name = socket.gethostname() + str(uuid.uuid1())
  26. namespace = uuid.NAMESPACE_URL
  27. return str(uuid.uuid5(namespace, name))
  28. def get_iso_8061_date():
  29. return datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")
  30. def compose_string_to_sign(method, queries):
  31. sorted_key = sorted(list(queries.keys()))
  32. canonicalized_query_string = ''
  33. for key in sorted_key:
  34. canonicalized_query_string += '&%s=%s' % (
  35. quote_plus(key), quote_plus(queries.get(key))
  36. )
  37. string_to_sign = method + SEPARATOR + quote_plus('/') + SEPARATOR + quote_plus(canonicalized_query_string[1:])
  38. return string_to_sign
  39. def sign_string(sign, secret):
  40. hash_val = hmac.new(secret.encode(ENCODING), sign.encode(ENCODING), hashlib.sha1).digest()
  41. signature = base64.encodebytes(hash_val).decode(ENCODING)
  42. return signature.rstrip('\n')
  43. def compose_url(endpoint, queries, protocol):
  44. url = protocol + "://" + endpoint + "/?"
  45. url += urlencode(queries)
  46. return url