in footmark/connection.py [0:0]
def make_request_new(self, params):
if not params:
raise Exception("Request parameters should not be empty.")
conn = None
if self.acs_access_key_id and self.acs_secret_access_key:
conn = client.AcsClient(self.acs_access_key_id, self.acs_secret_access_key, self.region, user_agent=self.user_agent)
if self.security_token:
sts_token_credential = StsTokenCredential(self.access_key, self.secret_key, self.security_token)
conn = client.AcsClient(region_id=self.region, user_agent=self.user_agent, credential=sts_token_credential)
else:
if self.ecs_role_name:
ecs_ram_role_credential = EcsRamRoleCredential(self.ecs_role_name)
conn = client.AcsClient(region_id=self.region, user_agent=self.user_agent, credential=ecs_ram_role_credential)
if not conn:
footmark.log.error('%s %s' % ('Null AcsClient ', conn))
raise self.FootmarkClientError('Null AcsClient ', conn)
timeout = 200
delay = 3
if not isinstance(params, dict):
raise Exception("Invalid request parameters: {0} should be a dict.".format(params))
if not params.get('Action', params.get('action')):
raise Exception("'Action' is required for this request.")
while timeout > 0:
request = self.import_request(params.get('Action', params.get('action')))
request.set_accept_format('json')
request.set_read_timeout(30)
request.set_connect_timeout(30)
try:
for k, v in list(params.items()):
if hasattr(request, k):
getattr(request, k)(v)
else:
request.add_query_param(k[4:], v)
return conn.do_action_with_exception(request)
except ServerException as e:
if str(e.error_code) == "SDK.ServerUnreachable" \
or str(e.message).__contains__("SDK.ServerUnreachable") \
or str(e.message).__contains__("Unable to connect server: timed out"):
time.sleep(delay)
timeout -= delay
continue
raise e
except Exception as e:
raise e
return None