def test_get_timestamp(self): self.assertIsNotNone(Client.get_timestamp()) self.assertIn("T", Client.get_timestamp()) self.assertIn("Z", Client.get_timestamp())
def do_request(self, action, protocol, method, version, auth_type, query, body, runtime): """ Encapsulate the request and invoke the network @type action: unicode @param action: api name @type protocol: unicode @param protocol: http or https @type method: unicode @param method: e.g. GET @type version: unicode @param version: product version @type auth_type: unicode @param auth_type: when authType is Anonymous, the signature will not be calculate @param pathname: pathname of every api @type query: dict @param query: which contains request params @type body: dict @param body: content of request @param runtime: which controls some details of call api, such as retry times @rtype: dict @return: the response """ runtime.validate() _runtime = { 'timeouted': 'retry', 'readTimeout': UtilClient.default_number(runtime.read_timeout, self._read_timeout), 'connectTimeout': UtilClient.default_number(runtime.connect_timeout, self._connect_timeout), 'httpProxy': UtilClient.default_string(runtime.http_proxy, self._http_proxy), 'httpsProxy': UtilClient.default_string(runtime.https_proxy, self._https_proxy), 'noProxy': UtilClient.default_string(runtime.no_proxy, self._no_proxy), 'maxIdleConns': UtilClient.default_number(runtime.max_idle_conns, self._max_idle_conns), 'retry': { 'retryable': runtime.autoretry, 'maxAttempts': UtilClient.default_number(runtime.max_attempts, 3) }, 'backoff': { 'policy': UtilClient.default_string(runtime.backoff_policy, 'no'), 'period': UtilClient.default_number(runtime.backoff_period, 1) }, 'ignoreSSL': runtime.ignore_ssl } _last_request = None _last_exception = None _now = time.time() _retry_times = 0 while TeaCore.allow_retry(_runtime.get('retry'), _retry_times, _now): if _retry_times > 0: _backoff_time = TeaCore.get_backoff_time(_runtime.get('backoff'), _retry_times) if _backoff_time > 0: TeaCore.sleep(_backoff_time) _retry_times = _retry_times + 1 try: _request = TeaRequest() _request.protocol = UtilClient.default_string(self._protocol, protocol) _request.method = method _request.pathname = '/' _request.query = RPCUtilClient.query(TeaCore.merge({ 'Action': action, 'Format': 'json', 'Timestamp': RPCUtilClient.get_timestamp(), 'Version': version, 'SignatureNonce': UtilClient.get_nonce() }, query)) # endpoint is setted in product client _request.headers = { 'x-acs-version': version, 'x-acs-action': action, 'host': self._endpoint, 'user-agent': self.get_user_agent() } if not UtilClient.is_unset(body): tmp = UtilClient.anyify_map_value(RPCUtilClient.query(body)) _request.body = UtilClient.to_form_string(tmp) _request.headers['content-type'] = 'application/x-www-form-urlencoded' if not UtilClient.equal_string(auth_type, 'Anonymous'): access_key_id = self.get_access_key_id() access_key_secret = self.get_access_key_secret() security_token = self.get_security_token() if not UtilClient.empty(security_token): _request.query['SecurityToken'] = security_token _request.query['SignatureMethod'] = 'HMAC-SHA1' _request.query['SignatureVersion'] = '1.0' _request.query['AccessKeyId'] = access_key_id signed_param = TeaCore.merge(_request.query, RPCUtilClient.query(body)) _request.query['Signature'] = RPCUtilClient.get_signature_v1(signed_param, _request.method, access_key_secret) _last_request = _request _response = TeaCore.do_action(_request, _runtime) obj = UtilClient.read_as_json(_response.body) res = UtilClient.assert_as_map(obj) if UtilClient.is_4xx(_response.status_code) or UtilClient.is_5xx(_response.status_code): raise TeaException({ 'code': '%s' % TeaConverter.to_unicode(self.default_any(res.get('Code'), res.get('code'))), 'message': 'code: %s, %s request id: %s' % (TeaConverter.to_unicode(_response.status_code), TeaConverter.to_unicode(self.default_any(res.get('Message'), res.get('message'))), TeaConverter.to_unicode(self.default_any(res.get('RequestId'), res.get('requestId')))), 'data': res }) return res except Exception as e: if TeaCore.is_retryable(e): _last_exception = e continue raise e raise UnretryableException(_last_request, _last_exception)