def do_request(self, method, action, body=None, headers=None, params=None): # Add format and tenant_id action += ".%s" % self.format action = self.action_prefix + action if type(params) is dict and params: params = utils.safe_encode_dict(params) action += '?' + urllib.urlencode(params, doseq=1) # Ensure client always has correct uri - do not guesstimate anything self.httpclient.authenticate_and_fetch_endpoint_url() self._check_uri_length(action) if body: body = self.serialize(body) self.httpclient.content_type = self.content_type() resp, replybody = self.httpclient.do_request(action, method, body=body) status_code = resp.status_code if status_code in (requests.codes.ok, requests.codes.created, requests.codes.accepted, requests.codes.no_content): return self.deserialize(replybody, status_code) else: if not replybody: replybody = resp.reason self._handle_fault_response(status_code, replybody)
def request(self, url, method, **kwargs): kwargs.setdefault("user_agent", self.USER_AGENT) kwargs.setdefault("auth", self.auth) kwargs.setdefault("authenticated", False) try: kwargs["data"] = kwargs.pop("body") except KeyError: pass endpoint_filter = kwargs.setdefault("endpoint_filter", {}) endpoint_filter.setdefault("interface", self.interface) endpoint_filter.setdefault("service_type", self.service_type) endpoint_filter.setdefault("region_name", self.region_name) kwargs = utils.safe_encode_dict(kwargs) resp = self.session.request(url, method, **kwargs) return resp, resp.text
def request(self, url, method, **kwargs): kwargs.setdefault('user_agent', self.USER_AGENT) kwargs.setdefault('auth', self.auth) kwargs.setdefault('authenticated', False) try: kwargs['data'] = kwargs.pop('body') except KeyError: pass endpoint_filter = kwargs.setdefault('endpoint_filter', {}) endpoint_filter.setdefault('interface', self.interface) endpoint_filter.setdefault('service_type', self.service_type) endpoint_filter.setdefault('region_name', self.region_name) kwargs = utils.safe_encode_dict(kwargs) resp = self.session.request(url, method, **kwargs) return resp, resp.text
def _cs_request(self, *args, **kwargs): kargs = {} kargs.setdefault("headers", kwargs.get("headers", {})) kargs["headers"]["User-Agent"] = self.USER_AGENT if "content_type" in kwargs: kargs["headers"]["Content-Type"] = kwargs["content_type"] kargs["headers"]["Accept"] = kwargs["content_type"] else: kargs["headers"]["Content-Type"] = self.content_type kargs["headers"]["Accept"] = self.content_type if "body" in kwargs: kargs["body"] = kwargs["body"] args = utils.safe_encode_list(args) kargs = utils.safe_encode_dict(kargs) if self.log_credentials: log_kargs = kargs else: log_kargs = self._strip_credentials(kargs) utils.http_log_req(_logger, args, log_kargs) try: resp, body = self.request(*args, **kargs) except requests.exceptions.SSLError as e: raise exceptions.SslCertificateValidationError(reason=e) except Exception as e: # Wrap the low-level connection error (socket timeout, redirect # limit, decompression error, etc) into our custom high-level # connection exception (it is excepted in the upper layers of code) _logger.debug("throwing ConnectionFailed : %s", e) raise exceptions.ConnectionFailed(reason=e) utils.http_log_resp(_logger, resp, body) if resp.status_code == 401: raise exceptions.Unauthorized(message=body) return resp, body
def _cs_request(self, *args, **kwargs): kargs = {} kargs.setdefault('headers', kwargs.get('headers', {})) kargs['headers']['User-Agent'] = self.USER_AGENT if 'content_type' in kwargs: kargs['headers']['Content-Type'] = kwargs['content_type'] kargs['headers']['Accept'] = kwargs['content_type'] else: kargs['headers']['Content-Type'] = self.content_type kargs['headers']['Accept'] = self.content_type if 'body' in kwargs: kargs['body'] = kwargs['body'] args = utils.safe_encode_list(args) kargs = utils.safe_encode_dict(kargs) if self.log_credentials: log_kargs = kargs else: log_kargs = self._strip_credentials(kargs) utils.http_log_req(_logger, args, log_kargs) try: resp, body = self.request(*args, **kargs) except requests.exceptions.SSLError as e: raise exceptions.SslCertificateValidationError(reason=e) except Exception as e: # Wrap the low-level connection error (socket timeout, redirect # limit, decompression error, etc) into our custom high-level # connection exception (it is excepted in the upper layers of code) _logger.debug("throwing ConnectionFailed : %s", e) raise exceptions.ConnectionFailed(reason=e) utils.http_log_resp(_logger, resp, body) if resp.status_code == 401: raise exceptions.Unauthorized(message=body) return resp, body