client.py 136 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599
  1. # -*- coding: utf-8 -*-
  2. # This file is auto-generated, don't edit it. Thanks.
  3. from __future__ import annotations
  4. import os
  5. from typing import Dict, Generator, AsyncGenerator, Any
  6. from alibabacloud_credentials import models as credential_models
  7. from alibabacloud_credentials.client import Client as CredentialClient
  8. from alibabacloud_gateway_spi import models as spi_models
  9. from alibabacloud_gateway_spi.client import Client as SPIClient
  10. from alibabacloud_tea_openapi import exceptions as main_exceptions
  11. from alibabacloud_tea_openapi import models as main_models
  12. from alibabacloud_tea_openapi import utils_models as open_api_util_models
  13. from alibabacloud_tea_openapi.utils import Utils
  14. from darabonba.core import DaraCore as DaraCore
  15. from darabonba.core import DaraCore
  16. from darabonba.exceptions import DaraException, UnretryableException
  17. from darabonba.policy.retry import RetryOptions, RetryPolicyContext
  18. from darabonba.request import DaraRequest
  19. from darabonba.runtime import RuntimeOptions
  20. from darabonba.utils.bytes import Bytes as DaraBytes
  21. from darabonba.utils.form import Form as DaraForm
  22. from darabonba.utils.stream import Stream as DaraStream
  23. from darabonba.utils.xml import XML as DaraXML
  24. """
  25. * @remarks
  26. * This is for OpenApi SDK
  27. """
  28. class Client:
  29. _endpoint: str = None
  30. _region_id: str = None
  31. _protocol: str = None
  32. _method: str = None
  33. _user_agent: str = None
  34. _endpoint_rule: str = None
  35. _endpoint_map: Dict[str, str] = None
  36. _suffix: str = None
  37. _read_timeout: int = None
  38. _connect_timeout: int = None
  39. _http_proxy: str = None
  40. _https_proxy: str = None
  41. _socks_5proxy: str = None
  42. _socks_5net_work: str = None
  43. _no_proxy: str = None
  44. _network: str = None
  45. _product_id: str = None
  46. _max_idle_conns: int = None
  47. _endpoint_type: str = None
  48. _open_platform_endpoint: str = None
  49. _credential: CredentialClient = None
  50. _signature_version: str = None
  51. _signature_algorithm: str = None
  52. _headers: Dict[str, str] = None
  53. _spi: SPIClient = None
  54. _global_parameters: open_api_util_models.GlobalParameters = None
  55. _key: str = None
  56. _cert: str = None
  57. _ca: str = None
  58. _disable_http_2: bool = None
  59. _retry_options: RetryOptions = None
  60. _tls_min_version: str = None
  61. _attribute_map: spi_models.AttributeMap = None
  62. def __init__(
  63. self,
  64. config: open_api_util_models.Config,
  65. ):
  66. if DaraCore.is_null(config):
  67. raise main_exceptions.ClientException(
  68. code = 'ParameterMissing',
  69. message = '\'config\' can not be unset'
  70. )
  71. 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 != ''):
  72. if not DaraCore.is_null(config.security_token) and config.security_token != '':
  73. config.type = 'sts'
  74. else:
  75. config.type = 'access_key'
  76. credential_config = credential_models.Config(
  77. access_key_id = config.access_key_id,
  78. type = config.type,
  79. access_key_secret = config.access_key_secret
  80. )
  81. credential_config.security_token = config.security_token
  82. self._credential = CredentialClient(credential_config)
  83. elif not DaraCore.is_null(config.bearer_token) and config.bearer_token != '':
  84. cc = credential_models.Config(
  85. type = 'bearer',
  86. bearer_token = config.bearer_token
  87. )
  88. self._credential = CredentialClient(cc)
  89. elif not DaraCore.is_null(config.credential):
  90. self._credential = config.credential
  91. if DaraCore.is_null(config.user_agent):
  92. self._user_agent = os.environ.get('ALIBABA_CLOUD_USER_AGENT')
  93. else:
  94. self._user_agent = config.user_agent
  95. self._endpoint = config.endpoint
  96. self._endpoint_type = config.endpoint_type
  97. self._network = config.network
  98. self._suffix = config.suffix
  99. self._protocol = config.protocol
  100. self._method = config.method
  101. self._region_id = config.region_id
  102. self._read_timeout = config.read_timeout
  103. self._connect_timeout = config.connect_timeout
  104. self._http_proxy = config.http_proxy
  105. self._https_proxy = config.https_proxy
  106. self._no_proxy = config.no_proxy
  107. self._socks_5proxy = config.socks_5proxy
  108. self._socks_5net_work = config.socks_5net_work
  109. self._max_idle_conns = config.max_idle_conns
  110. self._signature_version = config.signature_version
  111. self._signature_algorithm = config.signature_algorithm
  112. self._global_parameters = config.global_parameters
  113. self._key = config.key
  114. self._cert = config.cert
  115. self._ca = config.ca
  116. self._disable_http_2 = config.disable_http_2
  117. self._retry_options = config.retry_options
  118. self._tls_min_version = config.tls_min_version
  119. """
  120. * @remarks
  121. * Encapsulate the request and invoke the network
  122. *
  123. * @param action - api name
  124. * @param version - product version
  125. * @param protocol - http or https
  126. * @param method - e.g. GET
  127. * @param authType - authorization type e.g. AK
  128. * @param bodyType - response body type e.g. String
  129. * @param request - object of OpenApiRequest
  130. * @param runtime - which controls some details of call api, such as retry times
  131. * @returns the response
  132. """
  133. def do_rpcrequest(
  134. self,
  135. action: str,
  136. version: str,
  137. protocol: str,
  138. method: str,
  139. auth_type: str,
  140. body_type: str,
  141. request: open_api_util_models.OpenApiRequest,
  142. runtime: RuntimeOptions,
  143. ) -> dict:
  144. _runtime = {
  145. 'key': runtime.key or self._key,
  146. 'cert': runtime.cert or self._cert,
  147. 'ca': runtime.ca or self._ca,
  148. 'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
  149. 'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
  150. 'httpProxy': runtime.http_proxy or self._http_proxy,
  151. 'httpsProxy': runtime.https_proxy or self._https_proxy,
  152. 'noProxy': runtime.no_proxy or self._no_proxy,
  153. 'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
  154. 'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
  155. 'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
  156. 'retryOptions': self._retry_options,
  157. 'ignoreSSL': runtime.ignore_ssl,
  158. 'tlsMinVersion': self._tls_min_version,
  159. }
  160. _last_request = None
  161. _last_response = None
  162. _retries_attempted = 0
  163. _context = RetryPolicyContext(
  164. retries_attempted= _retries_attempted
  165. )
  166. while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
  167. if _retries_attempted > 0:
  168. _backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
  169. if _backoff_time > 0:
  170. DaraCore.sleep(_backoff_time)
  171. _retries_attempted = _retries_attempted + 1
  172. try:
  173. _request = DaraRequest()
  174. _request.protocol = self._protocol or protocol
  175. _request.method = method
  176. _request.pathname = '/'
  177. global_queries = {}
  178. global_headers = {}
  179. if not DaraCore.is_null(self._global_parameters):
  180. global_params = self._global_parameters
  181. if not DaraCore.is_null(global_params.queries):
  182. global_queries = global_params.queries
  183. if not DaraCore.is_null(global_params.headers):
  184. global_headers = global_params.headers
  185. extends_headers = {}
  186. extends_queries = {}
  187. if not DaraCore.is_null(runtime.extends_parameters):
  188. extends_parameters = runtime.extends_parameters
  189. if not DaraCore.is_null(extends_parameters.headers):
  190. extends_headers = extends_parameters.headers
  191. if not DaraCore.is_null(extends_parameters.queries):
  192. extends_queries = extends_parameters.queries
  193. _request.query = DaraCore.merge({
  194. 'Action': action,
  195. 'Format': 'json',
  196. 'Version': version,
  197. 'Timestamp': Utils.get_timestamp(),
  198. 'SignatureNonce': Utils.get_nonce(),
  199. }, global_queries, extends_queries, request.query)
  200. headers = self.get_rpc_headers()
  201. if DaraCore.is_null(headers):
  202. # endpoint is setted in product client
  203. _request.headers = DaraCore.merge({
  204. 'host': self._endpoint,
  205. 'x-acs-version': version,
  206. 'x-acs-action': action,
  207. 'user-agent': Utils.get_user_agent(self._user_agent),
  208. }, global_headers, extends_headers, request.headers)
  209. else:
  210. _request.headers = DaraCore.merge({
  211. 'host': self._endpoint,
  212. 'x-acs-version': version,
  213. 'x-acs-action': action,
  214. 'user-agent': Utils.get_user_agent(self._user_agent),
  215. }, global_headers, extends_headers, request.headers, headers)
  216. if not DaraCore.is_null(request.body):
  217. m = request.body
  218. tmp = Utils.query(m)
  219. _request.body = DaraForm.to_form_string(tmp)
  220. _request.headers["content-type"] = 'application/x-www-form-urlencoded'
  221. if auth_type != 'Anonymous':
  222. if DaraCore.is_null(self._credential):
  223. raise main_exceptions.ClientException(
  224. code = f'InvalidCredentials',
  225. 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.'
  226. )
  227. credential_model = self._credential.get_credential()
  228. if not DaraCore.is_null(credential_model.provider_name):
  229. _request.headers["x-acs-credentials-provider"] = credential_model.provider_name
  230. credential_type = credential_model.type
  231. if credential_type == 'bearer':
  232. bearer_token = credential_model.bearer_token
  233. _request.query["BearerToken"] = bearer_token
  234. _request.query["SignatureType"] = 'BEARERTOKEN'
  235. elif credential_type == 'id_token':
  236. id_token = credential_model.security_token
  237. _request.headers["x-acs-zero-trust-idtoken"] = id_token
  238. else:
  239. access_key_id = credential_model.access_key_id
  240. access_key_secret = credential_model.access_key_secret
  241. security_token = credential_model.security_token
  242. if not DaraCore.is_null(security_token) and security_token != '':
  243. _request.query["SecurityToken"] = security_token
  244. _request.query["SignatureMethod"] = 'HMAC-SHA1'
  245. _request.query["SignatureVersion"] = '1.0'
  246. _request.query["AccessKeyId"] = access_key_id
  247. t = None
  248. if not DaraCore.is_null(request.body):
  249. t = request.body
  250. signed_param = DaraCore.merge({}, _request.query, Utils.query(t))
  251. _request.query["Signature"] = Utils.get_rpcsignature(signed_param, _request.method, access_key_secret)
  252. _last_request = _request
  253. _response = DaraCore.do_action(_request, _runtime)
  254. _last_response = _response
  255. if (_response.status_code >= 400) and (_response.status_code < 600):
  256. _res = DaraStream.read_as_json(_response.body)
  257. err = _res
  258. request_id = err.get("RequestId") or err.get("requestId")
  259. code = err.get("Code") or err.get("code")
  260. if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
  261. raise main_exceptions.ThrottlingException(
  262. status_code = _response.status_code,
  263. code = f'{code}',
  264. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  265. description = f'{err.get("Description") or err.get("description")}',
  266. retry_after = Utils.get_throttling_time_left(_response.headers),
  267. data = err,
  268. request_id = f'{request_id}'
  269. )
  270. elif (_response.status_code >= 400) and (_response.status_code < 500):
  271. raise main_exceptions.ClientException(
  272. status_code = _response.status_code,
  273. code = f'{code}',
  274. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  275. description = f'{err.get("Description") or err.get("description")}',
  276. data = err,
  277. access_denied_detail = self.get_access_denied_detail(err),
  278. request_id = f'{request_id}'
  279. )
  280. else:
  281. raise main_exceptions.ServerException(
  282. status_code = _response.status_code,
  283. code = f'{code}',
  284. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  285. description = f'{err.get("Description") or err.get("description")}',
  286. data = err,
  287. request_id = f'{request_id}'
  288. )
  289. if body_type == 'binary':
  290. resp = {
  291. 'body': _response.body,
  292. 'headers': _response.headers,
  293. 'statusCode': _response.status_code
  294. }
  295. return resp
  296. elif body_type == 'byte':
  297. byt = DaraStream.read_as_bytes(_response.body)
  298. return {
  299. 'body': byt,
  300. 'headers': _response.headers,
  301. 'statusCode': _response.status_code
  302. }
  303. elif body_type == 'string':
  304. _str = DaraStream.read_as_string(_response.body)
  305. return {
  306. 'body': _str,
  307. 'headers': _response.headers,
  308. 'statusCode': _response.status_code
  309. }
  310. elif body_type == 'json':
  311. obj = DaraStream.read_as_json(_response.body)
  312. res = obj
  313. return {
  314. 'body': res,
  315. 'headers': _response.headers,
  316. 'statusCode': _response.status_code
  317. }
  318. elif body_type == 'array':
  319. arr = DaraStream.read_as_json(_response.body)
  320. return {
  321. 'body': arr,
  322. 'headers': _response.headers,
  323. 'statusCode': _response.status_code
  324. }
  325. else:
  326. return {
  327. 'headers': _response.headers,
  328. 'statusCode': _response.status_code
  329. }
  330. except Exception as e:
  331. _context = RetryPolicyContext(
  332. retries_attempted= _retries_attempted,
  333. http_request = _last_request,
  334. http_response = _last_response,
  335. exception = e
  336. )
  337. continue
  338. raise UnretryableException(_context)
  339. async def do_rpcrequest_async(
  340. self,
  341. action: str,
  342. version: str,
  343. protocol: str,
  344. method: str,
  345. auth_type: str,
  346. body_type: str,
  347. request: open_api_util_models.OpenApiRequest,
  348. runtime: RuntimeOptions,
  349. ) -> dict:
  350. _runtime = {
  351. 'key': runtime.key or self._key,
  352. 'cert': runtime.cert or self._cert,
  353. 'ca': runtime.ca or self._ca,
  354. 'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
  355. 'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
  356. 'httpProxy': runtime.http_proxy or self._http_proxy,
  357. 'httpsProxy': runtime.https_proxy or self._https_proxy,
  358. 'noProxy': runtime.no_proxy or self._no_proxy,
  359. 'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
  360. 'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
  361. 'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
  362. 'retryOptions': self._retry_options,
  363. 'ignoreSSL': runtime.ignore_ssl,
  364. 'tlsMinVersion': self._tls_min_version,
  365. }
  366. _last_request = None
  367. _last_response = None
  368. _retries_attempted = 0
  369. _context = RetryPolicyContext(
  370. retries_attempted= _retries_attempted
  371. )
  372. while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
  373. if _retries_attempted > 0:
  374. _backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
  375. if _backoff_time > 0:
  376. DaraCore.sleep(_backoff_time)
  377. _retries_attempted = _retries_attempted + 1
  378. try:
  379. _request = DaraRequest()
  380. _request.protocol = self._protocol or protocol
  381. _request.method = method
  382. _request.pathname = '/'
  383. global_queries = {}
  384. global_headers = {}
  385. if not DaraCore.is_null(self._global_parameters):
  386. global_params = self._global_parameters
  387. if not DaraCore.is_null(global_params.queries):
  388. global_queries = global_params.queries
  389. if not DaraCore.is_null(global_params.headers):
  390. global_headers = global_params.headers
  391. extends_headers = {}
  392. extends_queries = {}
  393. if not DaraCore.is_null(runtime.extends_parameters):
  394. extends_parameters = runtime.extends_parameters
  395. if not DaraCore.is_null(extends_parameters.headers):
  396. extends_headers = extends_parameters.headers
  397. if not DaraCore.is_null(extends_parameters.queries):
  398. extends_queries = extends_parameters.queries
  399. _request.query = DaraCore.merge({
  400. 'Action': action,
  401. 'Format': 'json',
  402. 'Version': version,
  403. 'Timestamp': Utils.get_timestamp(),
  404. 'SignatureNonce': Utils.get_nonce(),
  405. }, global_queries, extends_queries, request.query)
  406. headers = self.get_rpc_headers()
  407. if DaraCore.is_null(headers):
  408. # endpoint is setted in product client
  409. _request.headers = DaraCore.merge({
  410. 'host': self._endpoint,
  411. 'x-acs-version': version,
  412. 'x-acs-action': action,
  413. 'user-agent': Utils.get_user_agent(self._user_agent),
  414. }, global_headers, extends_headers, request.headers)
  415. else:
  416. _request.headers = DaraCore.merge({
  417. 'host': self._endpoint,
  418. 'x-acs-version': version,
  419. 'x-acs-action': action,
  420. 'user-agent': Utils.get_user_agent(self._user_agent),
  421. }, global_headers, extends_headers, request.headers, headers)
  422. if not DaraCore.is_null(request.body):
  423. m = request.body
  424. tmp = Utils.query(m)
  425. _request.body = DaraForm.to_form_string(tmp)
  426. _request.headers["content-type"] = 'application/x-www-form-urlencoded'
  427. if auth_type != 'Anonymous':
  428. if DaraCore.is_null(self._credential):
  429. raise main_exceptions.ClientException(
  430. code = f'InvalidCredentials',
  431. 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.'
  432. )
  433. credential_model = await self._credential.get_credential_async()
  434. if not DaraCore.is_null(credential_model.provider_name):
  435. _request.headers["x-acs-credentials-provider"] = credential_model.provider_name
  436. credential_type = credential_model.type
  437. if credential_type == 'bearer':
  438. bearer_token = credential_model.bearer_token
  439. _request.query["BearerToken"] = bearer_token
  440. _request.query["SignatureType"] = 'BEARERTOKEN'
  441. elif credential_type == 'id_token':
  442. id_token = credential_model.security_token
  443. _request.headers["x-acs-zero-trust-idtoken"] = id_token
  444. else:
  445. access_key_id = credential_model.access_key_id
  446. access_key_secret = credential_model.access_key_secret
  447. security_token = credential_model.security_token
  448. if not DaraCore.is_null(security_token) and security_token != '':
  449. _request.query["SecurityToken"] = security_token
  450. _request.query["SignatureMethod"] = 'HMAC-SHA1'
  451. _request.query["SignatureVersion"] = '1.0'
  452. _request.query["AccessKeyId"] = access_key_id
  453. t = None
  454. if not DaraCore.is_null(request.body):
  455. t = request.body
  456. signed_param = DaraCore.merge({}, _request.query, Utils.query(t))
  457. _request.query["Signature"] = Utils.get_rpcsignature(signed_param, _request.method, access_key_secret)
  458. _last_request = _request
  459. _response = await DaraCore.async_do_action(_request, _runtime)
  460. _last_response = _response
  461. if (_response.status_code >= 400) and (_response.status_code < 600):
  462. _res = await DaraStream.read_as_json_async(_response.body)
  463. err = _res
  464. request_id = err.get("RequestId") or err.get("requestId")
  465. code = err.get("Code") or err.get("code")
  466. if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
  467. raise main_exceptions.ThrottlingException(
  468. status_code = _response.status_code,
  469. code = f'{code}',
  470. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  471. description = f'{err.get("Description") or err.get("description")}',
  472. retry_after = Utils.get_throttling_time_left(_response.headers),
  473. data = err,
  474. request_id = f'{request_id}'
  475. )
  476. elif (_response.status_code >= 400) and (_response.status_code < 500):
  477. raise main_exceptions.ClientException(
  478. status_code = _response.status_code,
  479. code = f'{code}',
  480. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  481. description = f'{err.get("Description") or err.get("description")}',
  482. data = err,
  483. access_denied_detail = self.get_access_denied_detail(err),
  484. request_id = f'{request_id}'
  485. )
  486. else:
  487. raise main_exceptions.ServerException(
  488. status_code = _response.status_code,
  489. code = f'{code}',
  490. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  491. description = f'{err.get("Description") or err.get("description")}',
  492. data = err,
  493. request_id = f'{request_id}'
  494. )
  495. if body_type == 'binary':
  496. resp = {
  497. 'body': _response.body,
  498. 'headers': _response.headers,
  499. 'statusCode': _response.status_code
  500. }
  501. return resp
  502. elif body_type == 'byte':
  503. byt = await DaraStream.read_as_bytes_async(_response.body)
  504. return {
  505. 'body': byt,
  506. 'headers': _response.headers,
  507. 'statusCode': _response.status_code
  508. }
  509. elif body_type == 'string':
  510. _str = await DaraStream.read_as_string_async(_response.body)
  511. return {
  512. 'body': _str,
  513. 'headers': _response.headers,
  514. 'statusCode': _response.status_code
  515. }
  516. elif body_type == 'json':
  517. obj = await DaraStream.read_as_json_async(_response.body)
  518. res = obj
  519. return {
  520. 'body': res,
  521. 'headers': _response.headers,
  522. 'statusCode': _response.status_code
  523. }
  524. elif body_type == 'array':
  525. arr = await DaraStream.read_as_json_async(_response.body)
  526. return {
  527. 'body': arr,
  528. 'headers': _response.headers,
  529. 'statusCode': _response.status_code
  530. }
  531. else:
  532. return {
  533. 'headers': _response.headers,
  534. 'statusCode': _response.status_code
  535. }
  536. except Exception as e:
  537. _context = RetryPolicyContext(
  538. retries_attempted= _retries_attempted,
  539. http_request = _last_request,
  540. http_response = _last_response,
  541. exception = e
  542. )
  543. continue
  544. raise UnretryableException(_context)
  545. """
  546. * @remarks
  547. * Encapsulate the request and invoke the network
  548. *
  549. * @param action - api name
  550. * @param version - product version
  551. * @param protocol - http or https
  552. * @param method - e.g. GET
  553. * @param authType - authorization type e.g. AK
  554. * @param pathname - pathname of every api
  555. * @param bodyType - response body type e.g. String
  556. * @param request - object of OpenApiRequest
  557. * @param runtime - which controls some details of call api, such as retry times
  558. * @returns the response
  559. """
  560. def do_roarequest(
  561. self,
  562. action: str,
  563. version: str,
  564. protocol: str,
  565. method: str,
  566. auth_type: str,
  567. pathname: str,
  568. body_type: str,
  569. request: open_api_util_models.OpenApiRequest,
  570. runtime: RuntimeOptions,
  571. ) -> dict:
  572. _runtime = {
  573. 'key': runtime.key or self._key,
  574. 'cert': runtime.cert or self._cert,
  575. 'ca': runtime.ca or self._ca,
  576. 'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
  577. 'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
  578. 'httpProxy': runtime.http_proxy or self._http_proxy,
  579. 'httpsProxy': runtime.https_proxy or self._https_proxy,
  580. 'noProxy': runtime.no_proxy or self._no_proxy,
  581. 'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
  582. 'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
  583. 'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
  584. 'retryOptions': self._retry_options,
  585. 'ignoreSSL': runtime.ignore_ssl,
  586. 'tlsMinVersion': self._tls_min_version,
  587. }
  588. _last_request = None
  589. _last_response = None
  590. _retries_attempted = 0
  591. _context = RetryPolicyContext(
  592. retries_attempted= _retries_attempted
  593. )
  594. while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
  595. if _retries_attempted > 0:
  596. _backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
  597. if _backoff_time > 0:
  598. DaraCore.sleep(_backoff_time)
  599. _retries_attempted = _retries_attempted + 1
  600. try:
  601. _request = DaraRequest()
  602. _request.protocol = self._protocol or protocol
  603. _request.method = method
  604. _request.pathname = pathname
  605. global_queries = {}
  606. global_headers = {}
  607. if not DaraCore.is_null(self._global_parameters):
  608. global_params = self._global_parameters
  609. if not DaraCore.is_null(global_params.queries):
  610. global_queries = global_params.queries
  611. if not DaraCore.is_null(global_params.headers):
  612. global_headers = global_params.headers
  613. extends_headers = {}
  614. extends_queries = {}
  615. if not DaraCore.is_null(runtime.extends_parameters):
  616. extends_parameters = runtime.extends_parameters
  617. if not DaraCore.is_null(extends_parameters.headers):
  618. extends_headers = extends_parameters.headers
  619. if not DaraCore.is_null(extends_parameters.queries):
  620. extends_queries = extends_parameters.queries
  621. _request.headers = DaraCore.merge({
  622. 'date': Utils.get_date_utcstring(),
  623. 'host': self._endpoint,
  624. 'accept': 'application/json',
  625. 'x-acs-signature-nonce': Utils.get_nonce(),
  626. 'x-acs-signature-method': 'HMAC-SHA1',
  627. 'x-acs-signature-version': '1.0',
  628. 'x-acs-version': version,
  629. 'x-acs-action': action,
  630. 'user-agent': Utils.get_user_agent(self._user_agent),
  631. }, global_headers, extends_headers, request.headers)
  632. if not DaraCore.is_null(request.body):
  633. _request.body = DaraCore.to_json_string(request.body)
  634. _request.headers["content-type"] = 'application/json; charset=utf-8'
  635. _request.query = DaraCore.merge({}, global_queries, extends_queries)
  636. if not DaraCore.is_null(request.query):
  637. _request.query = DaraCore.merge({}, _request.query, request.query)
  638. if auth_type != 'Anonymous':
  639. if DaraCore.is_null(self._credential):
  640. raise main_exceptions.ClientException(
  641. code = f'InvalidCredentials',
  642. 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.'
  643. )
  644. credential_model = self._credential.get_credential()
  645. if not DaraCore.is_null(credential_model.provider_name):
  646. _request.headers["x-acs-credentials-provider"] = credential_model.provider_name
  647. credential_type = credential_model.type
  648. if credential_type == 'bearer':
  649. bearer_token = credential_model.bearer_token
  650. _request.headers["x-acs-bearer-token"] = bearer_token
  651. _request.headers["x-acs-signature-type"] = 'BEARERTOKEN'
  652. elif credential_type == 'id_token':
  653. id_token = credential_model.security_token
  654. _request.headers["x-acs-zero-trust-idtoken"] = id_token
  655. else:
  656. access_key_id = credential_model.access_key_id
  657. access_key_secret = credential_model.access_key_secret
  658. security_token = credential_model.security_token
  659. if not DaraCore.is_null(security_token) and security_token != '':
  660. _request.headers["x-acs-accesskey-id"] = access_key_id
  661. _request.headers["x-acs-security-token"] = security_token
  662. string_to_sign = Utils.get_string_to_sign(_request)
  663. _request.headers["authorization"] = f'acs {access_key_id}:{Utils.get_roasignature(string_to_sign, access_key_secret)}'
  664. _last_request = _request
  665. _response = DaraCore.do_action(_request, _runtime)
  666. _last_response = _response
  667. if _response.status_code == 204:
  668. return {
  669. 'headers': _response.headers
  670. }
  671. if (_response.status_code >= 400) and (_response.status_code < 600):
  672. _res = DaraStream.read_as_json(_response.body)
  673. err = _res
  674. request_id = err.get("RequestId") or err.get("requestId")
  675. request_id = request_id or err.get("requestid")
  676. code = err.get("Code") or err.get("code")
  677. if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
  678. raise main_exceptions.ThrottlingException(
  679. status_code = _response.status_code,
  680. code = f'{code}',
  681. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  682. description = f'{err.get("Description") or err.get("description")}',
  683. retry_after = Utils.get_throttling_time_left(_response.headers),
  684. data = err,
  685. request_id = f'{request_id}'
  686. )
  687. elif (_response.status_code >= 400) and (_response.status_code < 500):
  688. raise main_exceptions.ClientException(
  689. status_code = _response.status_code,
  690. code = f'{code}',
  691. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  692. description = f'{err.get("Description") or err.get("description")}',
  693. data = err,
  694. access_denied_detail = self.get_access_denied_detail(err),
  695. request_id = f'{request_id}'
  696. )
  697. else:
  698. raise main_exceptions.ServerException(
  699. status_code = _response.status_code,
  700. code = f'{code}',
  701. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  702. description = f'{err.get("Description") or err.get("description")}',
  703. data = err,
  704. request_id = f'{request_id}'
  705. )
  706. if body_type == 'binary':
  707. resp = {
  708. 'body': _response.body,
  709. 'headers': _response.headers,
  710. 'statusCode': _response.status_code
  711. }
  712. return resp
  713. elif body_type == 'byte':
  714. byt = DaraStream.read_as_bytes(_response.body)
  715. return {
  716. 'body': byt,
  717. 'headers': _response.headers,
  718. 'statusCode': _response.status_code
  719. }
  720. elif body_type == 'string':
  721. _str = DaraStream.read_as_string(_response.body)
  722. return {
  723. 'body': _str,
  724. 'headers': _response.headers,
  725. 'statusCode': _response.status_code
  726. }
  727. elif body_type == 'json':
  728. obj = DaraStream.read_as_json(_response.body)
  729. res = obj
  730. return {
  731. 'body': res,
  732. 'headers': _response.headers,
  733. 'statusCode': _response.status_code
  734. }
  735. elif body_type == 'array':
  736. arr = DaraStream.read_as_json(_response.body)
  737. return {
  738. 'body': arr,
  739. 'headers': _response.headers,
  740. 'statusCode': _response.status_code
  741. }
  742. else:
  743. return {
  744. 'headers': _response.headers,
  745. 'statusCode': _response.status_code
  746. }
  747. except Exception as e:
  748. _context = RetryPolicyContext(
  749. retries_attempted= _retries_attempted,
  750. http_request = _last_request,
  751. http_response = _last_response,
  752. exception = e
  753. )
  754. continue
  755. raise UnretryableException(_context)
  756. async def do_roarequest_async(
  757. self,
  758. action: str,
  759. version: str,
  760. protocol: str,
  761. method: str,
  762. auth_type: str,
  763. pathname: str,
  764. body_type: str,
  765. request: open_api_util_models.OpenApiRequest,
  766. runtime: RuntimeOptions,
  767. ) -> dict:
  768. _runtime = {
  769. 'key': runtime.key or self._key,
  770. 'cert': runtime.cert or self._cert,
  771. 'ca': runtime.ca or self._ca,
  772. 'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
  773. 'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
  774. 'httpProxy': runtime.http_proxy or self._http_proxy,
  775. 'httpsProxy': runtime.https_proxy or self._https_proxy,
  776. 'noProxy': runtime.no_proxy or self._no_proxy,
  777. 'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
  778. 'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
  779. 'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
  780. 'retryOptions': self._retry_options,
  781. 'ignoreSSL': runtime.ignore_ssl,
  782. 'tlsMinVersion': self._tls_min_version,
  783. }
  784. _last_request = None
  785. _last_response = None
  786. _retries_attempted = 0
  787. _context = RetryPolicyContext(
  788. retries_attempted= _retries_attempted
  789. )
  790. while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
  791. if _retries_attempted > 0:
  792. _backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
  793. if _backoff_time > 0:
  794. DaraCore.sleep(_backoff_time)
  795. _retries_attempted = _retries_attempted + 1
  796. try:
  797. _request = DaraRequest()
  798. _request.protocol = self._protocol or protocol
  799. _request.method = method
  800. _request.pathname = pathname
  801. global_queries = {}
  802. global_headers = {}
  803. if not DaraCore.is_null(self._global_parameters):
  804. global_params = self._global_parameters
  805. if not DaraCore.is_null(global_params.queries):
  806. global_queries = global_params.queries
  807. if not DaraCore.is_null(global_params.headers):
  808. global_headers = global_params.headers
  809. extends_headers = {}
  810. extends_queries = {}
  811. if not DaraCore.is_null(runtime.extends_parameters):
  812. extends_parameters = runtime.extends_parameters
  813. if not DaraCore.is_null(extends_parameters.headers):
  814. extends_headers = extends_parameters.headers
  815. if not DaraCore.is_null(extends_parameters.queries):
  816. extends_queries = extends_parameters.queries
  817. _request.headers = DaraCore.merge({
  818. 'date': Utils.get_date_utcstring(),
  819. 'host': self._endpoint,
  820. 'accept': 'application/json',
  821. 'x-acs-signature-nonce': Utils.get_nonce(),
  822. 'x-acs-signature-method': 'HMAC-SHA1',
  823. 'x-acs-signature-version': '1.0',
  824. 'x-acs-version': version,
  825. 'x-acs-action': action,
  826. 'user-agent': Utils.get_user_agent(self._user_agent),
  827. }, global_headers, extends_headers, request.headers)
  828. if not DaraCore.is_null(request.body):
  829. _request.body = DaraCore.to_json_string(request.body)
  830. _request.headers["content-type"] = 'application/json; charset=utf-8'
  831. _request.query = DaraCore.merge({}, global_queries, extends_queries)
  832. if not DaraCore.is_null(request.query):
  833. _request.query = DaraCore.merge({}, _request.query, request.query)
  834. if auth_type != 'Anonymous':
  835. if DaraCore.is_null(self._credential):
  836. raise main_exceptions.ClientException(
  837. code = f'InvalidCredentials',
  838. 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.'
  839. )
  840. credential_model = await self._credential.get_credential_async()
  841. if not DaraCore.is_null(credential_model.provider_name):
  842. _request.headers["x-acs-credentials-provider"] = credential_model.provider_name
  843. credential_type = credential_model.type
  844. if credential_type == 'bearer':
  845. bearer_token = credential_model.bearer_token
  846. _request.headers["x-acs-bearer-token"] = bearer_token
  847. _request.headers["x-acs-signature-type"] = 'BEARERTOKEN'
  848. elif credential_type == 'id_token':
  849. id_token = credential_model.security_token
  850. _request.headers["x-acs-zero-trust-idtoken"] = id_token
  851. else:
  852. access_key_id = credential_model.access_key_id
  853. access_key_secret = credential_model.access_key_secret
  854. security_token = credential_model.security_token
  855. if not DaraCore.is_null(security_token) and security_token != '':
  856. _request.headers["x-acs-accesskey-id"] = access_key_id
  857. _request.headers["x-acs-security-token"] = security_token
  858. string_to_sign = Utils.get_string_to_sign(_request)
  859. _request.headers["authorization"] = f'acs {access_key_id}:{Utils.get_roasignature(string_to_sign, access_key_secret)}'
  860. _last_request = _request
  861. _response = await DaraCore.async_do_action(_request, _runtime)
  862. _last_response = _response
  863. if _response.status_code == 204:
  864. return {
  865. 'headers': _response.headers
  866. }
  867. if (_response.status_code >= 400) and (_response.status_code < 600):
  868. _res = await DaraStream.read_as_json_async(_response.body)
  869. err = _res
  870. request_id = err.get("RequestId") or err.get("requestId")
  871. request_id = request_id or err.get("requestid")
  872. code = err.get("Code") or err.get("code")
  873. if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
  874. raise main_exceptions.ThrottlingException(
  875. status_code = _response.status_code,
  876. code = f'{code}',
  877. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  878. description = f'{err.get("Description") or err.get("description")}',
  879. retry_after = Utils.get_throttling_time_left(_response.headers),
  880. data = err,
  881. request_id = f'{request_id}'
  882. )
  883. elif (_response.status_code >= 400) and (_response.status_code < 500):
  884. raise main_exceptions.ClientException(
  885. status_code = _response.status_code,
  886. code = f'{code}',
  887. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  888. description = f'{err.get("Description") or err.get("description")}',
  889. data = err,
  890. access_denied_detail = self.get_access_denied_detail(err),
  891. request_id = f'{request_id}'
  892. )
  893. else:
  894. raise main_exceptions.ServerException(
  895. status_code = _response.status_code,
  896. code = f'{code}',
  897. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  898. description = f'{err.get("Description") or err.get("description")}',
  899. data = err,
  900. request_id = f'{request_id}'
  901. )
  902. if body_type == 'binary':
  903. resp = {
  904. 'body': _response.body,
  905. 'headers': _response.headers,
  906. 'statusCode': _response.status_code
  907. }
  908. return resp
  909. elif body_type == 'byte':
  910. byt = await DaraStream.read_as_bytes_async(_response.body)
  911. return {
  912. 'body': byt,
  913. 'headers': _response.headers,
  914. 'statusCode': _response.status_code
  915. }
  916. elif body_type == 'string':
  917. _str = await DaraStream.read_as_string_async(_response.body)
  918. return {
  919. 'body': _str,
  920. 'headers': _response.headers,
  921. 'statusCode': _response.status_code
  922. }
  923. elif body_type == 'json':
  924. obj = await DaraStream.read_as_json_async(_response.body)
  925. res = obj
  926. return {
  927. 'body': res,
  928. 'headers': _response.headers,
  929. 'statusCode': _response.status_code
  930. }
  931. elif body_type == 'array':
  932. arr = await DaraStream.read_as_json_async(_response.body)
  933. return {
  934. 'body': arr,
  935. 'headers': _response.headers,
  936. 'statusCode': _response.status_code
  937. }
  938. else:
  939. return {
  940. 'headers': _response.headers,
  941. 'statusCode': _response.status_code
  942. }
  943. except Exception as e:
  944. _context = RetryPolicyContext(
  945. retries_attempted= _retries_attempted,
  946. http_request = _last_request,
  947. http_response = _last_response,
  948. exception = e
  949. )
  950. continue
  951. raise UnretryableException(_context)
  952. """
  953. * @remarks
  954. * Encapsulate the request and invoke the network with form body
  955. *
  956. * @param action - api name
  957. * @param version - product version
  958. * @param protocol - http or https
  959. * @param method - e.g. GET
  960. * @param authType - authorization type e.g. AK
  961. * @param pathname - pathname of every api
  962. * @param bodyType - response body type e.g. String
  963. * @param request - object of OpenApiRequest
  964. * @param runtime - which controls some details of call api, such as retry times
  965. * @returns the response
  966. """
  967. def do_roarequest_with_form(
  968. self,
  969. action: str,
  970. version: str,
  971. protocol: str,
  972. method: str,
  973. auth_type: str,
  974. pathname: str,
  975. body_type: str,
  976. request: open_api_util_models.OpenApiRequest,
  977. runtime: RuntimeOptions,
  978. ) -> dict:
  979. _runtime = {
  980. 'key': runtime.key or self._key,
  981. 'cert': runtime.cert or self._cert,
  982. 'ca': runtime.ca or self._ca,
  983. 'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
  984. 'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
  985. 'httpProxy': runtime.http_proxy or self._http_proxy,
  986. 'httpsProxy': runtime.https_proxy or self._https_proxy,
  987. 'noProxy': runtime.no_proxy or self._no_proxy,
  988. 'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
  989. 'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
  990. 'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
  991. 'retryOptions': self._retry_options,
  992. 'ignoreSSL': runtime.ignore_ssl,
  993. 'tlsMinVersion': self._tls_min_version,
  994. }
  995. _last_request = None
  996. _last_response = None
  997. _retries_attempted = 0
  998. _context = RetryPolicyContext(
  999. retries_attempted= _retries_attempted
  1000. )
  1001. while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
  1002. if _retries_attempted > 0:
  1003. _backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
  1004. if _backoff_time > 0:
  1005. DaraCore.sleep(_backoff_time)
  1006. _retries_attempted = _retries_attempted + 1
  1007. try:
  1008. _request = DaraRequest()
  1009. _request.protocol = self._protocol or protocol
  1010. _request.method = method
  1011. _request.pathname = pathname
  1012. global_queries = {}
  1013. global_headers = {}
  1014. if not DaraCore.is_null(self._global_parameters):
  1015. global_params = self._global_parameters
  1016. if not DaraCore.is_null(global_params.queries):
  1017. global_queries = global_params.queries
  1018. if not DaraCore.is_null(global_params.headers):
  1019. global_headers = global_params.headers
  1020. extends_headers = {}
  1021. extends_queries = {}
  1022. if not DaraCore.is_null(runtime.extends_parameters):
  1023. extends_parameters = runtime.extends_parameters
  1024. if not DaraCore.is_null(extends_parameters.headers):
  1025. extends_headers = extends_parameters.headers
  1026. if not DaraCore.is_null(extends_parameters.queries):
  1027. extends_queries = extends_parameters.queries
  1028. _request.headers = DaraCore.merge({
  1029. 'date': Utils.get_date_utcstring(),
  1030. 'host': self._endpoint,
  1031. 'accept': 'application/json',
  1032. 'x-acs-signature-nonce': Utils.get_nonce(),
  1033. 'x-acs-signature-method': 'HMAC-SHA1',
  1034. 'x-acs-signature-version': '1.0',
  1035. 'x-acs-version': version,
  1036. 'x-acs-action': action,
  1037. 'user-agent': Utils.get_user_agent(self._user_agent),
  1038. }, global_headers, extends_headers, request.headers)
  1039. if not DaraCore.is_null(request.body):
  1040. m = request.body
  1041. _request.body = Utils.to_form(m)
  1042. _request.headers["content-type"] = 'application/x-www-form-urlencoded'
  1043. _request.query = DaraCore.merge({}, global_queries, extends_queries)
  1044. if not DaraCore.is_null(request.query):
  1045. _request.query = DaraCore.merge({}, _request.query, request.query)
  1046. if auth_type != 'Anonymous':
  1047. if DaraCore.is_null(self._credential):
  1048. raise main_exceptions.ClientException(
  1049. code = f'InvalidCredentials',
  1050. 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.'
  1051. )
  1052. credential_model = self._credential.get_credential()
  1053. if not DaraCore.is_null(credential_model.provider_name):
  1054. _request.headers["x-acs-credentials-provider"] = credential_model.provider_name
  1055. credential_type = credential_model.type
  1056. if credential_type == 'bearer':
  1057. bearer_token = credential_model.bearer_token
  1058. _request.headers["x-acs-bearer-token"] = bearer_token
  1059. _request.headers["x-acs-signature-type"] = 'BEARERTOKEN'
  1060. elif credential_type == 'id_token':
  1061. id_token = credential_model.security_token
  1062. _request.headers["x-acs-zero-trust-idtoken"] = id_token
  1063. else:
  1064. access_key_id = credential_model.access_key_id
  1065. access_key_secret = credential_model.access_key_secret
  1066. security_token = credential_model.security_token
  1067. if not DaraCore.is_null(security_token) and security_token != '':
  1068. _request.headers["x-acs-accesskey-id"] = access_key_id
  1069. _request.headers["x-acs-security-token"] = security_token
  1070. string_to_sign = Utils.get_string_to_sign(_request)
  1071. _request.headers["authorization"] = f'acs {access_key_id}:{Utils.get_roasignature(string_to_sign, access_key_secret)}'
  1072. _last_request = _request
  1073. _response = DaraCore.do_action(_request, _runtime)
  1074. _last_response = _response
  1075. if _response.status_code == 204:
  1076. return {
  1077. 'headers': _response.headers
  1078. }
  1079. if (_response.status_code >= 400) and (_response.status_code < 600):
  1080. _res = DaraStream.read_as_json(_response.body)
  1081. err = _res
  1082. request_id = err.get("RequestId") or err.get("requestId")
  1083. code = err.get("Code") or err.get("code")
  1084. if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
  1085. raise main_exceptions.ThrottlingException(
  1086. status_code = _response.status_code,
  1087. code = f'{code}',
  1088. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  1089. description = f'{err.get("Description") or err.get("description")}',
  1090. retry_after = Utils.get_throttling_time_left(_response.headers),
  1091. data = err,
  1092. request_id = f'{request_id}'
  1093. )
  1094. elif (_response.status_code >= 400) and (_response.status_code < 500):
  1095. raise main_exceptions.ClientException(
  1096. status_code = _response.status_code,
  1097. code = f'{code}',
  1098. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  1099. description = f'{err.get("Description") or err.get("description")}',
  1100. data = err,
  1101. access_denied_detail = self.get_access_denied_detail(err),
  1102. request_id = f'{request_id}'
  1103. )
  1104. else:
  1105. raise main_exceptions.ServerException(
  1106. status_code = _response.status_code,
  1107. code = f'{code}',
  1108. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  1109. description = f'{err.get("Description") or err.get("description")}',
  1110. data = err,
  1111. request_id = f'{request_id}'
  1112. )
  1113. if body_type == 'binary':
  1114. resp = {
  1115. 'body': _response.body,
  1116. 'headers': _response.headers,
  1117. 'statusCode': _response.status_code
  1118. }
  1119. return resp
  1120. elif body_type == 'byte':
  1121. byt = DaraStream.read_as_bytes(_response.body)
  1122. return {
  1123. 'body': byt,
  1124. 'headers': _response.headers,
  1125. 'statusCode': _response.status_code
  1126. }
  1127. elif body_type == 'string':
  1128. _str = DaraStream.read_as_string(_response.body)
  1129. return {
  1130. 'body': _str,
  1131. 'headers': _response.headers,
  1132. 'statusCode': _response.status_code
  1133. }
  1134. elif body_type == 'json':
  1135. obj = DaraStream.read_as_json(_response.body)
  1136. res = obj
  1137. return {
  1138. 'body': res,
  1139. 'headers': _response.headers,
  1140. 'statusCode': _response.status_code
  1141. }
  1142. elif body_type == 'array':
  1143. arr = DaraStream.read_as_json(_response.body)
  1144. return {
  1145. 'body': arr,
  1146. 'headers': _response.headers,
  1147. 'statusCode': _response.status_code
  1148. }
  1149. else:
  1150. return {
  1151. 'headers': _response.headers,
  1152. 'statusCode': _response.status_code
  1153. }
  1154. except Exception as e:
  1155. _context = RetryPolicyContext(
  1156. retries_attempted= _retries_attempted,
  1157. http_request = _last_request,
  1158. http_response = _last_response,
  1159. exception = e
  1160. )
  1161. continue
  1162. raise UnretryableException(_context)
  1163. async def do_roarequest_with_form_async(
  1164. self,
  1165. action: str,
  1166. version: str,
  1167. protocol: str,
  1168. method: str,
  1169. auth_type: str,
  1170. pathname: str,
  1171. body_type: str,
  1172. request: open_api_util_models.OpenApiRequest,
  1173. runtime: RuntimeOptions,
  1174. ) -> dict:
  1175. _runtime = {
  1176. 'key': runtime.key or self._key,
  1177. 'cert': runtime.cert or self._cert,
  1178. 'ca': runtime.ca or self._ca,
  1179. 'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
  1180. 'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
  1181. 'httpProxy': runtime.http_proxy or self._http_proxy,
  1182. 'httpsProxy': runtime.https_proxy or self._https_proxy,
  1183. 'noProxy': runtime.no_proxy or self._no_proxy,
  1184. 'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
  1185. 'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
  1186. 'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
  1187. 'retryOptions': self._retry_options,
  1188. 'ignoreSSL': runtime.ignore_ssl,
  1189. 'tlsMinVersion': self._tls_min_version,
  1190. }
  1191. _last_request = None
  1192. _last_response = None
  1193. _retries_attempted = 0
  1194. _context = RetryPolicyContext(
  1195. retries_attempted= _retries_attempted
  1196. )
  1197. while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
  1198. if _retries_attempted > 0:
  1199. _backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
  1200. if _backoff_time > 0:
  1201. DaraCore.sleep(_backoff_time)
  1202. _retries_attempted = _retries_attempted + 1
  1203. try:
  1204. _request = DaraRequest()
  1205. _request.protocol = self._protocol or protocol
  1206. _request.method = method
  1207. _request.pathname = pathname
  1208. global_queries = {}
  1209. global_headers = {}
  1210. if not DaraCore.is_null(self._global_parameters):
  1211. global_params = self._global_parameters
  1212. if not DaraCore.is_null(global_params.queries):
  1213. global_queries = global_params.queries
  1214. if not DaraCore.is_null(global_params.headers):
  1215. global_headers = global_params.headers
  1216. extends_headers = {}
  1217. extends_queries = {}
  1218. if not DaraCore.is_null(runtime.extends_parameters):
  1219. extends_parameters = runtime.extends_parameters
  1220. if not DaraCore.is_null(extends_parameters.headers):
  1221. extends_headers = extends_parameters.headers
  1222. if not DaraCore.is_null(extends_parameters.queries):
  1223. extends_queries = extends_parameters.queries
  1224. _request.headers = DaraCore.merge({
  1225. 'date': Utils.get_date_utcstring(),
  1226. 'host': self._endpoint,
  1227. 'accept': 'application/json',
  1228. 'x-acs-signature-nonce': Utils.get_nonce(),
  1229. 'x-acs-signature-method': 'HMAC-SHA1',
  1230. 'x-acs-signature-version': '1.0',
  1231. 'x-acs-version': version,
  1232. 'x-acs-action': action,
  1233. 'user-agent': Utils.get_user_agent(self._user_agent),
  1234. }, global_headers, extends_headers, request.headers)
  1235. if not DaraCore.is_null(request.body):
  1236. m = request.body
  1237. _request.body = Utils.to_form(m)
  1238. _request.headers["content-type"] = 'application/x-www-form-urlencoded'
  1239. _request.query = DaraCore.merge({}, global_queries, extends_queries)
  1240. if not DaraCore.is_null(request.query):
  1241. _request.query = DaraCore.merge({}, _request.query, request.query)
  1242. if auth_type != 'Anonymous':
  1243. if DaraCore.is_null(self._credential):
  1244. raise main_exceptions.ClientException(
  1245. code = f'InvalidCredentials',
  1246. 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.'
  1247. )
  1248. credential_model = await self._credential.get_credential_async()
  1249. if not DaraCore.is_null(credential_model.provider_name):
  1250. _request.headers["x-acs-credentials-provider"] = credential_model.provider_name
  1251. credential_type = credential_model.type
  1252. if credential_type == 'bearer':
  1253. bearer_token = credential_model.bearer_token
  1254. _request.headers["x-acs-bearer-token"] = bearer_token
  1255. _request.headers["x-acs-signature-type"] = 'BEARERTOKEN'
  1256. elif credential_type == 'id_token':
  1257. id_token = credential_model.security_token
  1258. _request.headers["x-acs-zero-trust-idtoken"] = id_token
  1259. else:
  1260. access_key_id = credential_model.access_key_id
  1261. access_key_secret = credential_model.access_key_secret
  1262. security_token = credential_model.security_token
  1263. if not DaraCore.is_null(security_token) and security_token != '':
  1264. _request.headers["x-acs-accesskey-id"] = access_key_id
  1265. _request.headers["x-acs-security-token"] = security_token
  1266. string_to_sign = Utils.get_string_to_sign(_request)
  1267. _request.headers["authorization"] = f'acs {access_key_id}:{Utils.get_roasignature(string_to_sign, access_key_secret)}'
  1268. _last_request = _request
  1269. _response = await DaraCore.async_do_action(_request, _runtime)
  1270. _last_response = _response
  1271. if _response.status_code == 204:
  1272. return {
  1273. 'headers': _response.headers
  1274. }
  1275. if (_response.status_code >= 400) and (_response.status_code < 600):
  1276. _res = await DaraStream.read_as_json_async(_response.body)
  1277. err = _res
  1278. request_id = err.get("RequestId") or err.get("requestId")
  1279. code = err.get("Code") or err.get("code")
  1280. if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
  1281. raise main_exceptions.ThrottlingException(
  1282. status_code = _response.status_code,
  1283. code = f'{code}',
  1284. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  1285. description = f'{err.get("Description") or err.get("description")}',
  1286. retry_after = Utils.get_throttling_time_left(_response.headers),
  1287. data = err,
  1288. request_id = f'{request_id}'
  1289. )
  1290. elif (_response.status_code >= 400) and (_response.status_code < 500):
  1291. raise main_exceptions.ClientException(
  1292. status_code = _response.status_code,
  1293. code = f'{code}',
  1294. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  1295. description = f'{err.get("Description") or err.get("description")}',
  1296. data = err,
  1297. access_denied_detail = self.get_access_denied_detail(err),
  1298. request_id = f'{request_id}'
  1299. )
  1300. else:
  1301. raise main_exceptions.ServerException(
  1302. status_code = _response.status_code,
  1303. code = f'{code}',
  1304. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  1305. description = f'{err.get("Description") or err.get("description")}',
  1306. data = err,
  1307. request_id = f'{request_id}'
  1308. )
  1309. if body_type == 'binary':
  1310. resp = {
  1311. 'body': _response.body,
  1312. 'headers': _response.headers,
  1313. 'statusCode': _response.status_code
  1314. }
  1315. return resp
  1316. elif body_type == 'byte':
  1317. byt = await DaraStream.read_as_bytes_async(_response.body)
  1318. return {
  1319. 'body': byt,
  1320. 'headers': _response.headers,
  1321. 'statusCode': _response.status_code
  1322. }
  1323. elif body_type == 'string':
  1324. _str = await DaraStream.read_as_string_async(_response.body)
  1325. return {
  1326. 'body': _str,
  1327. 'headers': _response.headers,
  1328. 'statusCode': _response.status_code
  1329. }
  1330. elif body_type == 'json':
  1331. obj = await DaraStream.read_as_json_async(_response.body)
  1332. res = obj
  1333. return {
  1334. 'body': res,
  1335. 'headers': _response.headers,
  1336. 'statusCode': _response.status_code
  1337. }
  1338. elif body_type == 'array':
  1339. arr = await DaraStream.read_as_json_async(_response.body)
  1340. return {
  1341. 'body': arr,
  1342. 'headers': _response.headers,
  1343. 'statusCode': _response.status_code
  1344. }
  1345. else:
  1346. return {
  1347. 'headers': _response.headers,
  1348. 'statusCode': _response.status_code
  1349. }
  1350. except Exception as e:
  1351. _context = RetryPolicyContext(
  1352. retries_attempted= _retries_attempted,
  1353. http_request = _last_request,
  1354. http_response = _last_response,
  1355. exception = e
  1356. )
  1357. continue
  1358. raise UnretryableException(_context)
  1359. """
  1360. * @remarks
  1361. * Encapsulate the request and invoke the network
  1362. *
  1363. * @param action - api name
  1364. * @param version - product version
  1365. * @param protocol - http or https
  1366. * @param method - e.g. GET
  1367. * @param authType - authorization type e.g. AK
  1368. * @param bodyType - response body type e.g. String
  1369. * @param request - object of OpenApiRequest
  1370. * @param runtime - which controls some details of call api, such as retry times
  1371. * @returns the response
  1372. """
  1373. def do_request(
  1374. self,
  1375. params: open_api_util_models.Params,
  1376. request: open_api_util_models.OpenApiRequest,
  1377. runtime: RuntimeOptions,
  1378. ) -> dict:
  1379. _runtime = {
  1380. 'key': runtime.key or self._key,
  1381. 'cert': runtime.cert or self._cert,
  1382. 'ca': runtime.ca or self._ca,
  1383. 'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
  1384. 'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
  1385. 'httpProxy': runtime.http_proxy or self._http_proxy,
  1386. 'httpsProxy': runtime.https_proxy or self._https_proxy,
  1387. 'noProxy': runtime.no_proxy or self._no_proxy,
  1388. 'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
  1389. 'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
  1390. 'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
  1391. 'retryOptions': self._retry_options,
  1392. 'ignoreSSL': runtime.ignore_ssl,
  1393. 'tlsMinVersion': self._tls_min_version,
  1394. }
  1395. _last_request = None
  1396. _last_response = None
  1397. _retries_attempted = 0
  1398. _context = RetryPolicyContext(
  1399. retries_attempted= _retries_attempted
  1400. )
  1401. while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
  1402. if _retries_attempted > 0:
  1403. _backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
  1404. if _backoff_time > 0:
  1405. DaraCore.sleep(_backoff_time)
  1406. _retries_attempted = _retries_attempted + 1
  1407. try:
  1408. _request = DaraRequest()
  1409. _request.protocol = self._protocol or params.protocol
  1410. _request.method = params.method
  1411. _request.pathname = params.pathname
  1412. global_queries = {}
  1413. global_headers = {}
  1414. if not DaraCore.is_null(self._global_parameters):
  1415. global_params = self._global_parameters
  1416. if not DaraCore.is_null(global_params.queries):
  1417. global_queries = global_params.queries
  1418. if not DaraCore.is_null(global_params.headers):
  1419. global_headers = global_params.headers
  1420. extends_headers = {}
  1421. extends_queries = {}
  1422. if not DaraCore.is_null(runtime.extends_parameters):
  1423. extends_parameters = runtime.extends_parameters
  1424. if not DaraCore.is_null(extends_parameters.headers):
  1425. extends_headers = extends_parameters.headers
  1426. if not DaraCore.is_null(extends_parameters.queries):
  1427. extends_queries = extends_parameters.queries
  1428. _request.query = DaraCore.merge({}, global_queries, extends_queries, request.query)
  1429. # endpoint is setted in product client
  1430. _request.headers = DaraCore.merge({
  1431. 'host': self._endpoint,
  1432. 'x-acs-version': params.version,
  1433. 'x-acs-action': params.action,
  1434. 'user-agent': Utils.get_user_agent(self._user_agent),
  1435. 'x-acs-date': Utils.get_timestamp(),
  1436. 'x-acs-signature-nonce': Utils.get_nonce(),
  1437. 'accept': 'application/json',
  1438. }, global_headers, extends_headers, request.headers)
  1439. if params.style == 'RPC':
  1440. headers = self.get_rpc_headers()
  1441. if not DaraCore.is_null(headers):
  1442. _request.headers = DaraCore.merge({}, _request.headers, headers)
  1443. signature_algorithm = self._signature_algorithm or 'ACS3-HMAC-SHA256'
  1444. hashed_request_payload = Utils.hash(DaraBytes.from_('', 'utf-8'), signature_algorithm)
  1445. if not DaraCore.is_null(request.stream):
  1446. tmp = DaraStream.read_as_bytes(request.stream)
  1447. hashed_request_payload = Utils.hash(tmp, signature_algorithm)
  1448. _request.body = tmp
  1449. _request.headers["content-type"] = 'application/octet-stream'
  1450. else:
  1451. if not DaraCore.is_null(request.body):
  1452. if params.req_body_type == 'byte':
  1453. byte_obj = bytes(request.body)
  1454. hashed_request_payload = Utils.hash(byte_obj, signature_algorithm)
  1455. _request.body = byte_obj
  1456. elif params.req_body_type == 'json':
  1457. json_obj = DaraCore.to_json_string(request.body)
  1458. hashed_request_payload = Utils.hash(json_obj.encode('utf-8'), signature_algorithm)
  1459. _request.body = json_obj
  1460. _request.headers["content-type"] = 'application/json; charset=utf-8'
  1461. else:
  1462. m = request.body
  1463. form_obj = Utils.to_form(m)
  1464. hashed_request_payload = Utils.hash(form_obj.encode('utf-8'), signature_algorithm)
  1465. _request.body = form_obj
  1466. _request.headers["content-type"] = 'application/x-www-form-urlencoded'
  1467. _request.headers["x-acs-content-sha256"] = hashed_request_payload.hex()
  1468. if params.auth_type != 'Anonymous':
  1469. if DaraCore.is_null(self._credential):
  1470. raise main_exceptions.ClientException(
  1471. code = f'InvalidCredentials',
  1472. 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.'
  1473. )
  1474. credential_model = self._credential.get_credential()
  1475. if not DaraCore.is_null(credential_model.provider_name):
  1476. _request.headers["x-acs-credentials-provider"] = credential_model.provider_name
  1477. auth_type = credential_model.type
  1478. if auth_type == 'bearer':
  1479. bearer_token = credential_model.bearer_token
  1480. _request.headers["x-acs-bearer-token"] = bearer_token
  1481. if params.style == 'RPC':
  1482. _request.query["SignatureType"] = 'BEARERTOKEN'
  1483. else:
  1484. _request.headers["x-acs-signature-type"] = 'BEARERTOKEN'
  1485. elif auth_type == 'id_token':
  1486. id_token = credential_model.security_token
  1487. _request.headers["x-acs-zero-trust-idtoken"] = id_token
  1488. else:
  1489. access_key_id = credential_model.access_key_id
  1490. access_key_secret = credential_model.access_key_secret
  1491. security_token = credential_model.security_token
  1492. if not DaraCore.is_null(security_token) and security_token != '':
  1493. _request.headers["x-acs-accesskey-id"] = access_key_id
  1494. _request.headers["x-acs-security-token"] = security_token
  1495. _request.headers["Authorization"] = Utils.get_authorization(_request, signature_algorithm, hashed_request_payload.hex(), access_key_id, access_key_secret)
  1496. _last_request = _request
  1497. _response = DaraCore.do_action(_request, _runtime)
  1498. _last_response = _response
  1499. if (_response.status_code >= 400) and (_response.status_code < 600):
  1500. err = {}
  1501. if not DaraCore.is_null(_response.headers.get("content-type")) and _response.headers.get("content-type") == 'text/xml;charset=utf-8':
  1502. _str = DaraStream.read_as_string(_response.body)
  1503. resp_map = DaraXML.parse_xml(_str, None)
  1504. err = resp_map.get("Error")
  1505. else:
  1506. _res = DaraStream.read_as_json(_response.body)
  1507. err = _res
  1508. request_id = err.get("RequestId") or err.get("requestId")
  1509. code = err.get("Code") or err.get("code")
  1510. if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
  1511. raise main_exceptions.ThrottlingException(
  1512. status_code = _response.status_code,
  1513. code = f'{code}',
  1514. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  1515. description = f'{err.get("Description") or err.get("description")}',
  1516. retry_after = Utils.get_throttling_time_left(_response.headers),
  1517. data = err,
  1518. request_id = f'{request_id}'
  1519. )
  1520. elif (_response.status_code >= 400) and (_response.status_code < 500):
  1521. raise main_exceptions.ClientException(
  1522. status_code = _response.status_code,
  1523. code = f'{code}',
  1524. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  1525. description = f'{err.get("Description") or err.get("description")}',
  1526. data = err,
  1527. access_denied_detail = self.get_access_denied_detail(err),
  1528. request_id = f'{request_id}'
  1529. )
  1530. else:
  1531. raise main_exceptions.ServerException(
  1532. status_code = _response.status_code,
  1533. code = f'{code}',
  1534. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  1535. description = f'{err.get("Description") or err.get("description")}',
  1536. data = err,
  1537. request_id = f'{request_id}'
  1538. )
  1539. if params.body_type == 'binary':
  1540. resp = {
  1541. 'body': _response.body,
  1542. 'headers': _response.headers,
  1543. 'statusCode': _response.status_code
  1544. }
  1545. return resp
  1546. elif params.body_type == 'byte':
  1547. byt = DaraStream.read_as_bytes(_response.body)
  1548. return {
  1549. 'body': byt,
  1550. 'headers': _response.headers,
  1551. 'statusCode': _response.status_code
  1552. }
  1553. elif params.body_type == 'string':
  1554. resp_str = DaraStream.read_as_string(_response.body)
  1555. return {
  1556. 'body': resp_str,
  1557. 'headers': _response.headers,
  1558. 'statusCode': _response.status_code
  1559. }
  1560. elif params.body_type == 'json':
  1561. obj = DaraStream.read_as_json(_response.body)
  1562. res = obj
  1563. return {
  1564. 'body': res,
  1565. 'headers': _response.headers,
  1566. 'statusCode': _response.status_code
  1567. }
  1568. elif params.body_type == 'array':
  1569. arr = DaraStream.read_as_json(_response.body)
  1570. return {
  1571. 'body': arr,
  1572. 'headers': _response.headers,
  1573. 'statusCode': _response.status_code
  1574. }
  1575. else:
  1576. anything = DaraStream.read_as_string(_response.body)
  1577. return {
  1578. 'body': anything,
  1579. 'headers': _response.headers,
  1580. 'statusCode': _response.status_code
  1581. }
  1582. except Exception as e:
  1583. _context = RetryPolicyContext(
  1584. retries_attempted= _retries_attempted,
  1585. http_request = _last_request,
  1586. http_response = _last_response,
  1587. exception = e
  1588. )
  1589. continue
  1590. raise UnretryableException(_context)
  1591. async def do_request_async(
  1592. self,
  1593. params: open_api_util_models.Params,
  1594. request: open_api_util_models.OpenApiRequest,
  1595. runtime: RuntimeOptions,
  1596. ) -> dict:
  1597. _runtime = {
  1598. 'key': runtime.key or self._key,
  1599. 'cert': runtime.cert or self._cert,
  1600. 'ca': runtime.ca or self._ca,
  1601. 'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
  1602. 'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
  1603. 'httpProxy': runtime.http_proxy or self._http_proxy,
  1604. 'httpsProxy': runtime.https_proxy or self._https_proxy,
  1605. 'noProxy': runtime.no_proxy or self._no_proxy,
  1606. 'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
  1607. 'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
  1608. 'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
  1609. 'retryOptions': self._retry_options,
  1610. 'ignoreSSL': runtime.ignore_ssl,
  1611. 'tlsMinVersion': self._tls_min_version,
  1612. }
  1613. _last_request = None
  1614. _last_response = None
  1615. _retries_attempted = 0
  1616. _context = RetryPolicyContext(
  1617. retries_attempted= _retries_attempted
  1618. )
  1619. while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
  1620. if _retries_attempted > 0:
  1621. _backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
  1622. if _backoff_time > 0:
  1623. DaraCore.sleep(_backoff_time)
  1624. _retries_attempted = _retries_attempted + 1
  1625. try:
  1626. _request = DaraRequest()
  1627. _request.protocol = self._protocol or params.protocol
  1628. _request.method = params.method
  1629. _request.pathname = params.pathname
  1630. global_queries = {}
  1631. global_headers = {}
  1632. if not DaraCore.is_null(self._global_parameters):
  1633. global_params = self._global_parameters
  1634. if not DaraCore.is_null(global_params.queries):
  1635. global_queries = global_params.queries
  1636. if not DaraCore.is_null(global_params.headers):
  1637. global_headers = global_params.headers
  1638. extends_headers = {}
  1639. extends_queries = {}
  1640. if not DaraCore.is_null(runtime.extends_parameters):
  1641. extends_parameters = runtime.extends_parameters
  1642. if not DaraCore.is_null(extends_parameters.headers):
  1643. extends_headers = extends_parameters.headers
  1644. if not DaraCore.is_null(extends_parameters.queries):
  1645. extends_queries = extends_parameters.queries
  1646. _request.query = DaraCore.merge({}, global_queries, extends_queries, request.query)
  1647. # endpoint is setted in product client
  1648. _request.headers = DaraCore.merge({
  1649. 'host': self._endpoint,
  1650. 'x-acs-version': params.version,
  1651. 'x-acs-action': params.action,
  1652. 'user-agent': Utils.get_user_agent(self._user_agent),
  1653. 'x-acs-date': Utils.get_timestamp(),
  1654. 'x-acs-signature-nonce': Utils.get_nonce(),
  1655. 'accept': 'application/json',
  1656. }, global_headers, extends_headers, request.headers)
  1657. if params.style == 'RPC':
  1658. headers = self.get_rpc_headers()
  1659. if not DaraCore.is_null(headers):
  1660. _request.headers = DaraCore.merge({}, _request.headers, headers)
  1661. signature_algorithm = self._signature_algorithm or 'ACS3-HMAC-SHA256'
  1662. hashed_request_payload = Utils.hash(DaraBytes.from_('', 'utf-8'), signature_algorithm)
  1663. if not DaraCore.is_null(request.stream):
  1664. tmp = await DaraStream.read_as_bytes_async(request.stream)
  1665. hashed_request_payload = Utils.hash(tmp, signature_algorithm)
  1666. _request.body = tmp
  1667. _request.headers["content-type"] = 'application/octet-stream'
  1668. else:
  1669. if not DaraCore.is_null(request.body):
  1670. if params.req_body_type == 'byte':
  1671. byte_obj = bytes(request.body)
  1672. hashed_request_payload = Utils.hash(byte_obj, signature_algorithm)
  1673. _request.body = byte_obj
  1674. elif params.req_body_type == 'json':
  1675. json_obj = DaraCore.to_json_string(request.body)
  1676. hashed_request_payload = Utils.hash(json_obj.encode('utf-8'), signature_algorithm)
  1677. _request.body = json_obj
  1678. _request.headers["content-type"] = 'application/json; charset=utf-8'
  1679. else:
  1680. m = request.body
  1681. form_obj = Utils.to_form(m)
  1682. hashed_request_payload = Utils.hash(form_obj.encode('utf-8'), signature_algorithm)
  1683. _request.body = form_obj
  1684. _request.headers["content-type"] = 'application/x-www-form-urlencoded'
  1685. _request.headers["x-acs-content-sha256"] = hashed_request_payload.hex()
  1686. if params.auth_type != 'Anonymous':
  1687. if DaraCore.is_null(self._credential):
  1688. raise main_exceptions.ClientException(
  1689. code = f'InvalidCredentials',
  1690. 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.'
  1691. )
  1692. credential_model = await self._credential.get_credential_async()
  1693. if not DaraCore.is_null(credential_model.provider_name):
  1694. _request.headers["x-acs-credentials-provider"] = credential_model.provider_name
  1695. auth_type = credential_model.type
  1696. if auth_type == 'bearer':
  1697. bearer_token = credential_model.bearer_token
  1698. _request.headers["x-acs-bearer-token"] = bearer_token
  1699. if params.style == 'RPC':
  1700. _request.query["SignatureType"] = 'BEARERTOKEN'
  1701. else:
  1702. _request.headers["x-acs-signature-type"] = 'BEARERTOKEN'
  1703. elif auth_type == 'id_token':
  1704. id_token = credential_model.security_token
  1705. _request.headers["x-acs-zero-trust-idtoken"] = id_token
  1706. else:
  1707. access_key_id = credential_model.access_key_id
  1708. access_key_secret = credential_model.access_key_secret
  1709. security_token = credential_model.security_token
  1710. if not DaraCore.is_null(security_token) and security_token != '':
  1711. _request.headers["x-acs-accesskey-id"] = access_key_id
  1712. _request.headers["x-acs-security-token"] = security_token
  1713. _request.headers["Authorization"] = Utils.get_authorization(_request, signature_algorithm, hashed_request_payload.hex(), access_key_id, access_key_secret)
  1714. _last_request = _request
  1715. _response = await DaraCore.async_do_action(_request, _runtime)
  1716. _last_response = _response
  1717. if (_response.status_code >= 400) and (_response.status_code < 600):
  1718. err = {}
  1719. if not DaraCore.is_null(_response.headers.get("content-type")) and _response.headers.get("content-type") == 'text/xml;charset=utf-8':
  1720. _str = await DaraStream.read_as_string_async(_response.body)
  1721. resp_map = DaraXML.parse_xml(_str, None)
  1722. err = resp_map.get("Error")
  1723. else:
  1724. _res = await DaraStream.read_as_json_async(_response.body)
  1725. err = _res
  1726. request_id = err.get("RequestId") or err.get("requestId")
  1727. code = err.get("Code") or err.get("code")
  1728. if (f'{code}' == 'Throttling') or (f'{code}' == 'Throttling.User') or (f'{code}' == 'Throttling.Api'):
  1729. raise main_exceptions.ThrottlingException(
  1730. status_code = _response.status_code,
  1731. code = f'{code}',
  1732. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  1733. description = f'{err.get("Description") or err.get("description")}',
  1734. retry_after = Utils.get_throttling_time_left(_response.headers),
  1735. data = err,
  1736. request_id = f'{request_id}'
  1737. )
  1738. elif (_response.status_code >= 400) and (_response.status_code < 500):
  1739. raise main_exceptions.ClientException(
  1740. status_code = _response.status_code,
  1741. code = f'{code}',
  1742. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  1743. description = f'{err.get("Description") or err.get("description")}',
  1744. data = err,
  1745. access_denied_detail = self.get_access_denied_detail(err),
  1746. request_id = f'{request_id}'
  1747. )
  1748. else:
  1749. raise main_exceptions.ServerException(
  1750. status_code = _response.status_code,
  1751. code = f'{code}',
  1752. message = f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {request_id}',
  1753. description = f'{err.get("Description") or err.get("description")}',
  1754. data = err,
  1755. request_id = f'{request_id}'
  1756. )
  1757. if params.body_type == 'binary':
  1758. resp = {
  1759. 'body': _response.body,
  1760. 'headers': _response.headers,
  1761. 'statusCode': _response.status_code
  1762. }
  1763. return resp
  1764. elif params.body_type == 'byte':
  1765. byt = await DaraStream.read_as_bytes_async(_response.body)
  1766. return {
  1767. 'body': byt,
  1768. 'headers': _response.headers,
  1769. 'statusCode': _response.status_code
  1770. }
  1771. elif params.body_type == 'string':
  1772. resp_str = await DaraStream.read_as_string_async(_response.body)
  1773. return {
  1774. 'body': resp_str,
  1775. 'headers': _response.headers,
  1776. 'statusCode': _response.status_code
  1777. }
  1778. elif params.body_type == 'json':
  1779. obj = await DaraStream.read_as_json_async(_response.body)
  1780. res = obj
  1781. return {
  1782. 'body': res,
  1783. 'headers': _response.headers,
  1784. 'statusCode': _response.status_code
  1785. }
  1786. elif params.body_type == 'array':
  1787. arr = await DaraStream.read_as_json_async(_response.body)
  1788. return {
  1789. 'body': arr,
  1790. 'headers': _response.headers,
  1791. 'statusCode': _response.status_code
  1792. }
  1793. else:
  1794. anything = await DaraStream.read_as_string_async(_response.body)
  1795. return {
  1796. 'body': anything,
  1797. 'headers': _response.headers,
  1798. 'statusCode': _response.status_code
  1799. }
  1800. except Exception as e:
  1801. _context = RetryPolicyContext(
  1802. retries_attempted= _retries_attempted,
  1803. http_request = _last_request,
  1804. http_response = _last_response,
  1805. exception = e
  1806. )
  1807. continue
  1808. raise UnretryableException(_context)
  1809. """
  1810. * @remarks
  1811. * Encapsulate the request and invoke the network
  1812. *
  1813. * @param action - api name
  1814. * @param version - product version
  1815. * @param protocol - http or https
  1816. * @param method - e.g. GET
  1817. * @param authType - authorization type e.g. AK
  1818. * @param bodyType - response body type e.g. String
  1819. * @param request - object of OpenApiRequest
  1820. * @param runtime - which controls some details of call api, such as retry times
  1821. * @returns the response
  1822. """
  1823. def execute(
  1824. self,
  1825. params: open_api_util_models.Params,
  1826. request: open_api_util_models.OpenApiRequest,
  1827. runtime: RuntimeOptions,
  1828. ) -> dict:
  1829. _runtime = {
  1830. 'key': runtime.key or self._key,
  1831. 'cert': runtime.cert or self._cert,
  1832. 'ca': runtime.ca or self._ca,
  1833. 'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
  1834. 'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
  1835. 'httpProxy': runtime.http_proxy or self._http_proxy,
  1836. 'httpsProxy': runtime.https_proxy or self._https_proxy,
  1837. 'noProxy': runtime.no_proxy or self._no_proxy,
  1838. 'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
  1839. 'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
  1840. 'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
  1841. 'retryOptions': self._retry_options,
  1842. 'ignoreSSL': runtime.ignore_ssl,
  1843. 'tlsMinVersion': self._tls_min_version,
  1844. 'disableHttp2': bool(self._disable_http_2 or False),
  1845. }
  1846. _last_request = None
  1847. _last_response = None
  1848. _retries_attempted = 0
  1849. _context = RetryPolicyContext(
  1850. retries_attempted= _retries_attempted
  1851. )
  1852. while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
  1853. if _retries_attempted > 0:
  1854. _backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
  1855. if _backoff_time > 0:
  1856. DaraCore.sleep(_backoff_time)
  1857. _retries_attempted = _retries_attempted + 1
  1858. try:
  1859. _request = DaraRequest()
  1860. # spi = new Gateway();//Gateway implements SPI,这一步在产品 SDK 中实例化
  1861. headers = self.get_rpc_headers()
  1862. global_queries = {}
  1863. global_headers = {}
  1864. if not DaraCore.is_null(self._global_parameters):
  1865. global_params = self._global_parameters
  1866. if not DaraCore.is_null(global_params.queries):
  1867. global_queries = global_params.queries
  1868. if not DaraCore.is_null(global_params.headers):
  1869. global_headers = global_params.headers
  1870. extends_headers = {}
  1871. extends_queries = {}
  1872. if not DaraCore.is_null(runtime.extends_parameters):
  1873. extends_parameters = runtime.extends_parameters
  1874. if not DaraCore.is_null(extends_parameters.headers):
  1875. extends_headers = extends_parameters.headers
  1876. if not DaraCore.is_null(extends_parameters.queries):
  1877. extends_queries = extends_parameters.queries
  1878. request_context = spi_models.InterceptorContextRequest(
  1879. headers = DaraCore.merge({}, global_headers, extends_headers, request.headers, headers),
  1880. query = DaraCore.merge({}, global_queries, extends_queries, request.query),
  1881. body = request.body,
  1882. stream = request.stream,
  1883. host_map = request.host_map,
  1884. pathname = params.pathname,
  1885. product_id = self._product_id,
  1886. action = params.action,
  1887. version = params.version,
  1888. protocol = self._protocol or params.protocol,
  1889. method = self._method or params.method,
  1890. auth_type = params.auth_type,
  1891. body_type = params.body_type,
  1892. req_body_type = params.req_body_type,
  1893. style = params.style,
  1894. credential = self._credential,
  1895. signature_version = self._signature_version,
  1896. signature_algorithm = self._signature_algorithm,
  1897. user_agent = Utils.get_user_agent(self._user_agent)
  1898. )
  1899. configuration_context = spi_models.InterceptorContextConfiguration(
  1900. region_id = self._region_id,
  1901. endpoint = request.endpoint_override or self._endpoint,
  1902. endpoint_rule = self._endpoint_rule,
  1903. endpoint_map = self._endpoint_map,
  1904. endpoint_type = self._endpoint_type,
  1905. network = self._network,
  1906. suffix = self._suffix
  1907. )
  1908. interceptor_context = spi_models.InterceptorContext(
  1909. request = request_context,
  1910. configuration = configuration_context
  1911. )
  1912. attribute_map = spi_models.AttributeMap()
  1913. if not DaraCore.is_null(self._attribute_map):
  1914. attribute_map = self._attribute_map
  1915. # 1. spi.modifyConfiguration(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
  1916. self._spi.modify_configuration(interceptor_context, attribute_map)
  1917. # 2. spi.modifyRequest(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
  1918. self._spi.modify_request(interceptor_context, attribute_map)
  1919. _request.protocol = interceptor_context.request.protocol
  1920. _request.method = interceptor_context.request.method
  1921. _request.pathname = interceptor_context.request.pathname
  1922. _request.query = interceptor_context.request.query
  1923. _request.body = interceptor_context.request.stream
  1924. _request.headers = interceptor_context.request.headers
  1925. _last_request = _request
  1926. _response = DaraCore.do_action(_request, _runtime)
  1927. _last_response = _response
  1928. response_context = spi_models.InterceptorContextResponse(
  1929. status_code = _response.status_code,
  1930. headers = _response.headers,
  1931. body = _response.body
  1932. )
  1933. interceptor_context.response = response_context
  1934. # 3. spi.modifyResponse(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
  1935. self._spi.modify_response(interceptor_context, attribute_map)
  1936. resp = {
  1937. 'headers': interceptor_context.response.headers,
  1938. 'statusCode': interceptor_context.response.status_code,
  1939. 'body': interceptor_context.response.deserialized_body
  1940. }
  1941. return resp
  1942. except Exception as e:
  1943. _context = RetryPolicyContext(
  1944. retries_attempted= _retries_attempted,
  1945. http_request = _last_request,
  1946. http_response = _last_response,
  1947. exception = e
  1948. )
  1949. continue
  1950. raise UnretryableException(_context)
  1951. async def execute_async(
  1952. self,
  1953. params: open_api_util_models.Params,
  1954. request: open_api_util_models.OpenApiRequest,
  1955. runtime: RuntimeOptions,
  1956. ) -> dict:
  1957. _runtime = {
  1958. 'key': runtime.key or self._key,
  1959. 'cert': runtime.cert or self._cert,
  1960. 'ca': runtime.ca or self._ca,
  1961. 'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
  1962. 'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
  1963. 'httpProxy': runtime.http_proxy or self._http_proxy,
  1964. 'httpsProxy': runtime.https_proxy or self._https_proxy,
  1965. 'noProxy': runtime.no_proxy or self._no_proxy,
  1966. 'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
  1967. 'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
  1968. 'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
  1969. 'retryOptions': self._retry_options,
  1970. 'ignoreSSL': runtime.ignore_ssl,
  1971. 'tlsMinVersion': self._tls_min_version,
  1972. 'disableHttp2': bool(self._disable_http_2 or False),
  1973. }
  1974. _last_request = None
  1975. _last_response = None
  1976. _retries_attempted = 0
  1977. _context = RetryPolicyContext(
  1978. retries_attempted= _retries_attempted
  1979. )
  1980. while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
  1981. if _retries_attempted > 0:
  1982. _backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
  1983. if _backoff_time > 0:
  1984. DaraCore.sleep(_backoff_time)
  1985. _retries_attempted = _retries_attempted + 1
  1986. try:
  1987. _request = DaraRequest()
  1988. # spi = new Gateway();//Gateway implements SPI,这一步在产品 SDK 中实例化
  1989. headers = self.get_rpc_headers()
  1990. global_queries = {}
  1991. global_headers = {}
  1992. if not DaraCore.is_null(self._global_parameters):
  1993. global_params = self._global_parameters
  1994. if not DaraCore.is_null(global_params.queries):
  1995. global_queries = global_params.queries
  1996. if not DaraCore.is_null(global_params.headers):
  1997. global_headers = global_params.headers
  1998. extends_headers = {}
  1999. extends_queries = {}
  2000. if not DaraCore.is_null(runtime.extends_parameters):
  2001. extends_parameters = runtime.extends_parameters
  2002. if not DaraCore.is_null(extends_parameters.headers):
  2003. extends_headers = extends_parameters.headers
  2004. if not DaraCore.is_null(extends_parameters.queries):
  2005. extends_queries = extends_parameters.queries
  2006. request_context = spi_models.InterceptorContextRequest(
  2007. headers = DaraCore.merge({}, global_headers, extends_headers, request.headers, headers),
  2008. query = DaraCore.merge({}, global_queries, extends_queries, request.query),
  2009. body = request.body,
  2010. stream = request.stream,
  2011. host_map = request.host_map,
  2012. pathname = params.pathname,
  2013. product_id = self._product_id,
  2014. action = params.action,
  2015. version = params.version,
  2016. protocol = self._protocol or params.protocol,
  2017. method = self._method or params.method,
  2018. auth_type = params.auth_type,
  2019. body_type = params.body_type,
  2020. req_body_type = params.req_body_type,
  2021. style = params.style,
  2022. credential = self._credential,
  2023. signature_version = self._signature_version,
  2024. signature_algorithm = self._signature_algorithm,
  2025. user_agent = Utils.get_user_agent(self._user_agent)
  2026. )
  2027. configuration_context = spi_models.InterceptorContextConfiguration(
  2028. region_id = self._region_id,
  2029. endpoint = request.endpoint_override or self._endpoint,
  2030. endpoint_rule = self._endpoint_rule,
  2031. endpoint_map = self._endpoint_map,
  2032. endpoint_type = self._endpoint_type,
  2033. network = self._network,
  2034. suffix = self._suffix
  2035. )
  2036. interceptor_context = spi_models.InterceptorContext(
  2037. request = request_context,
  2038. configuration = configuration_context
  2039. )
  2040. attribute_map = spi_models.AttributeMap()
  2041. if not DaraCore.is_null(self._attribute_map):
  2042. attribute_map = self._attribute_map
  2043. # 1. spi.modifyConfiguration(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
  2044. await self._spi.modify_configuration_async(interceptor_context, attribute_map)
  2045. # 2. spi.modifyRequest(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
  2046. await self._spi.modify_request_async(interceptor_context, attribute_map)
  2047. _request.protocol = interceptor_context.request.protocol
  2048. _request.method = interceptor_context.request.method
  2049. _request.pathname = interceptor_context.request.pathname
  2050. _request.query = interceptor_context.request.query
  2051. _request.body = interceptor_context.request.stream
  2052. _request.headers = interceptor_context.request.headers
  2053. _last_request = _request
  2054. _response = await DaraCore.async_do_action(_request, _runtime)
  2055. _last_response = _response
  2056. response_context = spi_models.InterceptorContextResponse(
  2057. status_code = _response.status_code,
  2058. headers = _response.headers,
  2059. body = _response.body
  2060. )
  2061. interceptor_context.response = response_context
  2062. # 3. spi.modifyResponse(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
  2063. await self._spi.modify_response_async(interceptor_context, attribute_map)
  2064. resp = {
  2065. 'headers': interceptor_context.response.headers,
  2066. 'statusCode': interceptor_context.response.status_code,
  2067. 'body': interceptor_context.response.deserialized_body
  2068. }
  2069. return resp
  2070. except Exception as e:
  2071. _context = RetryPolicyContext(
  2072. retries_attempted= _retries_attempted,
  2073. http_request = _last_request,
  2074. http_response = _last_response,
  2075. exception = e
  2076. )
  2077. continue
  2078. raise UnretryableException(_context)
  2079. def call_sseapi(
  2080. self,
  2081. params: open_api_util_models.Params,
  2082. request: open_api_util_models.OpenApiRequest,
  2083. runtime: RuntimeOptions,
  2084. ) -> Generator[main_models.SSEResponse, None, None]:
  2085. _runtime = {
  2086. 'key': runtime.key or self._key,
  2087. 'cert': runtime.cert or self._cert,
  2088. 'ca': runtime.ca or self._ca,
  2089. 'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
  2090. 'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
  2091. 'httpProxy': runtime.http_proxy or self._http_proxy,
  2092. 'httpsProxy': runtime.https_proxy or self._https_proxy,
  2093. 'noProxy': runtime.no_proxy or self._no_proxy,
  2094. 'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
  2095. 'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
  2096. 'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
  2097. 'retryOptions': self._retry_options,
  2098. 'ignoreSSL': runtime.ignore_ssl,
  2099. 'tlsMinVersion': self._tls_min_version,
  2100. }
  2101. _last_request = None
  2102. _last_response = None
  2103. _retries_attempted = 0
  2104. _context = RetryPolicyContext(
  2105. retries_attempted= _retries_attempted
  2106. )
  2107. while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
  2108. if _retries_attempted > 0:
  2109. _backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
  2110. if _backoff_time > 0:
  2111. DaraCore.sleep(_backoff_time)
  2112. _retries_attempted = _retries_attempted + 1
  2113. try:
  2114. _request = DaraRequest()
  2115. _request.protocol = self._protocol or params.protocol
  2116. _request.method = params.method
  2117. _request.pathname = params.pathname
  2118. global_queries = {}
  2119. global_headers = {}
  2120. if not DaraCore.is_null(self._global_parameters):
  2121. global_params = self._global_parameters
  2122. if not DaraCore.is_null(global_params.queries):
  2123. global_queries = global_params.queries
  2124. if not DaraCore.is_null(global_params.headers):
  2125. global_headers = global_params.headers
  2126. extends_headers = {}
  2127. extends_queries = {}
  2128. if not DaraCore.is_null(runtime.extends_parameters):
  2129. extends_parameters = runtime.extends_parameters
  2130. if not DaraCore.is_null(extends_parameters.headers):
  2131. extends_headers = extends_parameters.headers
  2132. if not DaraCore.is_null(extends_parameters.queries):
  2133. extends_queries = extends_parameters.queries
  2134. _request.query = DaraCore.merge({}, global_queries, extends_queries, request.query)
  2135. # endpoint is setted in product client
  2136. _request.headers = DaraCore.merge({
  2137. 'host': self._endpoint,
  2138. 'x-acs-version': params.version,
  2139. 'x-acs-action': params.action,
  2140. 'user-agent': Utils.get_user_agent(self._user_agent),
  2141. 'x-acs-date': Utils.get_timestamp(),
  2142. 'x-acs-signature-nonce': Utils.get_nonce(),
  2143. 'accept': 'application/json',
  2144. }, extends_headers, global_headers, request.headers)
  2145. if params.style == 'RPC':
  2146. headers = self.get_rpc_headers()
  2147. if not DaraCore.is_null(headers):
  2148. _request.headers = DaraCore.merge({}, _request.headers, headers)
  2149. signature_algorithm = self._signature_algorithm or 'ACS3-HMAC-SHA256'
  2150. hashed_request_payload = Utils.hash(DaraBytes.from_('', 'utf-8'), signature_algorithm)
  2151. if not DaraCore.is_null(request.stream):
  2152. tmp = DaraStream.read_as_bytes(request.stream)
  2153. hashed_request_payload = Utils.hash(tmp, signature_algorithm)
  2154. _request.body = tmp
  2155. _request.headers["content-type"] = 'application/octet-stream'
  2156. else:
  2157. if not DaraCore.is_null(request.body):
  2158. if params.req_body_type == 'byte':
  2159. byte_obj = bytes(request.body)
  2160. hashed_request_payload = Utils.hash(byte_obj, signature_algorithm)
  2161. _request.body = byte_obj
  2162. elif params.req_body_type == 'json':
  2163. json_obj = DaraCore.to_json_string(request.body)
  2164. hashed_request_payload = Utils.hash(json_obj.encode('utf-8'), signature_algorithm)
  2165. _request.body = json_obj
  2166. _request.headers["content-type"] = 'application/json; charset=utf-8'
  2167. else:
  2168. m = request.body
  2169. form_obj = Utils.to_form(m)
  2170. hashed_request_payload = Utils.hash(form_obj.encode('utf-8'), signature_algorithm)
  2171. _request.body = form_obj
  2172. _request.headers["content-type"] = 'application/x-www-form-urlencoded'
  2173. _request.headers["x-acs-content-sha256"] = hashed_request_payload.hex()
  2174. if params.auth_type != 'Anonymous':
  2175. credential_model = self._credential.get_credential()
  2176. if not DaraCore.is_null(credential_model.provider_name):
  2177. _request.headers["x-acs-credentials-provider"] = credential_model.provider_name
  2178. auth_type = credential_model.type
  2179. if auth_type == 'bearer':
  2180. bearer_token = credential_model.bearer_token
  2181. _request.headers["x-acs-bearer-token"] = bearer_token
  2182. elif auth_type == 'id_token':
  2183. id_token = credential_model.security_token
  2184. _request.headers["x-acs-zero-trust-idtoken"] = id_token
  2185. else:
  2186. access_key_id = credential_model.access_key_id
  2187. access_key_secret = credential_model.access_key_secret
  2188. security_token = credential_model.security_token
  2189. if not DaraCore.is_null(security_token) and security_token != '':
  2190. _request.headers["x-acs-accesskey-id"] = access_key_id
  2191. _request.headers["x-acs-security-token"] = security_token
  2192. _request.headers["Authorization"] = Utils.get_authorization(_request, signature_algorithm, hashed_request_payload.hex(), access_key_id, access_key_secret)
  2193. _last_request = _request
  2194. _response = DaraCore.do_sse_action(_request, _runtime)
  2195. _last_response = _response
  2196. if (_response.status_code >= 400) and (_response.status_code < 600):
  2197. err = {}
  2198. if not DaraCore.is_null(_response.headers.get("content-type")) and _response.headers.get("content-type") == 'text/xml;charset=utf-8':
  2199. _str = DaraStream.read_as_string(_response.body)
  2200. resp_map = DaraXML.parse_xml(_str, None)
  2201. err = resp_map.get("Error")
  2202. else:
  2203. _res = DaraStream.read_as_json(_response.body)
  2204. err = _res
  2205. err["statusCode"] = _response.status_code
  2206. raise DaraException({
  2207. 'code': f'{err.get("Code") or err.get("code")}',
  2208. 'message': f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {err.get("RequestId") or err.get("requestId")}',
  2209. 'data': err,
  2210. 'description': f'{err.get("Description") or err.get("description")}',
  2211. 'accessDeniedDetail': err.get("AccessDeniedDetail") or err.get("accessDeniedDetail")
  2212. })
  2213. events = DaraStream.read_as_sse(_response.body)
  2214. for event in events:
  2215. yield main_models.SSEResponse(
  2216. status_code = _response.status_code,
  2217. headers = _response.headers,
  2218. event = event
  2219. )
  2220. return
  2221. except Exception as e:
  2222. _context = RetryPolicyContext(
  2223. retries_attempted= _retries_attempted,
  2224. http_request = _last_request,
  2225. http_response = _last_response,
  2226. exception = e
  2227. )
  2228. continue
  2229. raise UnretryableException(_context)
  2230. async def call_sseapi_async(
  2231. self,
  2232. params: open_api_util_models.Params,
  2233. request: open_api_util_models.OpenApiRequest,
  2234. runtime: RuntimeOptions,
  2235. ) -> AsyncGenerator[main_models.SSEResponse, None, None]:
  2236. _runtime = {
  2237. 'key': runtime.key or self._key,
  2238. 'cert': runtime.cert or self._cert,
  2239. 'ca': runtime.ca or self._ca,
  2240. 'readTimeout': DaraCore.to_number(runtime.read_timeout or self._read_timeout),
  2241. 'connectTimeout': DaraCore.to_number(runtime.connect_timeout or self._connect_timeout),
  2242. 'httpProxy': runtime.http_proxy or self._http_proxy,
  2243. 'httpsProxy': runtime.https_proxy or self._https_proxy,
  2244. 'noProxy': runtime.no_proxy or self._no_proxy,
  2245. 'socks5Proxy': runtime.socks_5proxy or self._socks_5proxy,
  2246. 'socks5NetWork': runtime.socks_5net_work or self._socks_5net_work,
  2247. 'maxIdleConns': DaraCore.to_number(runtime.max_idle_conns or self._max_idle_conns),
  2248. 'retryOptions': self._retry_options,
  2249. 'ignoreSSL': runtime.ignore_ssl,
  2250. 'tlsMinVersion': self._tls_min_version,
  2251. }
  2252. _last_request = None
  2253. _last_response = None
  2254. _retries_attempted = 0
  2255. _context = RetryPolicyContext(
  2256. retries_attempted= _retries_attempted
  2257. )
  2258. while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
  2259. if _retries_attempted > 0:
  2260. _backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
  2261. if _backoff_time > 0:
  2262. DaraCore.sleep(_backoff_time)
  2263. _retries_attempted = _retries_attempted + 1
  2264. try:
  2265. _request = DaraRequest()
  2266. _request.protocol = self._protocol or params.protocol
  2267. _request.method = params.method
  2268. _request.pathname = params.pathname
  2269. global_queries = {}
  2270. global_headers = {}
  2271. if not DaraCore.is_null(self._global_parameters):
  2272. global_params = self._global_parameters
  2273. if not DaraCore.is_null(global_params.queries):
  2274. global_queries = global_params.queries
  2275. if not DaraCore.is_null(global_params.headers):
  2276. global_headers = global_params.headers
  2277. extends_headers = {}
  2278. extends_queries = {}
  2279. if not DaraCore.is_null(runtime.extends_parameters):
  2280. extends_parameters = runtime.extends_parameters
  2281. if not DaraCore.is_null(extends_parameters.headers):
  2282. extends_headers = extends_parameters.headers
  2283. if not DaraCore.is_null(extends_parameters.queries):
  2284. extends_queries = extends_parameters.queries
  2285. _request.query = DaraCore.merge({}, global_queries, extends_queries, request.query)
  2286. # endpoint is setted in product client
  2287. _request.headers = DaraCore.merge({
  2288. 'host': self._endpoint,
  2289. 'x-acs-version': params.version,
  2290. 'x-acs-action': params.action,
  2291. 'user-agent': Utils.get_user_agent(self._user_agent),
  2292. 'x-acs-date': Utils.get_timestamp(),
  2293. 'x-acs-signature-nonce': Utils.get_nonce(),
  2294. 'accept': 'application/json',
  2295. }, extends_headers, global_headers, request.headers)
  2296. if params.style == 'RPC':
  2297. headers = self.get_rpc_headers()
  2298. if not DaraCore.is_null(headers):
  2299. _request.headers = DaraCore.merge({}, _request.headers, headers)
  2300. signature_algorithm = self._signature_algorithm or 'ACS3-HMAC-SHA256'
  2301. hashed_request_payload = Utils.hash(DaraBytes.from_('', 'utf-8'), signature_algorithm)
  2302. if not DaraCore.is_null(request.stream):
  2303. tmp = await DaraStream.read_as_bytes_async(request.stream)
  2304. hashed_request_payload = Utils.hash(tmp, signature_algorithm)
  2305. _request.body = tmp
  2306. _request.headers["content-type"] = 'application/octet-stream'
  2307. else:
  2308. if not DaraCore.is_null(request.body):
  2309. if params.req_body_type == 'byte':
  2310. byte_obj = bytes(request.body)
  2311. hashed_request_payload = Utils.hash(byte_obj, signature_algorithm)
  2312. _request.body = byte_obj
  2313. elif params.req_body_type == 'json':
  2314. json_obj = DaraCore.to_json_string(request.body)
  2315. hashed_request_payload = Utils.hash(json_obj.encode('utf-8'), signature_algorithm)
  2316. _request.body = json_obj
  2317. _request.headers["content-type"] = 'application/json; charset=utf-8'
  2318. else:
  2319. m = request.body
  2320. form_obj = Utils.to_form(m)
  2321. hashed_request_payload = Utils.hash(form_obj.encode('utf-8'), signature_algorithm)
  2322. _request.body = form_obj
  2323. _request.headers["content-type"] = 'application/x-www-form-urlencoded'
  2324. _request.headers["x-acs-content-sha256"] = hashed_request_payload.hex()
  2325. if params.auth_type != 'Anonymous':
  2326. credential_model = await self._credential.get_credential_async()
  2327. if not DaraCore.is_null(credential_model.provider_name):
  2328. _request.headers["x-acs-credentials-provider"] = credential_model.provider_name
  2329. auth_type = credential_model.type
  2330. if auth_type == 'bearer':
  2331. bearer_token = credential_model.bearer_token
  2332. _request.headers["x-acs-bearer-token"] = bearer_token
  2333. elif auth_type == 'id_token':
  2334. id_token = credential_model.security_token
  2335. _request.headers["x-acs-zero-trust-idtoken"] = id_token
  2336. else:
  2337. access_key_id = credential_model.access_key_id
  2338. access_key_secret = credential_model.access_key_secret
  2339. security_token = credential_model.security_token
  2340. if not DaraCore.is_null(security_token) and security_token != '':
  2341. _request.headers["x-acs-accesskey-id"] = access_key_id
  2342. _request.headers["x-acs-security-token"] = security_token
  2343. _request.headers["Authorization"] = Utils.get_authorization(_request, signature_algorithm, hashed_request_payload.hex(), access_key_id, access_key_secret)
  2344. _last_request = _request
  2345. _response = await DaraCore.async_do_sse_action(_request, _runtime)
  2346. _last_response = _response
  2347. if (_response.status_code >= 400) and (_response.status_code < 600):
  2348. err = {}
  2349. if not DaraCore.is_null(_response.headers.get("content-type")) and _response.headers.get("content-type") == 'text/xml;charset=utf-8':
  2350. _str = await DaraStream.read_as_string_async(_response.body)
  2351. resp_map = DaraXML.parse_xml(_str, None)
  2352. err = resp_map.get("Error")
  2353. else:
  2354. _res = await DaraStream.read_as_json_async(_response.body)
  2355. err = _res
  2356. err["statusCode"] = _response.status_code
  2357. raise DaraException({
  2358. 'code': f'{err.get("Code") or err.get("code")}',
  2359. 'message': f'code: {_response.status_code}, {err.get("Message") or err.get("message")} request id: {err.get("RequestId") or err.get("requestId")}',
  2360. 'data': err,
  2361. 'description': f'{err.get("Description") or err.get("description")}',
  2362. 'accessDeniedDetail': err.get("AccessDeniedDetail") or err.get("accessDeniedDetail")
  2363. })
  2364. events = DaraStream.read_as_sse_async(_response.body)
  2365. async for event in events:
  2366. yield main_models.SSEResponse(
  2367. status_code = _response.status_code,
  2368. headers = _response.headers,
  2369. event = event
  2370. )
  2371. return
  2372. except Exception as e:
  2373. _context = RetryPolicyContext(
  2374. retries_attempted= _retries_attempted,
  2375. http_request = _last_request,
  2376. http_response = _last_response,
  2377. exception = e
  2378. )
  2379. continue
  2380. raise UnretryableException(_context)
  2381. def call_api(
  2382. self,
  2383. params: open_api_util_models.Params,
  2384. request: open_api_util_models.OpenApiRequest,
  2385. runtime: RuntimeOptions,
  2386. ) -> dict:
  2387. if DaraCore.is_null(params):
  2388. raise main_exceptions.ClientException(
  2389. code = 'ParameterMissing',
  2390. message = '\'params\' can not be unset'
  2391. )
  2392. if DaraCore.is_null(self._signature_version) or self._signature_version != 'v4':
  2393. if DaraCore.is_null(self._signature_algorithm) or self._signature_algorithm != 'v2':
  2394. return self.do_request(params, request, runtime)
  2395. elif (params.style == 'ROA') and (params.req_body_type == 'json'):
  2396. return self.do_roarequest(params.action, params.version, params.protocol, params.method, params.auth_type, params.pathname, params.body_type, request, runtime)
  2397. elif params.style == 'ROA':
  2398. return self.do_roarequest_with_form(params.action, params.version, params.protocol, params.method, params.auth_type, params.pathname, params.body_type, request, runtime)
  2399. else:
  2400. return self.do_rpcrequest(params.action, params.version, params.protocol, params.method, params.auth_type, params.body_type, request, runtime)
  2401. else:
  2402. return self.execute(params, request, runtime)
  2403. async def call_api_async(
  2404. self,
  2405. params: open_api_util_models.Params,
  2406. request: open_api_util_models.OpenApiRequest,
  2407. runtime: RuntimeOptions,
  2408. ) -> dict:
  2409. if DaraCore.is_null(params):
  2410. raise main_exceptions.ClientException(
  2411. code = 'ParameterMissing',
  2412. message = '\'params\' can not be unset'
  2413. )
  2414. if DaraCore.is_null(self._signature_version) or self._signature_version != 'v4':
  2415. if DaraCore.is_null(self._signature_algorithm) or self._signature_algorithm != 'v2':
  2416. return await self.do_request_async(params, request, runtime)
  2417. elif (params.style == 'ROA') and (params.req_body_type == 'json'):
  2418. return await self.do_roarequest_async(params.action, params.version, params.protocol, params.method, params.auth_type, params.pathname, params.body_type, request, runtime)
  2419. elif params.style == 'ROA':
  2420. 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)
  2421. else:
  2422. return await self.do_rpcrequest_async(params.action, params.version, params.protocol, params.method, params.auth_type, params.body_type, request, runtime)
  2423. else:
  2424. return await self.execute_async(params, request, runtime)
  2425. def get_access_key_id(self) -> str:
  2426. if DaraCore.is_null(self._credential):
  2427. return ''
  2428. access_key_id = self._credential.get_access_key_id()
  2429. return access_key_id
  2430. async def get_access_key_id_async(self) -> str:
  2431. if DaraCore.is_null(self._credential):
  2432. return ''
  2433. access_key_id = await self._credential.get_access_key_id_async()
  2434. return access_key_id
  2435. def get_access_key_secret(self) -> str:
  2436. if DaraCore.is_null(self._credential):
  2437. return ''
  2438. secret = self._credential.get_access_key_secret()
  2439. return secret
  2440. async def get_access_key_secret_async(self) -> str:
  2441. if DaraCore.is_null(self._credential):
  2442. return ''
  2443. secret = await self._credential.get_access_key_secret_async()
  2444. return secret
  2445. def get_security_token(self) -> str:
  2446. if DaraCore.is_null(self._credential):
  2447. return ''
  2448. token = self._credential.get_security_token()
  2449. return token
  2450. async def get_security_token_async(self) -> str:
  2451. if DaraCore.is_null(self._credential):
  2452. return ''
  2453. token = await self._credential.get_security_token_async()
  2454. return token
  2455. def get_bearer_token(self) -> str:
  2456. if DaraCore.is_null(self._credential):
  2457. return ''
  2458. token = self._credential.get_bearer_token()
  2459. return token
  2460. async def get_bearer_token_async(self) -> str:
  2461. if DaraCore.is_null(self._credential):
  2462. return ''
  2463. token = self._credential.get_bearer_token()
  2464. return token
  2465. def get_type(self) -> str:
  2466. if DaraCore.is_null(self._credential):
  2467. return ''
  2468. auth_type = self._credential.get_type()
  2469. return auth_type
  2470. async def get_type_async(self) -> str:
  2471. if DaraCore.is_null(self._credential):
  2472. return ''
  2473. auth_type = self._credential.get_type()
  2474. return auth_type
  2475. def check_config(
  2476. self,
  2477. config: open_api_util_models.Config,
  2478. ) -> None:
  2479. if DaraCore.is_null(self._endpoint_rule) and DaraCore.is_null(config.endpoint):
  2480. raise main_exceptions.ClientException(
  2481. code = 'ParameterMissing',
  2482. message = '\'config.endpoint\' can not be empty'
  2483. )
  2484. def set_gateway_client(
  2485. self,
  2486. spi: SPIClient,
  2487. ) -> None:
  2488. self._spi = spi
  2489. def set_rpc_headers(
  2490. self,
  2491. headers: Dict[str, str],
  2492. ) -> None:
  2493. self._headers = headers
  2494. def get_rpc_headers(self) -> Dict[str, str]:
  2495. headers = self._headers
  2496. self._headers = None
  2497. return headers
  2498. def default_any(
  2499. input_value: Any,
  2500. default_value: Any,
  2501. ) -> Any:
  2502. if DaraCore.is_null(input_value):
  2503. return default_value
  2504. return input_value
  2505. def get_access_denied_detail(
  2506. self,
  2507. err: Dict[str, Any],
  2508. ) -> Dict[str, Any]:
  2509. access_denied_detail = None
  2510. if not DaraCore.is_null(err.get("AccessDeniedDetail")):
  2511. detail_1 = err.get("AccessDeniedDetail")
  2512. access_denied_detail = detail_1
  2513. elif not DaraCore.is_null(err.get("accessDeniedDetail")):
  2514. detail_2 = err.get("accessDeniedDetail")
  2515. access_denied_detail = detail_2
  2516. return access_denied_detail