def __get_secret_value(self, secret_name):
     get_secret_request = RpcRequest('Kms', '2016-01-20', 'GetSecretValue',
                                     'kms')
     get_secret_request._protocol_type = "https"
     get_secret_request.add_query_param('SecretName', secret_name)
     get_secret_request.add_query_param('VersionStage', self.stage)
     get_secret_request.add_query_param('FetchExtendedConfig', True)
     get_secret_request.set_accept_format("JSON")
     try:
         get_secret_resp = self.secret_client.get_secret_value(
             get_secret_request)
         resp_json = json.loads(get_secret_resp.decode(encoding="utf-8"))
     except ClientException as e:
         get_logger().error("action:get_secret_value", exc_info=True)
         if judge_need_recovery_exception(e):
             try:
                 secret_info = self.cache_hook.recovery_get_secret(
                     secret_name)
                 if secret_info is not None:
                     return secret_info
                 else:
                     raise e
             except ClientException:
                 get_logger().error("action:recovery_get_secret",
                                    exc_info=True)
                 raise e
         else:
             raise e
     return convert_json_to_secret_info(resp_json)
 def get_secret_value(self, get_secret_value_req):
     futures = []
     finished = []
     if self.signer is not None and isinstance(self.signer,
                                               ClientKeySigner):
         get_secret_value_req._signer = sha_hmac256
     for i in range(len(self.region_info_list)):
         if i == 0:
             try:
                 return self.__get_secret_value(
                     self.region_info_list[i], get_secret_value_req)
             except ClientException as e:
                 get_logger().error("action:__get_secret_value",
                                    exc_info=True)
                 if not judge_need_recovery_exception(e):
                     raise e
         get_secret_request = RpcRequest(
             get_secret_value_req._product,
             get_secret_value_req._version,
             get_secret_value_req._action_name,
             get_secret_value_req._location_service_code,
             signer=get_secret_value_req._signer)
         get_secret_request._protocol_type = get_secret_value_req._protocol_type
         get_secret_request.add_query_param(
             'SecretName',
             get_secret_value_req.get_query_params().get('SecretName'))
         get_secret_request.add_query_param(
             'VersionStage',
             get_secret_value_req.get_query_params().get(
                 'VersionStage'))
         get_secret_request.add_query_param(
             'FetchExtendedConfig',
             get_secret_value_req.get_query_params().get(
                 'FetchExtendedConfig'))
         future = self.pool.submit(self.__retry_get_secret_value,
                                   get_secret_request,
                                   self.region_info_list[i], finished)
         futures.append(future)
     try:
         if wait(futures,
                 self.request_waiting_time,
                 return_when=FIRST_COMPLETED):
             for future in futures:
                 if not future.done():
                     future.cancel()
                 else:
                     return future.result()
     except Exception as e:
         get_logger().error("action:__retry_get_secret_value_task",
                            exc_info=True)
         raise e
     finally:
         finished.append(True)
     raise ClientException(error_code.SDK_HTTP_ERROR,
                           "refreshSecretTask fail")