def request(self, method, url, extra_headers=False, headers=None, body=None, chunked=False): """A simple HTTP request interface. Note: this overloads the `request` method from the parent class and thus must implement the same method signature. """ if headers is None: # Always accept 'json', for xml token client too. # Because XML response is not easily # converted to the corresponding JSON one headers = self.get_headers(accept_type="json") elif extra_headers: try: headers.update(self.get_headers(accept_type="json")) except (ValueError, TypeError): headers = self.get_headers(accept_type="json") resp, resp_body = self.raw_request(url, method, headers=headers, body=body) self._log_request(method, url, resp, req_headers=headers, req_body='<omitted>', resp_body=resp_body) if resp.status in [401, 403]: resp_body = json.loads(resp_body) raise exceptions.Unauthorized(resp_body['error']['message']) elif resp.status not in [200, 201, 204]: raise exceptions.IdentityError( 'Unexpected status code {0}'.format(resp.status)) return resp, json.loads(resp_body)
def __init__(self, auth_url, disable_ssl_certificate_validation=None, ca_certs=None, trace_requests=None, **kwargs): """Initialises the Token client :param auth_url: URL to which the token request is sent :param disable_ssl_certificate_validation: pass-through to rest client :param ca_certs: pass-through to rest client :param trace_requests: pass-through to rest client :param kwargs: any extra parameter to pass through the rest client. Three kwargs are forbidden: region, service and auth_provider as they are not meaningful for token client """ dscv = disable_ssl_certificate_validation for unwanted_kwargs in ['region', 'service', 'auth_provider']: kwargs.pop(unwanted_kwargs, None) super(V3TokenClient, self).__init__(None, None, None, disable_ssl_certificate_validation=dscv, ca_certs=ca_certs, trace_requests=trace_requests, **kwargs) if auth_url is None: raise exceptions.IdentityError("Couldn't determine auth_url") if 'auth/tokens' not in auth_url: auth_url = auth_url.rstrip('/') + '/auth/tokens' self.auth_url = auth_url
def request(self, method, url, extra_headers=False, headers=None, body=None, chunked=False): """A simple HTTP request interface. Note: this overloads the `request` method from the parent class and thus must implement the same method signature. """ if headers is None: headers = self.get_headers(accept_type="json") elif extra_headers: try: headers.update(self.get_headers(accept_type="json")) except (ValueError, TypeError): headers = self.get_headers(accept_type="json") resp, resp_body = self.raw_request(url, method, headers=headers, body=body, log_req_body='<omitted>') if resp.status in [401, 403]: resp_body = json.loads(resp_body) raise exceptions.Unauthorized(resp_body['error']['message']) elif resp.status not in [200, 201]: raise exceptions.IdentityError('Unexpected status code {0}'.format( resp.status)) return resp, json.loads(resp_body)
def __init__(self, auth_url, disable_ssl_certificate_validation=None, ca_certs=None, trace_requests=None): dscv = disable_ssl_certificate_validation super(V3TokenClient, self).__init__( None, None, None, disable_ssl_certificate_validation=dscv, ca_certs=ca_certs, trace_requests=trace_requests) if auth_url is None: raise exceptions.IdentityError("Couldn't determine auth_url") if 'auth/tokens' not in auth_url: auth_url = auth_url.rstrip('/') + '/auth/tokens' self.auth_url = auth_url
def __init__(self, auth_url, disable_ssl_certificate_validation=None, ca_certs=None, trace_requests=None, **kwargs): """Initialises the Token client :param auth_url: URL to which the token request is sent :param disable_ssl_certificate_validation: pass-through to rest client :param ca_certs: pass-through to rest client :param trace_requests: pass-through to rest client :param kwargs: any extra parameter to pass through the rest client. region, service and auth_provider will be ignored, if passed, as they are not meaningful for token client """ dscv = disable_ssl_certificate_validation # NOTE(andreaf) region, service and auth_provider are passed # positionally with None. Having them in kwargs would raise a # "multiple values for keyword arguments" error for unwanted_kwargs in ['region', 'service', 'auth_provider']: kwargs.pop(unwanted_kwargs, None) super(TokenClient, self).__init__(None, None, None, disable_ssl_certificate_validation=dscv, ca_certs=ca_certs, trace_requests=trace_requests, **kwargs) if auth_url is None: raise exceptions.IdentityError("Couldn't determine auth_url") # Normalize URI to ensure /tokens is in it. if 'tokens' not in auth_url: auth_url = auth_url.rstrip('/') + '/tokens' self.auth_url = auth_url
def __init__(self, auth_url, disable_ssl_certificate_validation=None, ca_certs=None, trace_requests=None, **kwargs): dscv = disable_ssl_certificate_validation super(TokenClient, self).__init__(None, None, None, disable_ssl_certificate_validation=dscv, ca_certs=ca_certs, trace_requests=trace_requests, **kwargs) if auth_url is None: raise exceptions.IdentityError("Couldn't determine auth_url") # Normalize URI to ensure /tokens is in it. if 'tokens' not in auth_url: auth_url = auth_url.rstrip('/') + '/tokens' self.auth_url = auth_url
def request(self, method, url, extra_headers=False, headers=None, body=None): """A simple HTTP request interface.""" if headers is None: headers = self.get_headers(accept_type="json") elif extra_headers: try: headers.update(self.get_headers(accept_type="json")) except (ValueError, TypeError): headers = self.get_headers(accept_type="json") resp, resp_body = self.raw_request(url, method, headers=headers, body=body) self._log_request(method, url, resp, req_headers=headers, req_body='<omitted>', resp_body=resp_body) if resp.status in [401, 403]: resp_body = json.loads(resp_body) raise exceptions.Unauthorized(resp_body['error']['message']) elif resp.status not in [200, 201]: raise exceptions.IdentityError( 'Unexpected status code {0}'.format(resp.status)) return resp, json.loads(resp_body)