2592 lines
136 KiB
Python
2592 lines
136 KiB
Python
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
# This file is auto-generated, don't edit it. Thanks.
|
|||
|
|
from __future__ import annotations
|
|||
|
|
|
|||
|
|
from typing import Dict, Generator, AsyncGenerator, Any
|
|||
|
|
|
|||
|
|
from alibabacloud_credentials import models as credential_models
|
|||
|
|
from alibabacloud_credentials.client import Client as CredentialClient
|
|||
|
|
from alibabacloud_gateway_spi import models as spi_models
|
|||
|
|
from alibabacloud_gateway_spi.client import Client as SPIClient
|
|||
|
|
from alibabacloud_tea_openapi import exceptions as main_exceptions
|
|||
|
|
from alibabacloud_tea_openapi import models as main_models
|
|||
|
|
from alibabacloud_tea_openapi import utils_models as open_api_util_models
|
|||
|
|
from alibabacloud_tea_openapi.utils import Utils
|
|||
|
|
from darabonba.core import DaraCore as DaraCore
|
|||
|
|
from darabonba.core import DaraCore
|
|||
|
|
from darabonba.exceptions import DaraException, UnretryableException
|
|||
|
|
from darabonba.policy.retry import RetryOptions, RetryPolicyContext
|
|||
|
|
from darabonba.request import DaraRequest
|
|||
|
|
from darabonba.runtime import RuntimeOptions
|
|||
|
|
from darabonba.utils.bytes import Bytes as DaraBytes
|
|||
|
|
from darabonba.utils.form import Form as DaraForm
|
|||
|
|
from darabonba.utils.stream import Stream as DaraStream
|
|||
|
|
from darabonba.utils.xml import XML as DaraXML
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
* @remarks
|
|||
|
|
* This is for OpenApi SDK
|
|||
|
|
"""
|
|||
|
|
class Client:
|
|||
|
|
_endpoint: str = None
|
|||
|
|
_region_id: str = None
|
|||
|
|
_protocol: str = None
|
|||
|
|
_method: str = None
|
|||
|
|
_user_agent: str = None
|
|||
|
|
_endpoint_rule: str = None
|
|||
|
|
_endpoint_map: Dict[str, str] = None
|
|||
|
|
_suffix: str = None
|
|||
|
|
_read_timeout: int = None
|
|||
|
|
_connect_timeout: int = None
|
|||
|
|
_http_proxy: str = None
|
|||
|
|
_https_proxy: str = None
|
|||
|
|
_socks_5proxy: str = None
|
|||
|
|
_socks_5net_work: str = None
|
|||
|
|
_no_proxy: str = None
|
|||
|
|
_network: str = None
|
|||
|
|
_product_id: str = None
|
|||
|
|
_max_idle_conns: int = None
|
|||
|
|
_endpoint_type: str = None
|
|||
|
|
_open_platform_endpoint: str = None
|
|||
|
|
_credential: CredentialClient = None
|
|||
|
|
_signature_version: str = None
|
|||
|
|
_signature_algorithm: str = None
|
|||
|
|
_headers: Dict[str, str] = None
|
|||
|
|
_spi: SPIClient = None
|
|||
|
|
_global_parameters: open_api_util_models.GlobalParameters = None
|
|||
|
|
_key: str = None
|
|||
|
|
_cert: str = None
|
|||
|
|
_ca: str = None
|
|||
|
|
_disable_http_2: bool = None
|
|||
|
|
_retry_options: RetryOptions = None
|
|||
|
|
_tls_min_version: str = None
|
|||
|
|
_attribute_map: spi_models.AttributeMap = None
|
|||
|
|
|
|||
|
|
def __init__(
|
|||
|
|
self,
|
|||
|
|
config: open_api_util_models.Config,
|
|||
|
|
):
|
|||
|
|
if DaraCore.is_null(config):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
code = 'ParameterMissing',
|
|||
|
|
message = '\'config\' can not be unset'
|
|||
|
|
)
|
|||
|
|
if (not DaraCore.is_null(config.access_key_id) and config.access_key_id != '') and (not DaraCore.is_null(config.access_key_secret) and config.access_key_secret != ''):
|
|||
|
|
if not DaraCore.is_null(config.security_token) and config.security_token != '':
|
|||
|
|
config.type = 'sts'
|
|||
|
|
else:
|
|||
|
|
config.type = 'access_key'
|
|||
|
|
|
|||
|
|
credential_config = credential_models.Config(
|
|||
|
|
access_key_id = config.access_key_id,
|
|||
|
|
type = config.type,
|
|||
|
|
access_key_secret = config.access_key_secret
|
|||
|
|
)
|
|||
|
|
credential_config.security_token = config.security_token
|
|||
|
|
self._credential = CredentialClient(credential_config)
|
|||
|
|
elif not DaraCore.is_null(config.bearer_token) and config.bearer_token != '':
|
|||
|
|
cc = credential_models.Config(
|
|||
|
|
type = 'bearer',
|
|||
|
|
bearer_token = config.bearer_token
|
|||
|
|
)
|
|||
|
|
self._credential = CredentialClient(cc)
|
|||
|
|
elif not DaraCore.is_null(config.credential):
|
|||
|
|
self._credential = config.credential
|
|||
|
|
self._endpoint = config.endpoint
|
|||
|
|
self._endpoint_type = config.endpoint_type
|
|||
|
|
self._network = config.network
|
|||
|
|
self._suffix = config.suffix
|
|||
|
|
self._protocol = config.protocol
|
|||
|
|
self._method = config.method
|
|||
|
|
self._region_id = config.region_id
|
|||
|
|
self._user_agent = config.user_agent
|
|||
|
|
self._read_timeout = config.read_timeout
|
|||
|
|
self._connect_timeout = config.connect_timeout
|
|||
|
|
self._http_proxy = config.http_proxy
|
|||
|
|
self._https_proxy = config.https_proxy
|
|||
|
|
self._no_proxy = config.no_proxy
|
|||
|
|
self._socks_5proxy = config.socks_5proxy
|
|||
|
|
self._socks_5net_work = config.socks_5net_work
|
|||
|
|
self._max_idle_conns = config.max_idle_conns
|
|||
|
|
self._signature_version = config.signature_version
|
|||
|
|
self._signature_algorithm = config.signature_algorithm
|
|||
|
|
self._global_parameters = config.global_parameters
|
|||
|
|
self._key = config.key
|
|||
|
|
self._cert = config.cert
|
|||
|
|
self._ca = config.ca
|
|||
|
|
self._disable_http_2 = config.disable_http_2
|
|||
|
|
self._retry_options = config.retry_options
|
|||
|
|
self._tls_min_version = config.tls_min_version
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
* @remarks
|
|||
|
|
* Encapsulate the request and invoke the network
|
|||
|
|
*
|
|||
|
|
* @param action - api name
|
|||
|
|
* @param version - product version
|
|||
|
|
* @param protocol - http or https
|
|||
|
|
* @param method - e.g. GET
|
|||
|
|
* @param authType - authorization type e.g. AK
|
|||
|
|
* @param bodyType - response body type e.g. String
|
|||
|
|
* @param request - object of OpenApiRequest
|
|||
|
|
* @param runtime - which controls some details of call api, such as retry times
|
|||
|
|
* @returns the response
|
|||
|
|
"""
|
|||
|
|
def do_rpcrequest(
|
|||
|
|
self,
|
|||
|
|
action: str,
|
|||
|
|
version: str,
|
|||
|
|
protocol: str,
|
|||
|
|
method: str,
|
|||
|
|
auth_type: str,
|
|||
|
|
body_type: str,
|
|||
|
|
request: open_api_util_models.OpenApiRequest,
|
|||
|
|
runtime: RuntimeOptions,
|
|||
|
|
) -> dict:
|
|||
|
|
_runtime = {
|
|||
|
|
'key': runtime.key or self._key,
|
|||
|
|
'cert': runtime.cert or self._cert,
|
|||
|
|
'ca': runtime.ca or self._ca,
|
|||
|
|
'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
|
|||
|
|
'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
|
|||
|
|
'httpProxy': runtime.http_proxy or self._http_proxy,
|
|||
|
|
'httpsProxy': runtime.https_proxy or self._https_proxy,
|
|||
|
|
'noProxy': runtime.no_proxy or self._no_proxy,
|
|||
|
|
'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
|
|||
|
|
'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
|
|||
|
|
'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
|
|||
|
|
'retryOptions': self._retry_options,
|
|||
|
|
'ignoreSSL': runtime.ignore_ssl,
|
|||
|
|
'tlsMinVersion': self._tls_min_version,
|
|||
|
|
}
|
|||
|
|
_last_request = None
|
|||
|
|
_last_response = None
|
|||
|
|
_retries_attempted = 0
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted
|
|||
|
|
)
|
|||
|
|
while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
|
|||
|
|
if _retries_attempted > 0:
|
|||
|
|
_backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
|
|||
|
|
if _backoff_time > 0:
|
|||
|
|
DaraCore.sleep(_backoff_time)
|
|||
|
|
_retries_attempted = _retries_attempted + 1
|
|||
|
|
try:
|
|||
|
|
_request = DaraRequest()
|
|||
|
|
_request.protocol = self._protocol or protocol
|
|||
|
|
_request.method = method
|
|||
|
|
_request.pathname = '/'
|
|||
|
|
global_queries = {}
|
|||
|
|
global_headers = {}
|
|||
|
|
if not DaraCore.is_null(self._global_parameters):
|
|||
|
|
global_params = self._global_parameters
|
|||
|
|
if not DaraCore.is_null(global_params.queries):
|
|||
|
|
global_queries = global_params.queries
|
|||
|
|
if not DaraCore.is_null(global_params.headers):
|
|||
|
|
global_headers = global_params.headers
|
|||
|
|
extends_headers = {}
|
|||
|
|
extends_queries = {}
|
|||
|
|
if not DaraCore.is_null(runtime.extends_parameters):
|
|||
|
|
extends_parameters = runtime.extends_parameters
|
|||
|
|
if not DaraCore.is_null(extends_parameters.headers):
|
|||
|
|
extends_headers = extends_parameters.headers
|
|||
|
|
if not DaraCore.is_null(extends_parameters.queries):
|
|||
|
|
extends_queries = extends_parameters.queries
|
|||
|
|
_request.query = DaraCore.merge({
|
|||
|
|
'Action': action,
|
|||
|
|
'Format': 'json',
|
|||
|
|
'Version': version,
|
|||
|
|
'Timestamp': Utils.get_timestamp(),
|
|||
|
|
'SignatureNonce': Utils.get_nonce(),
|
|||
|
|
}, global_queries, extends_queries, request.query)
|
|||
|
|
headers = self.get_rpc_headers()
|
|||
|
|
if DaraCore.is_null(headers):
|
|||
|
|
# endpoint is setted in product client
|
|||
|
|
_request.headers = DaraCore.merge({
|
|||
|
|
'host': self._endpoint,
|
|||
|
|
'x-acs-version': version,
|
|||
|
|
'x-acs-action': action,
|
|||
|
|
'user-agent': Utils.get_user_agent(self._user_agent),
|
|||
|
|
}, global_headers, extends_headers, request.headers)
|
|||
|
|
else:
|
|||
|
|
_request.headers = DaraCore.merge({
|
|||
|
|
'host': self._endpoint,
|
|||
|
|
'x-acs-version': version,
|
|||
|
|
'x-acs-action': action,
|
|||
|
|
'user-agent': Utils.get_user_agent(self._user_agent),
|
|||
|
|
}, global_headers, extends_headers, request.headers, headers)
|
|||
|
|
|
|||
|
|
if not DaraCore.is_null(request.body):
|
|||
|
|
m = request.body
|
|||
|
|
tmp = Utils.query(m)
|
|||
|
|
_request.body = DaraForm.to_form_string(tmp)
|
|||
|
|
_request.headers["content-type"] = 'application/x-www-form-urlencoded'
|
|||
|
|
if auth_type != 'Anonymous':
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
code = f'InvalidCredentials',
|
|||
|
|
message = f'Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details.'
|
|||
|
|
)
|
|||
|
|
credential_model = self._credential.get_credential()
|
|||
|
|
if not DaraCore.is_null(credential_model.provider_name):
|
|||
|
|
_request.headers["x-acs-credentials-provider"] = credential_model.provider_name
|
|||
|
|
credential_type = credential_model.type
|
|||
|
|
if credential_type == 'bearer':
|
|||
|
|
bearer_token = credential_model.bearer_token
|
|||
|
|
_request.query["BearerToken"] = bearer_token
|
|||
|
|
_request.query["SignatureType"] = 'BEARERTOKEN'
|
|||
|
|
elif credential_type == 'id_token':
|
|||
|
|
id_token = credential_model.security_token
|
|||
|
|
_request.headers["x-acs-zero-trust-idtoken"] = id_token
|
|||
|
|
else:
|
|||
|
|
access_key_id = credential_model.access_key_id
|
|||
|
|
access_key_secret = credential_model.access_key_secret
|
|||
|
|
security_token = credential_model.security_token
|
|||
|
|
if not DaraCore.is_null(security_token) and security_token != '':
|
|||
|
|
_request.query["SecurityToken"] = security_token
|
|||
|
|
_request.query["SignatureMethod"] = 'HMAC-SHA1'
|
|||
|
|
_request.query["SignatureVersion"] = '1.0'
|
|||
|
|
_request.query["AccessKeyId"] = access_key_id
|
|||
|
|
t = None
|
|||
|
|
if not DaraCore.is_null(request.body):
|
|||
|
|
t = request.body
|
|||
|
|
signed_param = DaraCore.merge({}, _request.query, Utils.query(t))
|
|||
|
|
_request.query["Signature"] = Utils.get_rpcsignature(signed_param, _request.method, access_key_secret)
|
|||
|
|
|
|||
|
|
_last_request = _request
|
|||
|
|
_response = DaraCore.do_action(_request, _runtime)
|
|||
|
|
_last_response = _response
|
|||
|
|
if (_response.status_code >= 400) and (_response.status_code < 600):
|
|||
|
|
_res = DaraStream.read_as_json(_response.body)
|
|||
|
|
err = _res
|
|||
|
|
request_id = err.get("RequestId") or err.get("requestId")
|
|||
|
|
code = err.get("Code") or err.get("code")
|
|||
|
|
if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
|
|||
|
|
raise main_exceptions.ThrottlingException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
retry_after = Utils.get_throttling_time_left(_response.headers),
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
elif (_response.status_code >= 400) and (_response.status_code < 500):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
access_denied_detail = self.get_access_denied_detail(err),
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
else:
|
|||
|
|
raise main_exceptions.ServerException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if body_type == 'binary':
|
|||
|
|
resp = {
|
|||
|
|
'body': _response.body,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
return resp
|
|||
|
|
elif body_type == 'byte':
|
|||
|
|
byt = DaraStream.read_as_bytes(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': byt,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'string':
|
|||
|
|
_str = DaraStream.read_as_string(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': _str,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'json':
|
|||
|
|
obj = DaraStream.read_as_json(_response.body)
|
|||
|
|
res = obj
|
|||
|
|
return {
|
|||
|
|
'body': res,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'array':
|
|||
|
|
arr = DaraStream.read_as_json(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': arr,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
else:
|
|||
|
|
return {
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted,
|
|||
|
|
http_request = _last_request,
|
|||
|
|
http_response = _last_response,
|
|||
|
|
exception = e
|
|||
|
|
)
|
|||
|
|
continue
|
|||
|
|
raise UnretryableException(_context)
|
|||
|
|
|
|||
|
|
async def do_rpcrequest_async(
|
|||
|
|
self,
|
|||
|
|
action: str,
|
|||
|
|
version: str,
|
|||
|
|
protocol: str,
|
|||
|
|
method: str,
|
|||
|
|
auth_type: str,
|
|||
|
|
body_type: str,
|
|||
|
|
request: open_api_util_models.OpenApiRequest,
|
|||
|
|
runtime: RuntimeOptions,
|
|||
|
|
) -> dict:
|
|||
|
|
_runtime = {
|
|||
|
|
'key': runtime.key or self._key,
|
|||
|
|
'cert': runtime.cert or self._cert,
|
|||
|
|
'ca': runtime.ca or self._ca,
|
|||
|
|
'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
|
|||
|
|
'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
|
|||
|
|
'httpProxy': runtime.http_proxy or self._http_proxy,
|
|||
|
|
'httpsProxy': runtime.https_proxy or self._https_proxy,
|
|||
|
|
'noProxy': runtime.no_proxy or self._no_proxy,
|
|||
|
|
'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
|
|||
|
|
'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
|
|||
|
|
'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
|
|||
|
|
'retryOptions': self._retry_options,
|
|||
|
|
'ignoreSSL': runtime.ignore_ssl,
|
|||
|
|
'tlsMinVersion': self._tls_min_version,
|
|||
|
|
}
|
|||
|
|
_last_request = None
|
|||
|
|
_last_response = None
|
|||
|
|
_retries_attempted = 0
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted
|
|||
|
|
)
|
|||
|
|
while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
|
|||
|
|
if _retries_attempted > 0:
|
|||
|
|
_backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
|
|||
|
|
if _backoff_time > 0:
|
|||
|
|
DaraCore.sleep(_backoff_time)
|
|||
|
|
_retries_attempted = _retries_attempted + 1
|
|||
|
|
try:
|
|||
|
|
_request = DaraRequest()
|
|||
|
|
_request.protocol = self._protocol or protocol
|
|||
|
|
_request.method = method
|
|||
|
|
_request.pathname = '/'
|
|||
|
|
global_queries = {}
|
|||
|
|
global_headers = {}
|
|||
|
|
if not DaraCore.is_null(self._global_parameters):
|
|||
|
|
global_params = self._global_parameters
|
|||
|
|
if not DaraCore.is_null(global_params.queries):
|
|||
|
|
global_queries = global_params.queries
|
|||
|
|
if not DaraCore.is_null(global_params.headers):
|
|||
|
|
global_headers = global_params.headers
|
|||
|
|
extends_headers = {}
|
|||
|
|
extends_queries = {}
|
|||
|
|
if not DaraCore.is_null(runtime.extends_parameters):
|
|||
|
|
extends_parameters = runtime.extends_parameters
|
|||
|
|
if not DaraCore.is_null(extends_parameters.headers):
|
|||
|
|
extends_headers = extends_parameters.headers
|
|||
|
|
if not DaraCore.is_null(extends_parameters.queries):
|
|||
|
|
extends_queries = extends_parameters.queries
|
|||
|
|
_request.query = DaraCore.merge({
|
|||
|
|
'Action': action,
|
|||
|
|
'Format': 'json',
|
|||
|
|
'Version': version,
|
|||
|
|
'Timestamp': Utils.get_timestamp(),
|
|||
|
|
'SignatureNonce': Utils.get_nonce(),
|
|||
|
|
}, global_queries, extends_queries, request.query)
|
|||
|
|
headers = self.get_rpc_headers()
|
|||
|
|
if DaraCore.is_null(headers):
|
|||
|
|
# endpoint is setted in product client
|
|||
|
|
_request.headers = DaraCore.merge({
|
|||
|
|
'host': self._endpoint,
|
|||
|
|
'x-acs-version': version,
|
|||
|
|
'x-acs-action': action,
|
|||
|
|
'user-agent': Utils.get_user_agent(self._user_agent),
|
|||
|
|
}, global_headers, extends_headers, request.headers)
|
|||
|
|
else:
|
|||
|
|
_request.headers = DaraCore.merge({
|
|||
|
|
'host': self._endpoint,
|
|||
|
|
'x-acs-version': version,
|
|||
|
|
'x-acs-action': action,
|
|||
|
|
'user-agent': Utils.get_user_agent(self._user_agent),
|
|||
|
|
}, global_headers, extends_headers, request.headers, headers)
|
|||
|
|
|
|||
|
|
if not DaraCore.is_null(request.body):
|
|||
|
|
m = request.body
|
|||
|
|
tmp = Utils.query(m)
|
|||
|
|
_request.body = DaraForm.to_form_string(tmp)
|
|||
|
|
_request.headers["content-type"] = 'application/x-www-form-urlencoded'
|
|||
|
|
if auth_type != 'Anonymous':
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
code = f'InvalidCredentials',
|
|||
|
|
message = f'Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details.'
|
|||
|
|
)
|
|||
|
|
credential_model = await self._credential.get_credential_async()
|
|||
|
|
if not DaraCore.is_null(credential_model.provider_name):
|
|||
|
|
_request.headers["x-acs-credentials-provider"] = credential_model.provider_name
|
|||
|
|
credential_type = credential_model.type
|
|||
|
|
if credential_type == 'bearer':
|
|||
|
|
bearer_token = credential_model.bearer_token
|
|||
|
|
_request.query["BearerToken"] = bearer_token
|
|||
|
|
_request.query["SignatureType"] = 'BEARERTOKEN'
|
|||
|
|
elif credential_type == 'id_token':
|
|||
|
|
id_token = credential_model.security_token
|
|||
|
|
_request.headers["x-acs-zero-trust-idtoken"] = id_token
|
|||
|
|
else:
|
|||
|
|
access_key_id = credential_model.access_key_id
|
|||
|
|
access_key_secret = credential_model.access_key_secret
|
|||
|
|
security_token = credential_model.security_token
|
|||
|
|
if not DaraCore.is_null(security_token) and security_token != '':
|
|||
|
|
_request.query["SecurityToken"] = security_token
|
|||
|
|
_request.query["SignatureMethod"] = 'HMAC-SHA1'
|
|||
|
|
_request.query["SignatureVersion"] = '1.0'
|
|||
|
|
_request.query["AccessKeyId"] = access_key_id
|
|||
|
|
t = None
|
|||
|
|
if not DaraCore.is_null(request.body):
|
|||
|
|
t = request.body
|
|||
|
|
signed_param = DaraCore.merge({}, _request.query, Utils.query(t))
|
|||
|
|
_request.query["Signature"] = Utils.get_rpcsignature(signed_param, _request.method, access_key_secret)
|
|||
|
|
|
|||
|
|
_last_request = _request
|
|||
|
|
_response = await DaraCore.async_do_action(_request, _runtime)
|
|||
|
|
_last_response = _response
|
|||
|
|
if (_response.status_code >= 400) and (_response.status_code < 600):
|
|||
|
|
_res = await DaraStream.read_as_json_async(_response.body)
|
|||
|
|
err = _res
|
|||
|
|
request_id = err.get("RequestId") or err.get("requestId")
|
|||
|
|
code = err.get("Code") or err.get("code")
|
|||
|
|
if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
|
|||
|
|
raise main_exceptions.ThrottlingException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
retry_after = Utils.get_throttling_time_left(_response.headers),
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
elif (_response.status_code >= 400) and (_response.status_code < 500):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
access_denied_detail = self.get_access_denied_detail(err),
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
else:
|
|||
|
|
raise main_exceptions.ServerException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if body_type == 'binary':
|
|||
|
|
resp = {
|
|||
|
|
'body': _response.body,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
return resp
|
|||
|
|
elif body_type == 'byte':
|
|||
|
|
byt = await DaraStream.read_as_bytes_async(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': byt,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'string':
|
|||
|
|
_str = await DaraStream.read_as_string_async(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': _str,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'json':
|
|||
|
|
obj = await DaraStream.read_as_json_async(_response.body)
|
|||
|
|
res = obj
|
|||
|
|
return {
|
|||
|
|
'body': res,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'array':
|
|||
|
|
arr = await DaraStream.read_as_json_async(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': arr,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
else:
|
|||
|
|
return {
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted,
|
|||
|
|
http_request = _last_request,
|
|||
|
|
http_response = _last_response,
|
|||
|
|
exception = e
|
|||
|
|
)
|
|||
|
|
continue
|
|||
|
|
raise UnretryableException(_context)
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
* @remarks
|
|||
|
|
* Encapsulate the request and invoke the network
|
|||
|
|
*
|
|||
|
|
* @param action - api name
|
|||
|
|
* @param version - product version
|
|||
|
|
* @param protocol - http or https
|
|||
|
|
* @param method - e.g. GET
|
|||
|
|
* @param authType - authorization type e.g. AK
|
|||
|
|
* @param pathname - pathname of every api
|
|||
|
|
* @param bodyType - response body type e.g. String
|
|||
|
|
* @param request - object of OpenApiRequest
|
|||
|
|
* @param runtime - which controls some details of call api, such as retry times
|
|||
|
|
* @returns the response
|
|||
|
|
"""
|
|||
|
|
def do_roarequest(
|
|||
|
|
self,
|
|||
|
|
action: str,
|
|||
|
|
version: str,
|
|||
|
|
protocol: str,
|
|||
|
|
method: str,
|
|||
|
|
auth_type: str,
|
|||
|
|
pathname: str,
|
|||
|
|
body_type: str,
|
|||
|
|
request: open_api_util_models.OpenApiRequest,
|
|||
|
|
runtime: RuntimeOptions,
|
|||
|
|
) -> dict:
|
|||
|
|
_runtime = {
|
|||
|
|
'key': runtime.key or self._key,
|
|||
|
|
'cert': runtime.cert or self._cert,
|
|||
|
|
'ca': runtime.ca or self._ca,
|
|||
|
|
'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
|
|||
|
|
'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
|
|||
|
|
'httpProxy': runtime.http_proxy or self._http_proxy,
|
|||
|
|
'httpsProxy': runtime.https_proxy or self._https_proxy,
|
|||
|
|
'noProxy': runtime.no_proxy or self._no_proxy,
|
|||
|
|
'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
|
|||
|
|
'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
|
|||
|
|
'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
|
|||
|
|
'retryOptions': self._retry_options,
|
|||
|
|
'ignoreSSL': runtime.ignore_ssl,
|
|||
|
|
'tlsMinVersion': self._tls_min_version,
|
|||
|
|
}
|
|||
|
|
_last_request = None
|
|||
|
|
_last_response = None
|
|||
|
|
_retries_attempted = 0
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted
|
|||
|
|
)
|
|||
|
|
while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
|
|||
|
|
if _retries_attempted > 0:
|
|||
|
|
_backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
|
|||
|
|
if _backoff_time > 0:
|
|||
|
|
DaraCore.sleep(_backoff_time)
|
|||
|
|
_retries_attempted = _retries_attempted + 1
|
|||
|
|
try:
|
|||
|
|
_request = DaraRequest()
|
|||
|
|
_request.protocol = self._protocol or protocol
|
|||
|
|
_request.method = method
|
|||
|
|
_request.pathname = pathname
|
|||
|
|
global_queries = {}
|
|||
|
|
global_headers = {}
|
|||
|
|
if not DaraCore.is_null(self._global_parameters):
|
|||
|
|
global_params = self._global_parameters
|
|||
|
|
if not DaraCore.is_null(global_params.queries):
|
|||
|
|
global_queries = global_params.queries
|
|||
|
|
if not DaraCore.is_null(global_params.headers):
|
|||
|
|
global_headers = global_params.headers
|
|||
|
|
extends_headers = {}
|
|||
|
|
extends_queries = {}
|
|||
|
|
if not DaraCore.is_null(runtime.extends_parameters):
|
|||
|
|
extends_parameters = runtime.extends_parameters
|
|||
|
|
if not DaraCore.is_null(extends_parameters.headers):
|
|||
|
|
extends_headers = extends_parameters.headers
|
|||
|
|
if not DaraCore.is_null(extends_parameters.queries):
|
|||
|
|
extends_queries = extends_parameters.queries
|
|||
|
|
_request.headers = DaraCore.merge({
|
|||
|
|
'date': Utils.get_date_utcstring(),
|
|||
|
|
'host': self._endpoint,
|
|||
|
|
'accept': 'application/json',
|
|||
|
|
'x-acs-signature-nonce': Utils.get_nonce(),
|
|||
|
|
'x-acs-signature-method': 'HMAC-SHA1',
|
|||
|
|
'x-acs-signature-version': '1.0',
|
|||
|
|
'x-acs-version': version,
|
|||
|
|
'x-acs-action': action,
|
|||
|
|
'user-agent': Utils.get_user_agent(self._user_agent),
|
|||
|
|
}, global_headers, extends_headers, request.headers)
|
|||
|
|
if not DaraCore.is_null(request.body):
|
|||
|
|
_request.body = DaraCore.to_json_string(request.body)
|
|||
|
|
_request.headers["content-type"] = 'application/json; charset=utf-8'
|
|||
|
|
_request.query = DaraCore.merge({}, global_queries, extends_queries)
|
|||
|
|
if not DaraCore.is_null(request.query):
|
|||
|
|
_request.query = DaraCore.merge({}, _request.query, request.query)
|
|||
|
|
if auth_type != 'Anonymous':
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
code = f'InvalidCredentials',
|
|||
|
|
message = f'Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details.'
|
|||
|
|
)
|
|||
|
|
credential_model = self._credential.get_credential()
|
|||
|
|
if not DaraCore.is_null(credential_model.provider_name):
|
|||
|
|
_request.headers["x-acs-credentials-provider"] = credential_model.provider_name
|
|||
|
|
credential_type = credential_model.type
|
|||
|
|
if credential_type == 'bearer':
|
|||
|
|
bearer_token = credential_model.bearer_token
|
|||
|
|
_request.headers["x-acs-bearer-token"] = bearer_token
|
|||
|
|
_request.headers["x-acs-signature-type"] = 'BEARERTOKEN'
|
|||
|
|
elif credential_type == 'id_token':
|
|||
|
|
id_token = credential_model.security_token
|
|||
|
|
_request.headers["x-acs-zero-trust-idtoken"] = id_token
|
|||
|
|
else:
|
|||
|
|
access_key_id = credential_model.access_key_id
|
|||
|
|
access_key_secret = credential_model.access_key_secret
|
|||
|
|
security_token = credential_model.security_token
|
|||
|
|
if not DaraCore.is_null(security_token) and security_token != '':
|
|||
|
|
_request.headers["x-acs-accesskey-id"] = access_key_id
|
|||
|
|
_request.headers["x-acs-security-token"] = security_token
|
|||
|
|
string_to_sign = Utils.get_string_to_sign(_request)
|
|||
|
|
_request.headers["authorization"] = f'acs {access_key_id}:{Utils.get_roasignature(string_to_sign, access_key_secret)}'
|
|||
|
|
|
|||
|
|
_last_request = _request
|
|||
|
|
_response = DaraCore.do_action(_request, _runtime)
|
|||
|
|
_last_response = _response
|
|||
|
|
if _response.status_code == 204:
|
|||
|
|
return {
|
|||
|
|
'headers': _response.headers
|
|||
|
|
}
|
|||
|
|
if (_response.status_code >= 400) and (_response.status_code < 600):
|
|||
|
|
_res = DaraStream.read_as_json(_response.body)
|
|||
|
|
err = _res
|
|||
|
|
request_id = err.get("RequestId") or err.get("requestId")
|
|||
|
|
request_id = request_id or err.get("requestid")
|
|||
|
|
code = err.get("Code") or err.get("code")
|
|||
|
|
if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
|
|||
|
|
raise main_exceptions.ThrottlingException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
retry_after = Utils.get_throttling_time_left(_response.headers),
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
elif (_response.status_code >= 400) and (_response.status_code < 500):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
access_denied_detail = self.get_access_denied_detail(err),
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
else:
|
|||
|
|
raise main_exceptions.ServerException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if body_type == 'binary':
|
|||
|
|
resp = {
|
|||
|
|
'body': _response.body,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
return resp
|
|||
|
|
elif body_type == 'byte':
|
|||
|
|
byt = DaraStream.read_as_bytes(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': byt,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'string':
|
|||
|
|
_str = DaraStream.read_as_string(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': _str,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'json':
|
|||
|
|
obj = DaraStream.read_as_json(_response.body)
|
|||
|
|
res = obj
|
|||
|
|
return {
|
|||
|
|
'body': res,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'array':
|
|||
|
|
arr = DaraStream.read_as_json(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': arr,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
else:
|
|||
|
|
return {
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted,
|
|||
|
|
http_request = _last_request,
|
|||
|
|
http_response = _last_response,
|
|||
|
|
exception = e
|
|||
|
|
)
|
|||
|
|
continue
|
|||
|
|
raise UnretryableException(_context)
|
|||
|
|
|
|||
|
|
async def do_roarequest_async(
|
|||
|
|
self,
|
|||
|
|
action: str,
|
|||
|
|
version: str,
|
|||
|
|
protocol: str,
|
|||
|
|
method: str,
|
|||
|
|
auth_type: str,
|
|||
|
|
pathname: str,
|
|||
|
|
body_type: str,
|
|||
|
|
request: open_api_util_models.OpenApiRequest,
|
|||
|
|
runtime: RuntimeOptions,
|
|||
|
|
) -> dict:
|
|||
|
|
_runtime = {
|
|||
|
|
'key': runtime.key or self._key,
|
|||
|
|
'cert': runtime.cert or self._cert,
|
|||
|
|
'ca': runtime.ca or self._ca,
|
|||
|
|
'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
|
|||
|
|
'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
|
|||
|
|
'httpProxy': runtime.http_proxy or self._http_proxy,
|
|||
|
|
'httpsProxy': runtime.https_proxy or self._https_proxy,
|
|||
|
|
'noProxy': runtime.no_proxy or self._no_proxy,
|
|||
|
|
'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
|
|||
|
|
'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
|
|||
|
|
'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
|
|||
|
|
'retryOptions': self._retry_options,
|
|||
|
|
'ignoreSSL': runtime.ignore_ssl,
|
|||
|
|
'tlsMinVersion': self._tls_min_version,
|
|||
|
|
}
|
|||
|
|
_last_request = None
|
|||
|
|
_last_response = None
|
|||
|
|
_retries_attempted = 0
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted
|
|||
|
|
)
|
|||
|
|
while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
|
|||
|
|
if _retries_attempted > 0:
|
|||
|
|
_backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
|
|||
|
|
if _backoff_time > 0:
|
|||
|
|
DaraCore.sleep(_backoff_time)
|
|||
|
|
_retries_attempted = _retries_attempted + 1
|
|||
|
|
try:
|
|||
|
|
_request = DaraRequest()
|
|||
|
|
_request.protocol = self._protocol or protocol
|
|||
|
|
_request.method = method
|
|||
|
|
_request.pathname = pathname
|
|||
|
|
global_queries = {}
|
|||
|
|
global_headers = {}
|
|||
|
|
if not DaraCore.is_null(self._global_parameters):
|
|||
|
|
global_params = self._global_parameters
|
|||
|
|
if not DaraCore.is_null(global_params.queries):
|
|||
|
|
global_queries = global_params.queries
|
|||
|
|
if not DaraCore.is_null(global_params.headers):
|
|||
|
|
global_headers = global_params.headers
|
|||
|
|
extends_headers = {}
|
|||
|
|
extends_queries = {}
|
|||
|
|
if not DaraCore.is_null(runtime.extends_parameters):
|
|||
|
|
extends_parameters = runtime.extends_parameters
|
|||
|
|
if not DaraCore.is_null(extends_parameters.headers):
|
|||
|
|
extends_headers = extends_parameters.headers
|
|||
|
|
if not DaraCore.is_null(extends_parameters.queries):
|
|||
|
|
extends_queries = extends_parameters.queries
|
|||
|
|
_request.headers = DaraCore.merge({
|
|||
|
|
'date': Utils.get_date_utcstring(),
|
|||
|
|
'host': self._endpoint,
|
|||
|
|
'accept': 'application/json',
|
|||
|
|
'x-acs-signature-nonce': Utils.get_nonce(),
|
|||
|
|
'x-acs-signature-method': 'HMAC-SHA1',
|
|||
|
|
'x-acs-signature-version': '1.0',
|
|||
|
|
'x-acs-version': version,
|
|||
|
|
'x-acs-action': action,
|
|||
|
|
'user-agent': Utils.get_user_agent(self._user_agent),
|
|||
|
|
}, global_headers, extends_headers, request.headers)
|
|||
|
|
if not DaraCore.is_null(request.body):
|
|||
|
|
_request.body = DaraCore.to_json_string(request.body)
|
|||
|
|
_request.headers["content-type"] = 'application/json; charset=utf-8'
|
|||
|
|
_request.query = DaraCore.merge({}, global_queries, extends_queries)
|
|||
|
|
if not DaraCore.is_null(request.query):
|
|||
|
|
_request.query = DaraCore.merge({}, _request.query, request.query)
|
|||
|
|
if auth_type != 'Anonymous':
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
code = f'InvalidCredentials',
|
|||
|
|
message = f'Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details.'
|
|||
|
|
)
|
|||
|
|
credential_model = await self._credential.get_credential_async()
|
|||
|
|
if not DaraCore.is_null(credential_model.provider_name):
|
|||
|
|
_request.headers["x-acs-credentials-provider"] = credential_model.provider_name
|
|||
|
|
credential_type = credential_model.type
|
|||
|
|
if credential_type == 'bearer':
|
|||
|
|
bearer_token = credential_model.bearer_token
|
|||
|
|
_request.headers["x-acs-bearer-token"] = bearer_token
|
|||
|
|
_request.headers["x-acs-signature-type"] = 'BEARERTOKEN'
|
|||
|
|
elif credential_type == 'id_token':
|
|||
|
|
id_token = credential_model.security_token
|
|||
|
|
_request.headers["x-acs-zero-trust-idtoken"] = id_token
|
|||
|
|
else:
|
|||
|
|
access_key_id = credential_model.access_key_id
|
|||
|
|
access_key_secret = credential_model.access_key_secret
|
|||
|
|
security_token = credential_model.security_token
|
|||
|
|
if not DaraCore.is_null(security_token) and security_token != '':
|
|||
|
|
_request.headers["x-acs-accesskey-id"] = access_key_id
|
|||
|
|
_request.headers["x-acs-security-token"] = security_token
|
|||
|
|
string_to_sign = Utils.get_string_to_sign(_request)
|
|||
|
|
_request.headers["authorization"] = f'acs {access_key_id}:{Utils.get_roasignature(string_to_sign, access_key_secret)}'
|
|||
|
|
|
|||
|
|
_last_request = _request
|
|||
|
|
_response = await DaraCore.async_do_action(_request, _runtime)
|
|||
|
|
_last_response = _response
|
|||
|
|
if _response.status_code == 204:
|
|||
|
|
return {
|
|||
|
|
'headers': _response.headers
|
|||
|
|
}
|
|||
|
|
if (_response.status_code >= 400) and (_response.status_code < 600):
|
|||
|
|
_res = await DaraStream.read_as_json_async(_response.body)
|
|||
|
|
err = _res
|
|||
|
|
request_id = err.get("RequestId") or err.get("requestId")
|
|||
|
|
request_id = request_id or err.get("requestid")
|
|||
|
|
code = err.get("Code") or err.get("code")
|
|||
|
|
if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
|
|||
|
|
raise main_exceptions.ThrottlingException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
retry_after = Utils.get_throttling_time_left(_response.headers),
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
elif (_response.status_code >= 400) and (_response.status_code < 500):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
access_denied_detail = self.get_access_denied_detail(err),
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
else:
|
|||
|
|
raise main_exceptions.ServerException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if body_type == 'binary':
|
|||
|
|
resp = {
|
|||
|
|
'body': _response.body,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
return resp
|
|||
|
|
elif body_type == 'byte':
|
|||
|
|
byt = await DaraStream.read_as_bytes_async(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': byt,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'string':
|
|||
|
|
_str = await DaraStream.read_as_string_async(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': _str,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'json':
|
|||
|
|
obj = await DaraStream.read_as_json_async(_response.body)
|
|||
|
|
res = obj
|
|||
|
|
return {
|
|||
|
|
'body': res,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'array':
|
|||
|
|
arr = await DaraStream.read_as_json_async(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': arr,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
else:
|
|||
|
|
return {
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted,
|
|||
|
|
http_request = _last_request,
|
|||
|
|
http_response = _last_response,
|
|||
|
|
exception = e
|
|||
|
|
)
|
|||
|
|
continue
|
|||
|
|
raise UnretryableException(_context)
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
* @remarks
|
|||
|
|
* Encapsulate the request and invoke the network with form body
|
|||
|
|
*
|
|||
|
|
* @param action - api name
|
|||
|
|
* @param version - product version
|
|||
|
|
* @param protocol - http or https
|
|||
|
|
* @param method - e.g. GET
|
|||
|
|
* @param authType - authorization type e.g. AK
|
|||
|
|
* @param pathname - pathname of every api
|
|||
|
|
* @param bodyType - response body type e.g. String
|
|||
|
|
* @param request - object of OpenApiRequest
|
|||
|
|
* @param runtime - which controls some details of call api, such as retry times
|
|||
|
|
* @returns the response
|
|||
|
|
"""
|
|||
|
|
def do_roarequest_with_form(
|
|||
|
|
self,
|
|||
|
|
action: str,
|
|||
|
|
version: str,
|
|||
|
|
protocol: str,
|
|||
|
|
method: str,
|
|||
|
|
auth_type: str,
|
|||
|
|
pathname: str,
|
|||
|
|
body_type: str,
|
|||
|
|
request: open_api_util_models.OpenApiRequest,
|
|||
|
|
runtime: RuntimeOptions,
|
|||
|
|
) -> dict:
|
|||
|
|
_runtime = {
|
|||
|
|
'key': runtime.key or self._key,
|
|||
|
|
'cert': runtime.cert or self._cert,
|
|||
|
|
'ca': runtime.ca or self._ca,
|
|||
|
|
'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
|
|||
|
|
'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
|
|||
|
|
'httpProxy': runtime.http_proxy or self._http_proxy,
|
|||
|
|
'httpsProxy': runtime.https_proxy or self._https_proxy,
|
|||
|
|
'noProxy': runtime.no_proxy or self._no_proxy,
|
|||
|
|
'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
|
|||
|
|
'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
|
|||
|
|
'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
|
|||
|
|
'retryOptions': self._retry_options,
|
|||
|
|
'ignoreSSL': runtime.ignore_ssl,
|
|||
|
|
'tlsMinVersion': self._tls_min_version,
|
|||
|
|
}
|
|||
|
|
_last_request = None
|
|||
|
|
_last_response = None
|
|||
|
|
_retries_attempted = 0
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted
|
|||
|
|
)
|
|||
|
|
while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
|
|||
|
|
if _retries_attempted > 0:
|
|||
|
|
_backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
|
|||
|
|
if _backoff_time > 0:
|
|||
|
|
DaraCore.sleep(_backoff_time)
|
|||
|
|
_retries_attempted = _retries_attempted + 1
|
|||
|
|
try:
|
|||
|
|
_request = DaraRequest()
|
|||
|
|
_request.protocol = self._protocol or protocol
|
|||
|
|
_request.method = method
|
|||
|
|
_request.pathname = pathname
|
|||
|
|
global_queries = {}
|
|||
|
|
global_headers = {}
|
|||
|
|
if not DaraCore.is_null(self._global_parameters):
|
|||
|
|
global_params = self._global_parameters
|
|||
|
|
if not DaraCore.is_null(global_params.queries):
|
|||
|
|
global_queries = global_params.queries
|
|||
|
|
if not DaraCore.is_null(global_params.headers):
|
|||
|
|
global_headers = global_params.headers
|
|||
|
|
extends_headers = {}
|
|||
|
|
extends_queries = {}
|
|||
|
|
if not DaraCore.is_null(runtime.extends_parameters):
|
|||
|
|
extends_parameters = runtime.extends_parameters
|
|||
|
|
if not DaraCore.is_null(extends_parameters.headers):
|
|||
|
|
extends_headers = extends_parameters.headers
|
|||
|
|
if not DaraCore.is_null(extends_parameters.queries):
|
|||
|
|
extends_queries = extends_parameters.queries
|
|||
|
|
_request.headers = DaraCore.merge({
|
|||
|
|
'date': Utils.get_date_utcstring(),
|
|||
|
|
'host': self._endpoint,
|
|||
|
|
'accept': 'application/json',
|
|||
|
|
'x-acs-signature-nonce': Utils.get_nonce(),
|
|||
|
|
'x-acs-signature-method': 'HMAC-SHA1',
|
|||
|
|
'x-acs-signature-version': '1.0',
|
|||
|
|
'x-acs-version': version,
|
|||
|
|
'x-acs-action': action,
|
|||
|
|
'user-agent': Utils.get_user_agent(self._user_agent),
|
|||
|
|
}, global_headers, extends_headers, request.headers)
|
|||
|
|
if not DaraCore.is_null(request.body):
|
|||
|
|
m = request.body
|
|||
|
|
_request.body = Utils.to_form(m)
|
|||
|
|
_request.headers["content-type"] = 'application/x-www-form-urlencoded'
|
|||
|
|
_request.query = DaraCore.merge({}, global_queries, extends_queries)
|
|||
|
|
if not DaraCore.is_null(request.query):
|
|||
|
|
_request.query = DaraCore.merge({}, _request.query, request.query)
|
|||
|
|
if auth_type != 'Anonymous':
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
code = f'InvalidCredentials',
|
|||
|
|
message = f'Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details.'
|
|||
|
|
)
|
|||
|
|
credential_model = self._credential.get_credential()
|
|||
|
|
if not DaraCore.is_null(credential_model.provider_name):
|
|||
|
|
_request.headers["x-acs-credentials-provider"] = credential_model.provider_name
|
|||
|
|
credential_type = credential_model.type
|
|||
|
|
if credential_type == 'bearer':
|
|||
|
|
bearer_token = credential_model.bearer_token
|
|||
|
|
_request.headers["x-acs-bearer-token"] = bearer_token
|
|||
|
|
_request.headers["x-acs-signature-type"] = 'BEARERTOKEN'
|
|||
|
|
elif credential_type == 'id_token':
|
|||
|
|
id_token = credential_model.security_token
|
|||
|
|
_request.headers["x-acs-zero-trust-idtoken"] = id_token
|
|||
|
|
else:
|
|||
|
|
access_key_id = credential_model.access_key_id
|
|||
|
|
access_key_secret = credential_model.access_key_secret
|
|||
|
|
security_token = credential_model.security_token
|
|||
|
|
if not DaraCore.is_null(security_token) and security_token != '':
|
|||
|
|
_request.headers["x-acs-accesskey-id"] = access_key_id
|
|||
|
|
_request.headers["x-acs-security-token"] = security_token
|
|||
|
|
string_to_sign = Utils.get_string_to_sign(_request)
|
|||
|
|
_request.headers["authorization"] = f'acs {access_key_id}:{Utils.get_roasignature(string_to_sign, access_key_secret)}'
|
|||
|
|
|
|||
|
|
_last_request = _request
|
|||
|
|
_response = DaraCore.do_action(_request, _runtime)
|
|||
|
|
_last_response = _response
|
|||
|
|
if _response.status_code == 204:
|
|||
|
|
return {
|
|||
|
|
'headers': _response.headers
|
|||
|
|
}
|
|||
|
|
if (_response.status_code >= 400) and (_response.status_code < 600):
|
|||
|
|
_res = DaraStream.read_as_json(_response.body)
|
|||
|
|
err = _res
|
|||
|
|
request_id = err.get("RequestId") or err.get("requestId")
|
|||
|
|
code = err.get("Code") or err.get("code")
|
|||
|
|
if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
|
|||
|
|
raise main_exceptions.ThrottlingException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
retry_after = Utils.get_throttling_time_left(_response.headers),
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
elif (_response.status_code >= 400) and (_response.status_code < 500):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
access_denied_detail = self.get_access_denied_detail(err),
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
else:
|
|||
|
|
raise main_exceptions.ServerException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if body_type == 'binary':
|
|||
|
|
resp = {
|
|||
|
|
'body': _response.body,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
return resp
|
|||
|
|
elif body_type == 'byte':
|
|||
|
|
byt = DaraStream.read_as_bytes(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': byt,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'string':
|
|||
|
|
_str = DaraStream.read_as_string(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': _str,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'json':
|
|||
|
|
obj = DaraStream.read_as_json(_response.body)
|
|||
|
|
res = obj
|
|||
|
|
return {
|
|||
|
|
'body': res,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'array':
|
|||
|
|
arr = DaraStream.read_as_json(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': arr,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
else:
|
|||
|
|
return {
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted,
|
|||
|
|
http_request = _last_request,
|
|||
|
|
http_response = _last_response,
|
|||
|
|
exception = e
|
|||
|
|
)
|
|||
|
|
continue
|
|||
|
|
raise UnretryableException(_context)
|
|||
|
|
|
|||
|
|
async def do_roarequest_with_form_async(
|
|||
|
|
self,
|
|||
|
|
action: str,
|
|||
|
|
version: str,
|
|||
|
|
protocol: str,
|
|||
|
|
method: str,
|
|||
|
|
auth_type: str,
|
|||
|
|
pathname: str,
|
|||
|
|
body_type: str,
|
|||
|
|
request: open_api_util_models.OpenApiRequest,
|
|||
|
|
runtime: RuntimeOptions,
|
|||
|
|
) -> dict:
|
|||
|
|
_runtime = {
|
|||
|
|
'key': runtime.key or self._key,
|
|||
|
|
'cert': runtime.cert or self._cert,
|
|||
|
|
'ca': runtime.ca or self._ca,
|
|||
|
|
'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
|
|||
|
|
'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
|
|||
|
|
'httpProxy': runtime.http_proxy or self._http_proxy,
|
|||
|
|
'httpsProxy': runtime.https_proxy or self._https_proxy,
|
|||
|
|
'noProxy': runtime.no_proxy or self._no_proxy,
|
|||
|
|
'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
|
|||
|
|
'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
|
|||
|
|
'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
|
|||
|
|
'retryOptions': self._retry_options,
|
|||
|
|
'ignoreSSL': runtime.ignore_ssl,
|
|||
|
|
'tlsMinVersion': self._tls_min_version,
|
|||
|
|
}
|
|||
|
|
_last_request = None
|
|||
|
|
_last_response = None
|
|||
|
|
_retries_attempted = 0
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted
|
|||
|
|
)
|
|||
|
|
while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
|
|||
|
|
if _retries_attempted > 0:
|
|||
|
|
_backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
|
|||
|
|
if _backoff_time > 0:
|
|||
|
|
DaraCore.sleep(_backoff_time)
|
|||
|
|
_retries_attempted = _retries_attempted + 1
|
|||
|
|
try:
|
|||
|
|
_request = DaraRequest()
|
|||
|
|
_request.protocol = self._protocol or protocol
|
|||
|
|
_request.method = method
|
|||
|
|
_request.pathname = pathname
|
|||
|
|
global_queries = {}
|
|||
|
|
global_headers = {}
|
|||
|
|
if not DaraCore.is_null(self._global_parameters):
|
|||
|
|
global_params = self._global_parameters
|
|||
|
|
if not DaraCore.is_null(global_params.queries):
|
|||
|
|
global_queries = global_params.queries
|
|||
|
|
if not DaraCore.is_null(global_params.headers):
|
|||
|
|
global_headers = global_params.headers
|
|||
|
|
extends_headers = {}
|
|||
|
|
extends_queries = {}
|
|||
|
|
if not DaraCore.is_null(runtime.extends_parameters):
|
|||
|
|
extends_parameters = runtime.extends_parameters
|
|||
|
|
if not DaraCore.is_null(extends_parameters.headers):
|
|||
|
|
extends_headers = extends_parameters.headers
|
|||
|
|
if not DaraCore.is_null(extends_parameters.queries):
|
|||
|
|
extends_queries = extends_parameters.queries
|
|||
|
|
_request.headers = DaraCore.merge({
|
|||
|
|
'date': Utils.get_date_utcstring(),
|
|||
|
|
'host': self._endpoint,
|
|||
|
|
'accept': 'application/json',
|
|||
|
|
'x-acs-signature-nonce': Utils.get_nonce(),
|
|||
|
|
'x-acs-signature-method': 'HMAC-SHA1',
|
|||
|
|
'x-acs-signature-version': '1.0',
|
|||
|
|
'x-acs-version': version,
|
|||
|
|
'x-acs-action': action,
|
|||
|
|
'user-agent': Utils.get_user_agent(self._user_agent),
|
|||
|
|
}, global_headers, extends_headers, request.headers)
|
|||
|
|
if not DaraCore.is_null(request.body):
|
|||
|
|
m = request.body
|
|||
|
|
_request.body = Utils.to_form(m)
|
|||
|
|
_request.headers["content-type"] = 'application/x-www-form-urlencoded'
|
|||
|
|
_request.query = DaraCore.merge({}, global_queries, extends_queries)
|
|||
|
|
if not DaraCore.is_null(request.query):
|
|||
|
|
_request.query = DaraCore.merge({}, _request.query, request.query)
|
|||
|
|
if auth_type != 'Anonymous':
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
code = f'InvalidCredentials',
|
|||
|
|
message = f'Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details.'
|
|||
|
|
)
|
|||
|
|
credential_model = await self._credential.get_credential_async()
|
|||
|
|
if not DaraCore.is_null(credential_model.provider_name):
|
|||
|
|
_request.headers["x-acs-credentials-provider"] = credential_model.provider_name
|
|||
|
|
credential_type = credential_model.type
|
|||
|
|
if credential_type == 'bearer':
|
|||
|
|
bearer_token = credential_model.bearer_token
|
|||
|
|
_request.headers["x-acs-bearer-token"] = bearer_token
|
|||
|
|
_request.headers["x-acs-signature-type"] = 'BEARERTOKEN'
|
|||
|
|
elif credential_type == 'id_token':
|
|||
|
|
id_token = credential_model.security_token
|
|||
|
|
_request.headers["x-acs-zero-trust-idtoken"] = id_token
|
|||
|
|
else:
|
|||
|
|
access_key_id = credential_model.access_key_id
|
|||
|
|
access_key_secret = credential_model.access_key_secret
|
|||
|
|
security_token = credential_model.security_token
|
|||
|
|
if not DaraCore.is_null(security_token) and security_token != '':
|
|||
|
|
_request.headers["x-acs-accesskey-id"] = access_key_id
|
|||
|
|
_request.headers["x-acs-security-token"] = security_token
|
|||
|
|
string_to_sign = Utils.get_string_to_sign(_request)
|
|||
|
|
_request.headers["authorization"] = f'acs {access_key_id}:{Utils.get_roasignature(string_to_sign, access_key_secret)}'
|
|||
|
|
|
|||
|
|
_last_request = _request
|
|||
|
|
_response = await DaraCore.async_do_action(_request, _runtime)
|
|||
|
|
_last_response = _response
|
|||
|
|
if _response.status_code == 204:
|
|||
|
|
return {
|
|||
|
|
'headers': _response.headers
|
|||
|
|
}
|
|||
|
|
if (_response.status_code >= 400) and (_response.status_code < 600):
|
|||
|
|
_res = await DaraStream.read_as_json_async(_response.body)
|
|||
|
|
err = _res
|
|||
|
|
request_id = err.get("RequestId") or err.get("requestId")
|
|||
|
|
code = err.get("Code") or err.get("code")
|
|||
|
|
if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
|
|||
|
|
raise main_exceptions.ThrottlingException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
retry_after = Utils.get_throttling_time_left(_response.headers),
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
elif (_response.status_code >= 400) and (_response.status_code < 500):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
access_denied_detail = self.get_access_denied_detail(err),
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
else:
|
|||
|
|
raise main_exceptions.ServerException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if body_type == 'binary':
|
|||
|
|
resp = {
|
|||
|
|
'body': _response.body,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
return resp
|
|||
|
|
elif body_type == 'byte':
|
|||
|
|
byt = await DaraStream.read_as_bytes_async(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': byt,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'string':
|
|||
|
|
_str = await DaraStream.read_as_string_async(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': _str,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'json':
|
|||
|
|
obj = await DaraStream.read_as_json_async(_response.body)
|
|||
|
|
res = obj
|
|||
|
|
return {
|
|||
|
|
'body': res,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif body_type == 'array':
|
|||
|
|
arr = await DaraStream.read_as_json_async(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': arr,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
else:
|
|||
|
|
return {
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted,
|
|||
|
|
http_request = _last_request,
|
|||
|
|
http_response = _last_response,
|
|||
|
|
exception = e
|
|||
|
|
)
|
|||
|
|
continue
|
|||
|
|
raise UnretryableException(_context)
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
* @remarks
|
|||
|
|
* Encapsulate the request and invoke the network
|
|||
|
|
*
|
|||
|
|
* @param action - api name
|
|||
|
|
* @param version - product version
|
|||
|
|
* @param protocol - http or https
|
|||
|
|
* @param method - e.g. GET
|
|||
|
|
* @param authType - authorization type e.g. AK
|
|||
|
|
* @param bodyType - response body type e.g. String
|
|||
|
|
* @param request - object of OpenApiRequest
|
|||
|
|
* @param runtime - which controls some details of call api, such as retry times
|
|||
|
|
* @returns the response
|
|||
|
|
"""
|
|||
|
|
def do_request(
|
|||
|
|
self,
|
|||
|
|
params: open_api_util_models.Params,
|
|||
|
|
request: open_api_util_models.OpenApiRequest,
|
|||
|
|
runtime: RuntimeOptions,
|
|||
|
|
) -> dict:
|
|||
|
|
_runtime = {
|
|||
|
|
'key': runtime.key or self._key,
|
|||
|
|
'cert': runtime.cert or self._cert,
|
|||
|
|
'ca': runtime.ca or self._ca,
|
|||
|
|
'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
|
|||
|
|
'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
|
|||
|
|
'httpProxy': runtime.http_proxy or self._http_proxy,
|
|||
|
|
'httpsProxy': runtime.https_proxy or self._https_proxy,
|
|||
|
|
'noProxy': runtime.no_proxy or self._no_proxy,
|
|||
|
|
'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
|
|||
|
|
'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
|
|||
|
|
'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
|
|||
|
|
'retryOptions': self._retry_options,
|
|||
|
|
'ignoreSSL': runtime.ignore_ssl,
|
|||
|
|
'tlsMinVersion': self._tls_min_version,
|
|||
|
|
}
|
|||
|
|
_last_request = None
|
|||
|
|
_last_response = None
|
|||
|
|
_retries_attempted = 0
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted
|
|||
|
|
)
|
|||
|
|
while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
|
|||
|
|
if _retries_attempted > 0:
|
|||
|
|
_backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
|
|||
|
|
if _backoff_time > 0:
|
|||
|
|
DaraCore.sleep(_backoff_time)
|
|||
|
|
_retries_attempted = _retries_attempted + 1
|
|||
|
|
try:
|
|||
|
|
_request = DaraRequest()
|
|||
|
|
_request.protocol = self._protocol or params.protocol
|
|||
|
|
_request.method = params.method
|
|||
|
|
_request.pathname = params.pathname
|
|||
|
|
global_queries = {}
|
|||
|
|
global_headers = {}
|
|||
|
|
if not DaraCore.is_null(self._global_parameters):
|
|||
|
|
global_params = self._global_parameters
|
|||
|
|
if not DaraCore.is_null(global_params.queries):
|
|||
|
|
global_queries = global_params.queries
|
|||
|
|
if not DaraCore.is_null(global_params.headers):
|
|||
|
|
global_headers = global_params.headers
|
|||
|
|
extends_headers = {}
|
|||
|
|
extends_queries = {}
|
|||
|
|
if not DaraCore.is_null(runtime.extends_parameters):
|
|||
|
|
extends_parameters = runtime.extends_parameters
|
|||
|
|
if not DaraCore.is_null(extends_parameters.headers):
|
|||
|
|
extends_headers = extends_parameters.headers
|
|||
|
|
if not DaraCore.is_null(extends_parameters.queries):
|
|||
|
|
extends_queries = extends_parameters.queries
|
|||
|
|
_request.query = DaraCore.merge({}, global_queries, extends_queries, request.query)
|
|||
|
|
# endpoint is setted in product client
|
|||
|
|
_request.headers = DaraCore.merge({
|
|||
|
|
'host': self._endpoint,
|
|||
|
|
'x-acs-version': params.version,
|
|||
|
|
'x-acs-action': params.action,
|
|||
|
|
'user-agent': Utils.get_user_agent(self._user_agent),
|
|||
|
|
'x-acs-date': Utils.get_timestamp(),
|
|||
|
|
'x-acs-signature-nonce': Utils.get_nonce(),
|
|||
|
|
'accept': 'application/json',
|
|||
|
|
}, global_headers, extends_headers, request.headers)
|
|||
|
|
if params.style == 'RPC':
|
|||
|
|
headers = self.get_rpc_headers()
|
|||
|
|
if not DaraCore.is_null(headers):
|
|||
|
|
_request.headers = DaraCore.merge({}, _request.headers, headers)
|
|||
|
|
signature_algorithm = self._signature_algorithm or 'ACS3-HMAC-SHA256'
|
|||
|
|
hashed_request_payload = Utils.hash(DaraBytes.from_('', 'utf-8'), signature_algorithm)
|
|||
|
|
if not DaraCore.is_null(request.stream):
|
|||
|
|
tmp = DaraStream.read_as_bytes(request.stream)
|
|||
|
|
hashed_request_payload = Utils.hash(tmp, signature_algorithm)
|
|||
|
|
_request.body = tmp
|
|||
|
|
_request.headers["content-type"] = 'application/octet-stream'
|
|||
|
|
else:
|
|||
|
|
if not DaraCore.is_null(request.body):
|
|||
|
|
if params.req_body_type == 'byte':
|
|||
|
|
byte_obj = bytes(request.body)
|
|||
|
|
hashed_request_payload = Utils.hash(byte_obj, signature_algorithm)
|
|||
|
|
_request.body = byte_obj
|
|||
|
|
elif params.req_body_type == 'json':
|
|||
|
|
json_obj = DaraCore.to_json_string(request.body)
|
|||
|
|
hashed_request_payload = Utils.hash(json_obj.encode('utf-8'), signature_algorithm)
|
|||
|
|
_request.body = json_obj
|
|||
|
|
_request.headers["content-type"] = 'application/json; charset=utf-8'
|
|||
|
|
else:
|
|||
|
|
m = request.body
|
|||
|
|
form_obj = Utils.to_form(m)
|
|||
|
|
hashed_request_payload = Utils.hash(form_obj.encode('utf-8'), signature_algorithm)
|
|||
|
|
_request.body = form_obj
|
|||
|
|
_request.headers["content-type"] = 'application/x-www-form-urlencoded'
|
|||
|
|
|
|||
|
|
|
|||
|
|
_request.headers["x-acs-content-sha256"] = hashed_request_payload.hex()
|
|||
|
|
if params.auth_type != 'Anonymous':
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
code = f'InvalidCredentials',
|
|||
|
|
message = f'Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details.'
|
|||
|
|
)
|
|||
|
|
credential_model = self._credential.get_credential()
|
|||
|
|
if not DaraCore.is_null(credential_model.provider_name):
|
|||
|
|
_request.headers["x-acs-credentials-provider"] = credential_model.provider_name
|
|||
|
|
auth_type = credential_model.type
|
|||
|
|
if auth_type == 'bearer':
|
|||
|
|
bearer_token = credential_model.bearer_token
|
|||
|
|
_request.headers["x-acs-bearer-token"] = bearer_token
|
|||
|
|
if params.style == 'RPC':
|
|||
|
|
_request.query["SignatureType"] = 'BEARERTOKEN'
|
|||
|
|
else:
|
|||
|
|
_request.headers["x-acs-signature-type"] = 'BEARERTOKEN'
|
|||
|
|
|
|||
|
|
elif auth_type == 'id_token':
|
|||
|
|
id_token = credential_model.security_token
|
|||
|
|
_request.headers["x-acs-zero-trust-idtoken"] = id_token
|
|||
|
|
else:
|
|||
|
|
access_key_id = credential_model.access_key_id
|
|||
|
|
access_key_secret = credential_model.access_key_secret
|
|||
|
|
security_token = credential_model.security_token
|
|||
|
|
if not DaraCore.is_null(security_token) and security_token != '':
|
|||
|
|
_request.headers["x-acs-accesskey-id"] = access_key_id
|
|||
|
|
_request.headers["x-acs-security-token"] = security_token
|
|||
|
|
_request.headers["Authorization"] = Utils.get_authorization(_request, signature_algorithm, hashed_request_payload.hex(), access_key_id, access_key_secret)
|
|||
|
|
|
|||
|
|
_last_request = _request
|
|||
|
|
_response = DaraCore.do_action(_request, _runtime)
|
|||
|
|
_last_response = _response
|
|||
|
|
if (_response.status_code >= 400) and (_response.status_code < 600):
|
|||
|
|
err = {}
|
|||
|
|
if not DaraCore.is_null(_response.headers.get("content-type")) and _response.headers.get("content-type") == 'text/xml;charset=utf-8':
|
|||
|
|
_str = DaraStream.read_as_string(_response.body)
|
|||
|
|
resp_map = DaraXML.parse_xml(_str, None)
|
|||
|
|
err = resp_map.get("Error")
|
|||
|
|
else:
|
|||
|
|
_res = DaraStream.read_as_json(_response.body)
|
|||
|
|
err = _res
|
|||
|
|
|
|||
|
|
request_id = err.get("RequestId") or err.get("requestId")
|
|||
|
|
code = err.get("Code") or err.get("code")
|
|||
|
|
if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
|
|||
|
|
raise main_exceptions.ThrottlingException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
retry_after = Utils.get_throttling_time_left(_response.headers),
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
elif (_response.status_code >= 400) and (_response.status_code < 500):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
access_denied_detail = self.get_access_denied_detail(err),
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
else:
|
|||
|
|
raise main_exceptions.ServerException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if params.body_type == 'binary':
|
|||
|
|
resp = {
|
|||
|
|
'body': _response.body,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
return resp
|
|||
|
|
elif params.body_type == 'byte':
|
|||
|
|
byt = DaraStream.read_as_bytes(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': byt,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif params.body_type == 'string':
|
|||
|
|
resp_str = DaraStream.read_as_string(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': resp_str,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif params.body_type == 'json':
|
|||
|
|
obj = DaraStream.read_as_json(_response.body)
|
|||
|
|
res = obj
|
|||
|
|
return {
|
|||
|
|
'body': res,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif params.body_type == 'array':
|
|||
|
|
arr = DaraStream.read_as_json(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': arr,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
else:
|
|||
|
|
anything = DaraStream.read_as_string(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': anything,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted,
|
|||
|
|
http_request = _last_request,
|
|||
|
|
http_response = _last_response,
|
|||
|
|
exception = e
|
|||
|
|
)
|
|||
|
|
continue
|
|||
|
|
raise UnretryableException(_context)
|
|||
|
|
|
|||
|
|
async def do_request_async(
|
|||
|
|
self,
|
|||
|
|
params: open_api_util_models.Params,
|
|||
|
|
request: open_api_util_models.OpenApiRequest,
|
|||
|
|
runtime: RuntimeOptions,
|
|||
|
|
) -> dict:
|
|||
|
|
_runtime = {
|
|||
|
|
'key': runtime.key or self._key,
|
|||
|
|
'cert': runtime.cert or self._cert,
|
|||
|
|
'ca': runtime.ca or self._ca,
|
|||
|
|
'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
|
|||
|
|
'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
|
|||
|
|
'httpProxy': runtime.http_proxy or self._http_proxy,
|
|||
|
|
'httpsProxy': runtime.https_proxy or self._https_proxy,
|
|||
|
|
'noProxy': runtime.no_proxy or self._no_proxy,
|
|||
|
|
'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
|
|||
|
|
'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
|
|||
|
|
'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
|
|||
|
|
'retryOptions': self._retry_options,
|
|||
|
|
'ignoreSSL': runtime.ignore_ssl,
|
|||
|
|
'tlsMinVersion': self._tls_min_version,
|
|||
|
|
}
|
|||
|
|
_last_request = None
|
|||
|
|
_last_response = None
|
|||
|
|
_retries_attempted = 0
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted
|
|||
|
|
)
|
|||
|
|
while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
|
|||
|
|
if _retries_attempted > 0:
|
|||
|
|
_backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
|
|||
|
|
if _backoff_time > 0:
|
|||
|
|
DaraCore.sleep(_backoff_time)
|
|||
|
|
_retries_attempted = _retries_attempted + 1
|
|||
|
|
try:
|
|||
|
|
_request = DaraRequest()
|
|||
|
|
_request.protocol = self._protocol or params.protocol
|
|||
|
|
_request.method = params.method
|
|||
|
|
_request.pathname = params.pathname
|
|||
|
|
global_queries = {}
|
|||
|
|
global_headers = {}
|
|||
|
|
if not DaraCore.is_null(self._global_parameters):
|
|||
|
|
global_params = self._global_parameters
|
|||
|
|
if not DaraCore.is_null(global_params.queries):
|
|||
|
|
global_queries = global_params.queries
|
|||
|
|
if not DaraCore.is_null(global_params.headers):
|
|||
|
|
global_headers = global_params.headers
|
|||
|
|
extends_headers = {}
|
|||
|
|
extends_queries = {}
|
|||
|
|
if not DaraCore.is_null(runtime.extends_parameters):
|
|||
|
|
extends_parameters = runtime.extends_parameters
|
|||
|
|
if not DaraCore.is_null(extends_parameters.headers):
|
|||
|
|
extends_headers = extends_parameters.headers
|
|||
|
|
if not DaraCore.is_null(extends_parameters.queries):
|
|||
|
|
extends_queries = extends_parameters.queries
|
|||
|
|
_request.query = DaraCore.merge({}, global_queries, extends_queries, request.query)
|
|||
|
|
# endpoint is setted in product client
|
|||
|
|
_request.headers = DaraCore.merge({
|
|||
|
|
'host': self._endpoint,
|
|||
|
|
'x-acs-version': params.version,
|
|||
|
|
'x-acs-action': params.action,
|
|||
|
|
'user-agent': Utils.get_user_agent(self._user_agent),
|
|||
|
|
'x-acs-date': Utils.get_timestamp(),
|
|||
|
|
'x-acs-signature-nonce': Utils.get_nonce(),
|
|||
|
|
'accept': 'application/json',
|
|||
|
|
}, global_headers, extends_headers, request.headers)
|
|||
|
|
if params.style == 'RPC':
|
|||
|
|
headers = self.get_rpc_headers()
|
|||
|
|
if not DaraCore.is_null(headers):
|
|||
|
|
_request.headers = DaraCore.merge({}, _request.headers, headers)
|
|||
|
|
signature_algorithm = self._signature_algorithm or 'ACS3-HMAC-SHA256'
|
|||
|
|
hashed_request_payload = Utils.hash(DaraBytes.from_('', 'utf-8'), signature_algorithm)
|
|||
|
|
if not DaraCore.is_null(request.stream):
|
|||
|
|
tmp = await DaraStream.read_as_bytes_async(request.stream)
|
|||
|
|
hashed_request_payload = Utils.hash(tmp, signature_algorithm)
|
|||
|
|
_request.body = tmp
|
|||
|
|
_request.headers["content-type"] = 'application/octet-stream'
|
|||
|
|
else:
|
|||
|
|
if not DaraCore.is_null(request.body):
|
|||
|
|
if params.req_body_type == 'byte':
|
|||
|
|
byte_obj = bytes(request.body)
|
|||
|
|
hashed_request_payload = Utils.hash(byte_obj, signature_algorithm)
|
|||
|
|
_request.body = byte_obj
|
|||
|
|
elif params.req_body_type == 'json':
|
|||
|
|
json_obj = DaraCore.to_json_string(request.body)
|
|||
|
|
hashed_request_payload = Utils.hash(json_obj.encode('utf-8'), signature_algorithm)
|
|||
|
|
_request.body = json_obj
|
|||
|
|
_request.headers["content-type"] = 'application/json; charset=utf-8'
|
|||
|
|
else:
|
|||
|
|
m = request.body
|
|||
|
|
form_obj = Utils.to_form(m)
|
|||
|
|
hashed_request_payload = Utils.hash(form_obj.encode('utf-8'), signature_algorithm)
|
|||
|
|
_request.body = form_obj
|
|||
|
|
_request.headers["content-type"] = 'application/x-www-form-urlencoded'
|
|||
|
|
|
|||
|
|
|
|||
|
|
_request.headers["x-acs-content-sha256"] = hashed_request_payload.hex()
|
|||
|
|
if params.auth_type != 'Anonymous':
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
code = f'InvalidCredentials',
|
|||
|
|
message = f'Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details.'
|
|||
|
|
)
|
|||
|
|
credential_model = await self._credential.get_credential_async()
|
|||
|
|
if not DaraCore.is_null(credential_model.provider_name):
|
|||
|
|
_request.headers["x-acs-credentials-provider"] = credential_model.provider_name
|
|||
|
|
auth_type = credential_model.type
|
|||
|
|
if auth_type == 'bearer':
|
|||
|
|
bearer_token = credential_model.bearer_token
|
|||
|
|
_request.headers["x-acs-bearer-token"] = bearer_token
|
|||
|
|
if params.style == 'RPC':
|
|||
|
|
_request.query["SignatureType"] = 'BEARERTOKEN'
|
|||
|
|
else:
|
|||
|
|
_request.headers["x-acs-signature-type"] = 'BEARERTOKEN'
|
|||
|
|
|
|||
|
|
elif auth_type == 'id_token':
|
|||
|
|
id_token = credential_model.security_token
|
|||
|
|
_request.headers["x-acs-zero-trust-idtoken"] = id_token
|
|||
|
|
else:
|
|||
|
|
access_key_id = credential_model.access_key_id
|
|||
|
|
access_key_secret = credential_model.access_key_secret
|
|||
|
|
security_token = credential_model.security_token
|
|||
|
|
if not DaraCore.is_null(security_token) and security_token != '':
|
|||
|
|
_request.headers["x-acs-accesskey-id"] = access_key_id
|
|||
|
|
_request.headers["x-acs-security-token"] = security_token
|
|||
|
|
_request.headers["Authorization"] = Utils.get_authorization(_request, signature_algorithm, hashed_request_payload.hex(), access_key_id, access_key_secret)
|
|||
|
|
|
|||
|
|
_last_request = _request
|
|||
|
|
_response = await DaraCore.async_do_action(_request, _runtime)
|
|||
|
|
_last_response = _response
|
|||
|
|
if (_response.status_code >= 400) and (_response.status_code < 600):
|
|||
|
|
err = {}
|
|||
|
|
if not DaraCore.is_null(_response.headers.get("content-type")) and _response.headers.get("content-type") == 'text/xml;charset=utf-8':
|
|||
|
|
_str = await DaraStream.read_as_string_async(_response.body)
|
|||
|
|
resp_map = DaraXML.parse_xml(_str, None)
|
|||
|
|
err = resp_map.get("Error")
|
|||
|
|
else:
|
|||
|
|
_res = await DaraStream.read_as_json_async(_response.body)
|
|||
|
|
err = _res
|
|||
|
|
|
|||
|
|
request_id = err.get("RequestId") or err.get("requestId")
|
|||
|
|
code = err.get("Code") or err.get("code")
|
|||
|
|
if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
|
|||
|
|
raise main_exceptions.ThrottlingException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
retry_after = Utils.get_throttling_time_left(_response.headers),
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
elif (_response.status_code >= 400) and (_response.status_code < 500):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
access_denied_detail = self.get_access_denied_detail(err),
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
else:
|
|||
|
|
raise main_exceptions.ServerException(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
code = f'{code}',
|
|||
|
|
message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
|
|||
|
|
description = f'{err.get("Description") or err.get("description")}',
|
|||
|
|
data = err,
|
|||
|
|
request_id = f'{request_id}'
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if params.body_type == 'binary':
|
|||
|
|
resp = {
|
|||
|
|
'body': _response.body,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
return resp
|
|||
|
|
elif params.body_type == 'byte':
|
|||
|
|
byt = await DaraStream.read_as_bytes_async(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': byt,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif params.body_type == 'string':
|
|||
|
|
resp_str = await DaraStream.read_as_string_async(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': resp_str,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif params.body_type == 'json':
|
|||
|
|
obj = await DaraStream.read_as_json_async(_response.body)
|
|||
|
|
res = obj
|
|||
|
|
return {
|
|||
|
|
'body': res,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
elif params.body_type == 'array':
|
|||
|
|
arr = await DaraStream.read_as_json_async(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': arr,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
else:
|
|||
|
|
anything = await DaraStream.read_as_string_async(_response.body)
|
|||
|
|
return {
|
|||
|
|
'body': anything,
|
|||
|
|
'headers': _response.headers,
|
|||
|
|
'statusCode': _response.status_code
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted,
|
|||
|
|
http_request = _last_request,
|
|||
|
|
http_response = _last_response,
|
|||
|
|
exception = e
|
|||
|
|
)
|
|||
|
|
continue
|
|||
|
|
raise UnretryableException(_context)
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
* @remarks
|
|||
|
|
* Encapsulate the request and invoke the network
|
|||
|
|
*
|
|||
|
|
* @param action - api name
|
|||
|
|
* @param version - product version
|
|||
|
|
* @param protocol - http or https
|
|||
|
|
* @param method - e.g. GET
|
|||
|
|
* @param authType - authorization type e.g. AK
|
|||
|
|
* @param bodyType - response body type e.g. String
|
|||
|
|
* @param request - object of OpenApiRequest
|
|||
|
|
* @param runtime - which controls some details of call api, such as retry times
|
|||
|
|
* @returns the response
|
|||
|
|
"""
|
|||
|
|
def execute(
|
|||
|
|
self,
|
|||
|
|
params: open_api_util_models.Params,
|
|||
|
|
request: open_api_util_models.OpenApiRequest,
|
|||
|
|
runtime: RuntimeOptions,
|
|||
|
|
) -> dict:
|
|||
|
|
_runtime = {
|
|||
|
|
'key': runtime.key or self._key,
|
|||
|
|
'cert': runtime.cert or self._cert,
|
|||
|
|
'ca': runtime.ca or self._ca,
|
|||
|
|
'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
|
|||
|
|
'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
|
|||
|
|
'httpProxy': runtime.http_proxy or self._http_proxy,
|
|||
|
|
'httpsProxy': runtime.https_proxy or self._https_proxy,
|
|||
|
|
'noProxy': runtime.no_proxy or self._no_proxy,
|
|||
|
|
'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
|
|||
|
|
'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
|
|||
|
|
'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
|
|||
|
|
'retryOptions': self._retry_options,
|
|||
|
|
'ignoreSSL': runtime.ignore_ssl,
|
|||
|
|
'tlsMinVersion': self._tls_min_version,
|
|||
|
|
'disableHttp2': bool(self._disable_http_2 or False),
|
|||
|
|
}
|
|||
|
|
_last_request = None
|
|||
|
|
_last_response = None
|
|||
|
|
_retries_attempted = 0
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted
|
|||
|
|
)
|
|||
|
|
while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
|
|||
|
|
if _retries_attempted > 0:
|
|||
|
|
_backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
|
|||
|
|
if _backoff_time > 0:
|
|||
|
|
DaraCore.sleep(_backoff_time)
|
|||
|
|
_retries_attempted = _retries_attempted + 1
|
|||
|
|
try:
|
|||
|
|
_request = DaraRequest()
|
|||
|
|
# spi = new Gateway();//Gateway implements SPI,这一步在产品 SDK 中实例化
|
|||
|
|
headers = self.get_rpc_headers()
|
|||
|
|
global_queries = {}
|
|||
|
|
global_headers = {}
|
|||
|
|
if not DaraCore.is_null(self._global_parameters):
|
|||
|
|
global_params = self._global_parameters
|
|||
|
|
if not DaraCore.is_null(global_params.queries):
|
|||
|
|
global_queries = global_params.queries
|
|||
|
|
if not DaraCore.is_null(global_params.headers):
|
|||
|
|
global_headers = global_params.headers
|
|||
|
|
extends_headers = {}
|
|||
|
|
extends_queries = {}
|
|||
|
|
if not DaraCore.is_null(runtime.extends_parameters):
|
|||
|
|
extends_parameters = runtime.extends_parameters
|
|||
|
|
if not DaraCore.is_null(extends_parameters.headers):
|
|||
|
|
extends_headers = extends_parameters.headers
|
|||
|
|
if not DaraCore.is_null(extends_parameters.queries):
|
|||
|
|
extends_queries = extends_parameters.queries
|
|||
|
|
request_context = spi_models.InterceptorContextRequest(
|
|||
|
|
headers = DaraCore.merge({}, global_headers, extends_headers, request.headers, headers),
|
|||
|
|
query = DaraCore.merge({}, global_queries, extends_queries, request.query),
|
|||
|
|
body = request.body,
|
|||
|
|
stream = request.stream,
|
|||
|
|
host_map = request.host_map,
|
|||
|
|
pathname = params.pathname,
|
|||
|
|
product_id = self._product_id,
|
|||
|
|
action = params.action,
|
|||
|
|
version = params.version,
|
|||
|
|
protocol = self._protocol or params.protocol,
|
|||
|
|
method = self._method or params.method,
|
|||
|
|
auth_type = params.auth_type,
|
|||
|
|
body_type = params.body_type,
|
|||
|
|
req_body_type = params.req_body_type,
|
|||
|
|
style = params.style,
|
|||
|
|
credential = self._credential,
|
|||
|
|
signature_version = self._signature_version,
|
|||
|
|
signature_algorithm = self._signature_algorithm,
|
|||
|
|
user_agent = Utils.get_user_agent(self._user_agent)
|
|||
|
|
)
|
|||
|
|
configuration_context = spi_models.InterceptorContextConfiguration(
|
|||
|
|
region_id = self._region_id,
|
|||
|
|
endpoint = request.endpoint_override or self._endpoint,
|
|||
|
|
endpoint_rule = self._endpoint_rule,
|
|||
|
|
endpoint_map = self._endpoint_map,
|
|||
|
|
endpoint_type = self._endpoint_type,
|
|||
|
|
network = self._network,
|
|||
|
|
suffix = self._suffix
|
|||
|
|
)
|
|||
|
|
interceptor_context = spi_models.InterceptorContext(
|
|||
|
|
request = request_context,
|
|||
|
|
configuration = configuration_context
|
|||
|
|
)
|
|||
|
|
attribute_map = spi_models.AttributeMap()
|
|||
|
|
if not DaraCore.is_null(self._attribute_map):
|
|||
|
|
attribute_map = self._attribute_map
|
|||
|
|
# 1. spi.modifyConfiguration(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
|
|||
|
|
self._spi.modify_configuration(interceptor_context, attribute_map)
|
|||
|
|
# 2. spi.modifyRequest(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
|
|||
|
|
self._spi.modify_request(interceptor_context, attribute_map)
|
|||
|
|
_request.protocol = interceptor_context.request.protocol
|
|||
|
|
_request.method = interceptor_context.request.method
|
|||
|
|
_request.pathname = interceptor_context.request.pathname
|
|||
|
|
_request.query = interceptor_context.request.query
|
|||
|
|
_request.body = interceptor_context.request.stream
|
|||
|
|
_request.headers = interceptor_context.request.headers
|
|||
|
|
_last_request = _request
|
|||
|
|
_response = DaraCore.do_action(_request, _runtime)
|
|||
|
|
_last_response = _response
|
|||
|
|
response_context = spi_models.InterceptorContextResponse(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
headers = _response.headers,
|
|||
|
|
body = _response.body
|
|||
|
|
)
|
|||
|
|
interceptor_context.response = response_context
|
|||
|
|
# 3. spi.modifyResponse(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
|
|||
|
|
self._spi.modify_response(interceptor_context, attribute_map)
|
|||
|
|
return {
|
|||
|
|
'headers': interceptor_context.response.headers,
|
|||
|
|
'statusCode': interceptor_context.response.status_code,
|
|||
|
|
'body': interceptor_context.response.deserialized_body
|
|||
|
|
}
|
|||
|
|
except Exception as e:
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted,
|
|||
|
|
http_request = _last_request,
|
|||
|
|
http_response = _last_response,
|
|||
|
|
exception = e
|
|||
|
|
)
|
|||
|
|
continue
|
|||
|
|
raise UnretryableException(_context)
|
|||
|
|
|
|||
|
|
async def execute_async(
|
|||
|
|
self,
|
|||
|
|
params: open_api_util_models.Params,
|
|||
|
|
request: open_api_util_models.OpenApiRequest,
|
|||
|
|
runtime: RuntimeOptions,
|
|||
|
|
) -> dict:
|
|||
|
|
_runtime = {
|
|||
|
|
'key': runtime.key or self._key,
|
|||
|
|
'cert': runtime.cert or self._cert,
|
|||
|
|
'ca': runtime.ca or self._ca,
|
|||
|
|
'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
|
|||
|
|
'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
|
|||
|
|
'httpProxy': runtime.http_proxy or self._http_proxy,
|
|||
|
|
'httpsProxy': runtime.https_proxy or self._https_proxy,
|
|||
|
|
'noProxy': runtime.no_proxy or self._no_proxy,
|
|||
|
|
'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
|
|||
|
|
'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
|
|||
|
|
'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
|
|||
|
|
'retryOptions': self._retry_options,
|
|||
|
|
'ignoreSSL': runtime.ignore_ssl,
|
|||
|
|
'tlsMinVersion': self._tls_min_version,
|
|||
|
|
'disableHttp2': bool(self._disable_http_2 or False),
|
|||
|
|
}
|
|||
|
|
_last_request = None
|
|||
|
|
_last_response = None
|
|||
|
|
_retries_attempted = 0
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted
|
|||
|
|
)
|
|||
|
|
while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
|
|||
|
|
if _retries_attempted > 0:
|
|||
|
|
_backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
|
|||
|
|
if _backoff_time > 0:
|
|||
|
|
DaraCore.sleep(_backoff_time)
|
|||
|
|
_retries_attempted = _retries_attempted + 1
|
|||
|
|
try:
|
|||
|
|
_request = DaraRequest()
|
|||
|
|
# spi = new Gateway();//Gateway implements SPI,这一步在产品 SDK 中实例化
|
|||
|
|
headers = self.get_rpc_headers()
|
|||
|
|
global_queries = {}
|
|||
|
|
global_headers = {}
|
|||
|
|
if not DaraCore.is_null(self._global_parameters):
|
|||
|
|
global_params = self._global_parameters
|
|||
|
|
if not DaraCore.is_null(global_params.queries):
|
|||
|
|
global_queries = global_params.queries
|
|||
|
|
if not DaraCore.is_null(global_params.headers):
|
|||
|
|
global_headers = global_params.headers
|
|||
|
|
extends_headers = {}
|
|||
|
|
extends_queries = {}
|
|||
|
|
if not DaraCore.is_null(runtime.extends_parameters):
|
|||
|
|
extends_parameters = runtime.extends_parameters
|
|||
|
|
if not DaraCore.is_null(extends_parameters.headers):
|
|||
|
|
extends_headers = extends_parameters.headers
|
|||
|
|
if not DaraCore.is_null(extends_parameters.queries):
|
|||
|
|
extends_queries = extends_parameters.queries
|
|||
|
|
request_context = spi_models.InterceptorContextRequest(
|
|||
|
|
headers = DaraCore.merge({}, global_headers, extends_headers, request.headers, headers),
|
|||
|
|
query = DaraCore.merge({}, global_queries, extends_queries, request.query),
|
|||
|
|
body = request.body,
|
|||
|
|
stream = request.stream,
|
|||
|
|
host_map = request.host_map,
|
|||
|
|
pathname = params.pathname,
|
|||
|
|
product_id = self._product_id,
|
|||
|
|
action = params.action,
|
|||
|
|
version = params.version,
|
|||
|
|
protocol = self._protocol or params.protocol,
|
|||
|
|
method = self._method or params.method,
|
|||
|
|
auth_type = params.auth_type,
|
|||
|
|
body_type = params.body_type,
|
|||
|
|
req_body_type = params.req_body_type,
|
|||
|
|
style = params.style,
|
|||
|
|
credential = self._credential,
|
|||
|
|
signature_version = self._signature_version,
|
|||
|
|
signature_algorithm = self._signature_algorithm,
|
|||
|
|
user_agent = Utils.get_user_agent(self._user_agent)
|
|||
|
|
)
|
|||
|
|
configuration_context = spi_models.InterceptorContextConfiguration(
|
|||
|
|
region_id = self._region_id,
|
|||
|
|
endpoint = request.endpoint_override or self._endpoint,
|
|||
|
|
endpoint_rule = self._endpoint_rule,
|
|||
|
|
endpoint_map = self._endpoint_map,
|
|||
|
|
endpoint_type = self._endpoint_type,
|
|||
|
|
network = self._network,
|
|||
|
|
suffix = self._suffix
|
|||
|
|
)
|
|||
|
|
interceptor_context = spi_models.InterceptorContext(
|
|||
|
|
request = request_context,
|
|||
|
|
configuration = configuration_context
|
|||
|
|
)
|
|||
|
|
attribute_map = spi_models.AttributeMap()
|
|||
|
|
if not DaraCore.is_null(self._attribute_map):
|
|||
|
|
attribute_map = self._attribute_map
|
|||
|
|
# 1. spi.modifyConfiguration(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
|
|||
|
|
await self._spi.modify_configuration_async(interceptor_context, attribute_map)
|
|||
|
|
# 2. spi.modifyRequest(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
|
|||
|
|
await self._spi.modify_request_async(interceptor_context, attribute_map)
|
|||
|
|
_request.protocol = interceptor_context.request.protocol
|
|||
|
|
_request.method = interceptor_context.request.method
|
|||
|
|
_request.pathname = interceptor_context.request.pathname
|
|||
|
|
_request.query = interceptor_context.request.query
|
|||
|
|
_request.body = interceptor_context.request.stream
|
|||
|
|
_request.headers = interceptor_context.request.headers
|
|||
|
|
_last_request = _request
|
|||
|
|
_response = await DaraCore.async_do_action(_request, _runtime)
|
|||
|
|
_last_response = _response
|
|||
|
|
response_context = spi_models.InterceptorContextResponse(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
headers = _response.headers,
|
|||
|
|
body = _response.body
|
|||
|
|
)
|
|||
|
|
interceptor_context.response = response_context
|
|||
|
|
# 3. spi.modifyResponse(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
|
|||
|
|
await self._spi.modify_response_async(interceptor_context, attribute_map)
|
|||
|
|
return {
|
|||
|
|
'headers': interceptor_context.response.headers,
|
|||
|
|
'statusCode': interceptor_context.response.status_code,
|
|||
|
|
'body': interceptor_context.response.deserialized_body
|
|||
|
|
}
|
|||
|
|
except Exception as e:
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted,
|
|||
|
|
http_request = _last_request,
|
|||
|
|
http_response = _last_response,
|
|||
|
|
exception = e
|
|||
|
|
)
|
|||
|
|
continue
|
|||
|
|
raise UnretryableException(_context)
|
|||
|
|
|
|||
|
|
def call_sseapi(
|
|||
|
|
self,
|
|||
|
|
params: open_api_util_models.Params,
|
|||
|
|
request: open_api_util_models.OpenApiRequest,
|
|||
|
|
runtime: RuntimeOptions,
|
|||
|
|
) -> Generator[main_models.SSEResponse, None, None]:
|
|||
|
|
_runtime = {
|
|||
|
|
'key': runtime.key or self._key,
|
|||
|
|
'cert': runtime.cert or self._cert,
|
|||
|
|
'ca': runtime.ca or self._ca,
|
|||
|
|
'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
|
|||
|
|
'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
|
|||
|
|
'httpProxy': runtime.http_proxy or self._http_proxy,
|
|||
|
|
'httpsProxy': runtime.https_proxy or self._https_proxy,
|
|||
|
|
'noProxy': runtime.no_proxy or self._no_proxy,
|
|||
|
|
'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
|
|||
|
|
'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
|
|||
|
|
'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
|
|||
|
|
'retryOptions': self._retry_options,
|
|||
|
|
'ignoreSSL': runtime.ignore_ssl,
|
|||
|
|
'tlsMinVersion': self._tls_min_version,
|
|||
|
|
}
|
|||
|
|
_last_request = None
|
|||
|
|
_last_response = None
|
|||
|
|
_retries_attempted = 0
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted
|
|||
|
|
)
|
|||
|
|
while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
|
|||
|
|
if _retries_attempted > 0:
|
|||
|
|
_backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
|
|||
|
|
if _backoff_time > 0:
|
|||
|
|
DaraCore.sleep(_backoff_time)
|
|||
|
|
_retries_attempted = _retries_attempted + 1
|
|||
|
|
try:
|
|||
|
|
_request = DaraRequest()
|
|||
|
|
_request.protocol = self._protocol or params.protocol
|
|||
|
|
_request.method = params.method
|
|||
|
|
_request.pathname = params.pathname
|
|||
|
|
global_queries = {}
|
|||
|
|
global_headers = {}
|
|||
|
|
if not DaraCore.is_null(self._global_parameters):
|
|||
|
|
global_params = self._global_parameters
|
|||
|
|
if not DaraCore.is_null(global_params.queries):
|
|||
|
|
global_queries = global_params.queries
|
|||
|
|
if not DaraCore.is_null(global_params.headers):
|
|||
|
|
global_headers = global_params.headers
|
|||
|
|
extends_headers = {}
|
|||
|
|
extends_queries = {}
|
|||
|
|
if not DaraCore.is_null(runtime.extends_parameters):
|
|||
|
|
extends_parameters = runtime.extends_parameters
|
|||
|
|
if not DaraCore.is_null(extends_parameters.headers):
|
|||
|
|
extends_headers = extends_parameters.headers
|
|||
|
|
if not DaraCore.is_null(extends_parameters.queries):
|
|||
|
|
extends_queries = extends_parameters.queries
|
|||
|
|
_request.query = DaraCore.merge({}, global_queries, extends_queries, request.query)
|
|||
|
|
# endpoint is setted in product client
|
|||
|
|
_request.headers = DaraCore.merge({
|
|||
|
|
'host': self._endpoint,
|
|||
|
|
'x-acs-version': params.version,
|
|||
|
|
'x-acs-action': params.action,
|
|||
|
|
'user-agent': Utils.get_user_agent(self._user_agent),
|
|||
|
|
'x-acs-date': Utils.get_timestamp(),
|
|||
|
|
'x-acs-signature-nonce': Utils.get_nonce(),
|
|||
|
|
'accept': 'application/json',
|
|||
|
|
}, extends_headers, global_headers, request.headers)
|
|||
|
|
if params.style == 'RPC':
|
|||
|
|
headers = self.get_rpc_headers()
|
|||
|
|
if not DaraCore.is_null(headers):
|
|||
|
|
_request.headers = DaraCore.merge({}, _request.headers, headers)
|
|||
|
|
signature_algorithm = self._signature_algorithm or 'ACS3-HMAC-SHA256'
|
|||
|
|
hashed_request_payload = Utils.hash(DaraBytes.from_('', 'utf-8'), signature_algorithm)
|
|||
|
|
if not DaraCore.is_null(request.stream):
|
|||
|
|
tmp = DaraStream.read_as_bytes(request.stream)
|
|||
|
|
hashed_request_payload = Utils.hash(tmp, signature_algorithm)
|
|||
|
|
_request.body = tmp
|
|||
|
|
_request.headers["content-type"] = 'application/octet-stream'
|
|||
|
|
else:
|
|||
|
|
if not DaraCore.is_null(request.body):
|
|||
|
|
if params.req_body_type == 'byte':
|
|||
|
|
byte_obj = bytes(request.body)
|
|||
|
|
hashed_request_payload = Utils.hash(byte_obj, signature_algorithm)
|
|||
|
|
_request.body = byte_obj
|
|||
|
|
elif params.req_body_type == 'json':
|
|||
|
|
json_obj = DaraCore.to_json_string(request.body)
|
|||
|
|
hashed_request_payload = Utils.hash(json_obj.encode('utf-8'), signature_algorithm)
|
|||
|
|
_request.body = json_obj
|
|||
|
|
_request.headers["content-type"] = 'application/json; charset=utf-8'
|
|||
|
|
else:
|
|||
|
|
m = request.body
|
|||
|
|
form_obj = Utils.to_form(m)
|
|||
|
|
hashed_request_payload = Utils.hash(form_obj.encode('utf-8'), signature_algorithm)
|
|||
|
|
_request.body = form_obj
|
|||
|
|
_request.headers["content-type"] = 'application/x-www-form-urlencoded'
|
|||
|
|
|
|||
|
|
|
|||
|
|
_request.headers["x-acs-content-sha256"] = hashed_request_payload.hex()
|
|||
|
|
if params.auth_type != 'Anonymous':
|
|||
|
|
credential_model = self._credential.get_credential()
|
|||
|
|
if not DaraCore.is_null(credential_model.provider_name):
|
|||
|
|
_request.headers["x-acs-credentials-provider"] = credential_model.provider_name
|
|||
|
|
auth_type = credential_model.type
|
|||
|
|
if auth_type == 'bearer':
|
|||
|
|
bearer_token = credential_model.bearer_token
|
|||
|
|
_request.headers["x-acs-bearer-token"] = bearer_token
|
|||
|
|
elif auth_type == 'id_token':
|
|||
|
|
id_token = credential_model.security_token
|
|||
|
|
_request.headers["x-acs-zero-trust-idtoken"] = id_token
|
|||
|
|
else:
|
|||
|
|
access_key_id = credential_model.access_key_id
|
|||
|
|
access_key_secret = credential_model.access_key_secret
|
|||
|
|
security_token = credential_model.security_token
|
|||
|
|
if not DaraCore.is_null(security_token) and security_token != '':
|
|||
|
|
_request.headers["x-acs-accesskey-id"] = access_key_id
|
|||
|
|
_request.headers["x-acs-security-token"] = security_token
|
|||
|
|
_request.headers["Authorization"] = Utils.get_authorization(_request, signature_algorithm, hashed_request_payload.hex(), access_key_id, access_key_secret)
|
|||
|
|
|
|||
|
|
_last_request = _request
|
|||
|
|
_response = DaraCore.do_sse_action(_request, _runtime)
|
|||
|
|
_last_response = _response
|
|||
|
|
if (_response.status_code >= 400) and (_response.status_code < 600):
|
|||
|
|
err = {}
|
|||
|
|
if not DaraCore.is_null(_response.headers.get("content-type")) and _response.headers.get("content-type") == 'text/xml;charset=utf-8':
|
|||
|
|
_str = DaraStream.read_as_string(_response.body)
|
|||
|
|
resp_map = DaraXML.parse_xml(_str, None)
|
|||
|
|
err = resp_map.get("Error")
|
|||
|
|
else:
|
|||
|
|
_res = DaraStream.read_as_json(_response.body)
|
|||
|
|
err = _res
|
|||
|
|
|
|||
|
|
err["statusCode"] = _response.status_code
|
|||
|
|
raise DaraException({
|
|||
|
|
'code': f'{err.get("Code") or err.get("code")}',
|
|||
|
|
'message': f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {err.get("RequestId") or err.get("requestId")}',
|
|||
|
|
'data': err,
|
|||
|
|
'description': f'{err.get("Description") or err.get("description")}',
|
|||
|
|
'accessDeniedDetail': err.get("AccessDeniedDetail") or err.get("accessDeniedDetail")
|
|||
|
|
})
|
|||
|
|
events = DaraStream.read_as_sse(_response.body)
|
|||
|
|
for event in events:
|
|||
|
|
yield main_models.SSEResponse(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
headers = _response.headers,
|
|||
|
|
event = event
|
|||
|
|
)
|
|||
|
|
return
|
|||
|
|
except Exception as e:
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted,
|
|||
|
|
http_request = _last_request,
|
|||
|
|
http_response = _last_response,
|
|||
|
|
exception = e
|
|||
|
|
)
|
|||
|
|
continue
|
|||
|
|
raise UnretryableException(_context)
|
|||
|
|
|
|||
|
|
async def call_sseapi_async(
|
|||
|
|
self,
|
|||
|
|
params: open_api_util_models.Params,
|
|||
|
|
request: open_api_util_models.OpenApiRequest,
|
|||
|
|
runtime: RuntimeOptions,
|
|||
|
|
) -> AsyncGenerator[main_models.SSEResponse, None, None]:
|
|||
|
|
_runtime = {
|
|||
|
|
'key': runtime.key or self._key,
|
|||
|
|
'cert': runtime.cert or self._cert,
|
|||
|
|
'ca': runtime.ca or self._ca,
|
|||
|
|
'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
|
|||
|
|
'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
|
|||
|
|
'httpProxy': runtime.http_proxy or self._http_proxy,
|
|||
|
|
'httpsProxy': runtime.https_proxy or self._https_proxy,
|
|||
|
|
'noProxy': runtime.no_proxy or self._no_proxy,
|
|||
|
|
'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
|
|||
|
|
'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
|
|||
|
|
'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
|
|||
|
|
'retryOptions': self._retry_options,
|
|||
|
|
'ignoreSSL': runtime.ignore_ssl,
|
|||
|
|
'tlsMinVersion': self._tls_min_version,
|
|||
|
|
}
|
|||
|
|
_last_request = None
|
|||
|
|
_last_response = None
|
|||
|
|
_retries_attempted = 0
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted
|
|||
|
|
)
|
|||
|
|
while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
|
|||
|
|
if _retries_attempted > 0:
|
|||
|
|
_backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
|
|||
|
|
if _backoff_time > 0:
|
|||
|
|
DaraCore.sleep(_backoff_time)
|
|||
|
|
_retries_attempted = _retries_attempted + 1
|
|||
|
|
try:
|
|||
|
|
_request = DaraRequest()
|
|||
|
|
_request.protocol = self._protocol or params.protocol
|
|||
|
|
_request.method = params.method
|
|||
|
|
_request.pathname = params.pathname
|
|||
|
|
global_queries = {}
|
|||
|
|
global_headers = {}
|
|||
|
|
if not DaraCore.is_null(self._global_parameters):
|
|||
|
|
global_params = self._global_parameters
|
|||
|
|
if not DaraCore.is_null(global_params.queries):
|
|||
|
|
global_queries = global_params.queries
|
|||
|
|
if not DaraCore.is_null(global_params.headers):
|
|||
|
|
global_headers = global_params.headers
|
|||
|
|
extends_headers = {}
|
|||
|
|
extends_queries = {}
|
|||
|
|
if not DaraCore.is_null(runtime.extends_parameters):
|
|||
|
|
extends_parameters = runtime.extends_parameters
|
|||
|
|
if not DaraCore.is_null(extends_parameters.headers):
|
|||
|
|
extends_headers = extends_parameters.headers
|
|||
|
|
if not DaraCore.is_null(extends_parameters.queries):
|
|||
|
|
extends_queries = extends_parameters.queries
|
|||
|
|
_request.query = DaraCore.merge({}, global_queries, extends_queries, request.query)
|
|||
|
|
# endpoint is setted in product client
|
|||
|
|
_request.headers = DaraCore.merge({
|
|||
|
|
'host': self._endpoint,
|
|||
|
|
'x-acs-version': params.version,
|
|||
|
|
'x-acs-action': params.action,
|
|||
|
|
'user-agent': Utils.get_user_agent(self._user_agent),
|
|||
|
|
'x-acs-date': Utils.get_timestamp(),
|
|||
|
|
'x-acs-signature-nonce': Utils.get_nonce(),
|
|||
|
|
'accept': 'application/json',
|
|||
|
|
}, extends_headers, global_headers, request.headers)
|
|||
|
|
if params.style == 'RPC':
|
|||
|
|
headers = self.get_rpc_headers()
|
|||
|
|
if not DaraCore.is_null(headers):
|
|||
|
|
_request.headers = DaraCore.merge({}, _request.headers, headers)
|
|||
|
|
signature_algorithm = self._signature_algorithm or 'ACS3-HMAC-SHA256'
|
|||
|
|
hashed_request_payload = Utils.hash(DaraBytes.from_('', 'utf-8'), signature_algorithm)
|
|||
|
|
if not DaraCore.is_null(request.stream):
|
|||
|
|
tmp = await DaraStream.read_as_bytes_async(request.stream)
|
|||
|
|
hashed_request_payload = Utils.hash(tmp, signature_algorithm)
|
|||
|
|
_request.body = tmp
|
|||
|
|
_request.headers["content-type"] = 'application/octet-stream'
|
|||
|
|
else:
|
|||
|
|
if not DaraCore.is_null(request.body):
|
|||
|
|
if params.req_body_type == 'byte':
|
|||
|
|
byte_obj = bytes(request.body)
|
|||
|
|
hashed_request_payload = Utils.hash(byte_obj, signature_algorithm)
|
|||
|
|
_request.body = byte_obj
|
|||
|
|
elif params.req_body_type == 'json':
|
|||
|
|
json_obj = DaraCore.to_json_string(request.body)
|
|||
|
|
hashed_request_payload = Utils.hash(json_obj.encode('utf-8'), signature_algorithm)
|
|||
|
|
_request.body = json_obj
|
|||
|
|
_request.headers["content-type"] = 'application/json; charset=utf-8'
|
|||
|
|
else:
|
|||
|
|
m = request.body
|
|||
|
|
form_obj = Utils.to_form(m)
|
|||
|
|
hashed_request_payload = Utils.hash(form_obj.encode('utf-8'), signature_algorithm)
|
|||
|
|
_request.body = form_obj
|
|||
|
|
_request.headers["content-type"] = 'application/x-www-form-urlencoded'
|
|||
|
|
|
|||
|
|
|
|||
|
|
_request.headers["x-acs-content-sha256"] = hashed_request_payload.hex()
|
|||
|
|
if params.auth_type != 'Anonymous':
|
|||
|
|
credential_model = await self._credential.get_credential_async()
|
|||
|
|
if not DaraCore.is_null(credential_model.provider_name):
|
|||
|
|
_request.headers["x-acs-credentials-provider"] = credential_model.provider_name
|
|||
|
|
auth_type = credential_model.type
|
|||
|
|
if auth_type == 'bearer':
|
|||
|
|
bearer_token = credential_model.bearer_token
|
|||
|
|
_request.headers["x-acs-bearer-token"] = bearer_token
|
|||
|
|
elif auth_type == 'id_token':
|
|||
|
|
id_token = credential_model.security_token
|
|||
|
|
_request.headers["x-acs-zero-trust-idtoken"] = id_token
|
|||
|
|
else:
|
|||
|
|
access_key_id = credential_model.access_key_id
|
|||
|
|
access_key_secret = credential_model.access_key_secret
|
|||
|
|
security_token = credential_model.security_token
|
|||
|
|
if not DaraCore.is_null(security_token) and security_token != '':
|
|||
|
|
_request.headers["x-acs-accesskey-id"] = access_key_id
|
|||
|
|
_request.headers["x-acs-security-token"] = security_token
|
|||
|
|
_request.headers["Authorization"] = Utils.get_authorization(_request, signature_algorithm, hashed_request_payload.hex(), access_key_id, access_key_secret)
|
|||
|
|
|
|||
|
|
_last_request = _request
|
|||
|
|
_response = await DaraCore.async_do_sse_action(_request, _runtime)
|
|||
|
|
_last_response = _response
|
|||
|
|
if (_response.status_code >= 400) and (_response.status_code < 600):
|
|||
|
|
err = {}
|
|||
|
|
if not DaraCore.is_null(_response.headers.get("content-type")) and _response.headers.get("content-type") == 'text/xml;charset=utf-8':
|
|||
|
|
_str = await DaraStream.read_as_string_async(_response.body)
|
|||
|
|
resp_map = DaraXML.parse_xml(_str, None)
|
|||
|
|
err = resp_map.get("Error")
|
|||
|
|
else:
|
|||
|
|
_res = await DaraStream.read_as_json_async(_response.body)
|
|||
|
|
err = _res
|
|||
|
|
|
|||
|
|
err["statusCode"] = _response.status_code
|
|||
|
|
raise DaraException({
|
|||
|
|
'code': f'{err.get("Code") or err.get("code")}',
|
|||
|
|
'message': f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {err.get("RequestId") or err.get("requestId")}',
|
|||
|
|
'data': err,
|
|||
|
|
'description': f'{err.get("Description") or err.get("description")}',
|
|||
|
|
'accessDeniedDetail': err.get("AccessDeniedDetail") or err.get("accessDeniedDetail")
|
|||
|
|
})
|
|||
|
|
events = DaraStream.read_as_sse_async(_response.body)
|
|||
|
|
async for event in events:
|
|||
|
|
yield main_models.SSEResponse(
|
|||
|
|
status_code = _response.status_code,
|
|||
|
|
headers = _response.headers,
|
|||
|
|
event = event
|
|||
|
|
)
|
|||
|
|
return
|
|||
|
|
except Exception as e:
|
|||
|
|
_context = RetryPolicyContext(
|
|||
|
|
retries_attempted= _retries_attempted,
|
|||
|
|
http_request = _last_request,
|
|||
|
|
http_response = _last_response,
|
|||
|
|
exception = e
|
|||
|
|
)
|
|||
|
|
continue
|
|||
|
|
raise UnretryableException(_context)
|
|||
|
|
|
|||
|
|
def call_api(
|
|||
|
|
self,
|
|||
|
|
params: open_api_util_models.Params,
|
|||
|
|
request: open_api_util_models.OpenApiRequest,
|
|||
|
|
runtime: RuntimeOptions,
|
|||
|
|
) -> dict:
|
|||
|
|
if DaraCore.is_null(params):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
code = 'ParameterMissing',
|
|||
|
|
message = '\'params\' can not be unset'
|
|||
|
|
)
|
|||
|
|
if DaraCore.is_null(self._signature_version) or self._signature_version != 'v4':
|
|||
|
|
if DaraCore.is_null(self._signature_algorithm) or self._signature_algorithm != 'v2':
|
|||
|
|
return self.do_request(params, request, runtime)
|
|||
|
|
elif (params.style == 'ROA') and (params.req_body_type == 'json'):
|
|||
|
|
return self.do_roarequest(params.action, params.version, params.protocol, params.method, params.auth_type, params.pathname, params.body_type, request, runtime)
|
|||
|
|
elif params.style == 'ROA':
|
|||
|
|
return self.do_roarequest_with_form(params.action, params.version, params.protocol, params.method, params.auth_type, params.pathname, params.body_type, request, runtime)
|
|||
|
|
else:
|
|||
|
|
return self.do_rpcrequest(params.action, params.version, params.protocol, params.method, params.auth_type, params.body_type, request, runtime)
|
|||
|
|
|
|||
|
|
else:
|
|||
|
|
return self.execute(params, request, runtime)
|
|||
|
|
|
|||
|
|
|
|||
|
|
async def call_api_async(
|
|||
|
|
self,
|
|||
|
|
params: open_api_util_models.Params,
|
|||
|
|
request: open_api_util_models.OpenApiRequest,
|
|||
|
|
runtime: RuntimeOptions,
|
|||
|
|
) -> dict:
|
|||
|
|
if DaraCore.is_null(params):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
code = 'ParameterMissing',
|
|||
|
|
message = '\'params\' can not be unset'
|
|||
|
|
)
|
|||
|
|
if DaraCore.is_null(self._signature_version) or self._signature_version != 'v4':
|
|||
|
|
if DaraCore.is_null(self._signature_algorithm) or self._signature_algorithm != 'v2':
|
|||
|
|
return await self.do_request_async(params, request, runtime)
|
|||
|
|
elif (params.style == 'ROA') and (params.req_body_type == 'json'):
|
|||
|
|
return await self.do_roarequest_async(params.action, params.version, params.protocol, params.method, params.auth_type, params.pathname, params.body_type, request, runtime)
|
|||
|
|
elif params.style == 'ROA':
|
|||
|
|
return await self.do_roarequest_with_form_async(params.action, params.version, params.protocol, params.method, params.auth_type, params.pathname, params.body_type, request, runtime)
|
|||
|
|
else:
|
|||
|
|
return await self.do_rpcrequest_async(params.action, params.version, params.protocol, params.method, params.auth_type, params.body_type, request, runtime)
|
|||
|
|
|
|||
|
|
else:
|
|||
|
|
return await self.execute_async(params, request, runtime)
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_access_key_id(self) -> str:
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
return ''
|
|||
|
|
access_key_id = self._credential.get_access_key_id()
|
|||
|
|
return access_key_id
|
|||
|
|
|
|||
|
|
async def get_access_key_id_async(self) -> str:
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
return ''
|
|||
|
|
access_key_id = await self._credential.get_access_key_id_async()
|
|||
|
|
return access_key_id
|
|||
|
|
|
|||
|
|
def get_access_key_secret(self) -> str:
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
return ''
|
|||
|
|
secret = self._credential.get_access_key_secret()
|
|||
|
|
return secret
|
|||
|
|
|
|||
|
|
async def get_access_key_secret_async(self) -> str:
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
return ''
|
|||
|
|
secret = await self._credential.get_access_key_secret_async()
|
|||
|
|
return secret
|
|||
|
|
|
|||
|
|
def get_security_token(self) -> str:
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
return ''
|
|||
|
|
token = self._credential.get_security_token()
|
|||
|
|
return token
|
|||
|
|
|
|||
|
|
async def get_security_token_async(self) -> str:
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
return ''
|
|||
|
|
token = await self._credential.get_security_token_async()
|
|||
|
|
return token
|
|||
|
|
|
|||
|
|
def get_bearer_token(self) -> str:
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
return ''
|
|||
|
|
token = self._credential.get_bearer_token()
|
|||
|
|
return token
|
|||
|
|
|
|||
|
|
async def get_bearer_token_async(self) -> str:
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
return ''
|
|||
|
|
token = self._credential.get_bearer_token()
|
|||
|
|
return token
|
|||
|
|
|
|||
|
|
def get_type(self) -> str:
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
return ''
|
|||
|
|
auth_type = self._credential.get_type()
|
|||
|
|
return auth_type
|
|||
|
|
|
|||
|
|
async def get_type_async(self) -> str:
|
|||
|
|
if DaraCore.is_null(self._credential):
|
|||
|
|
return ''
|
|||
|
|
auth_type = self._credential.get_type()
|
|||
|
|
return auth_type
|
|||
|
|
|
|||
|
|
def check_config(
|
|||
|
|
self,
|
|||
|
|
config: open_api_util_models.Config,
|
|||
|
|
) -> None:
|
|||
|
|
if DaraCore.is_null(self._endpoint_rule) and DaraCore.is_null(config.endpoint):
|
|||
|
|
raise main_exceptions.ClientException(
|
|||
|
|
code = 'ParameterMissing',
|
|||
|
|
message = '\'config.endpoint\' can not be empty'
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
def set_gateway_client(
|
|||
|
|
self,
|
|||
|
|
spi: SPIClient,
|
|||
|
|
) -> None:
|
|||
|
|
self._spi = spi
|
|||
|
|
|
|||
|
|
def set_rpc_headers(
|
|||
|
|
self,
|
|||
|
|
headers: Dict[str, str],
|
|||
|
|
) -> None:
|
|||
|
|
self._headers = headers
|
|||
|
|
|
|||
|
|
def get_rpc_headers(self) -> Dict[str, str]:
|
|||
|
|
headers = self._headers
|
|||
|
|
self._headers = None
|
|||
|
|
return headers
|
|||
|
|
|
|||
|
|
def default_any(
|
|||
|
|
input_value: Any,
|
|||
|
|
default_value: Any,
|
|||
|
|
) -> Any:
|
|||
|
|
if DaraCore.is_null(input_value):
|
|||
|
|
return default_value
|
|||
|
|
return input_value
|
|||
|
|
|
|||
|
|
def get_access_denied_detail(
|
|||
|
|
self,
|
|||
|
|
err: Dict[str, Any],
|
|||
|
|
) -> Dict[str, Any]:
|
|||
|
|
access_denied_detail = None
|
|||
|
|
if not DaraCore.is_null(err.get("AccessDeniedDetail")):
|
|||
|
|
detail_1 = err.get("AccessDeniedDetail")
|
|||
|
|
access_denied_detail = detail_1
|
|||
|
|
elif not DaraCore.is_null(err.get("accessDeniedDetail")):
|
|||
|
|
detail_2 = err.get("accessDeniedDetail")
|
|||
|
|
access_denied_detail = detail_2
|
|||
|
|
return access_denied_detail
|