in datahub/rest.py [0:0]
def request(self, method, url, compress_format=CompressFormat.NONE, **kwargs):
url = "%s%s" % (self._endpoint, url)
# Construct user agent without handling the letter case.
headers = self.__common_headers()
extra_headers = kwargs.get('headers', {})
extra_headers = dict((k, str(v)) for k, v in six.iteritems(extra_headers))
headers.update(extra_headers)
# Compress content and set headers
if 'data' in kwargs:
data, compress_headers = RestClient.__compress_content(kwargs['data'], compress_format)
headers.update(compress_headers)
kwargs['data'] = data
headers[Headers.CONTENT_LENGTH] = to_text(len(data))
kwargs['headers'] = headers
req = requests.Request(method.value, url, **kwargs)
prepared_req = self._session.prepare_request(req)
self._account.sign_request(prepared_req)
logger.debug('full request url: %s\nrequest headers:\n%s\nrequest body:\n%s'
% (prepared_req.url, prepared_req.headers, prepared_req.body))
resp = self._session.send(prepared_req,
stream=self._stream,
timeout=(self._conn_timeout, self._read_timeout),
proxies=self._proxies,
verify=False)
logger.debug('response.status_code: %d' % resp.status_code)
logger.debug('response.headers: \n%s' % resp.headers)
if not self._stream:
logger.debug('response.content: %s\n' % resp.content)
content = RestClient.__decompress_response(resp)
# Automatically detect error
if not RestClient.is_ok(resp) and self._exception_handler is not None:
status_code = resp.status_code
request_id = resp.headers.get(Headers.REQUEST_ID, '')
try:
content_data = json.loads(to_text(content))
error_code = content_data['ErrorCode']
error_msg = content_data['ErrorMessage']
except Exception:
logger.error('Decode json message error, content: %s' % to_text(content))
raise DatahubException('Decode json message error, content: %s' % to_text(content),
status_code, request_id, '')
logger.error("status_code: %d, request_id: %s, error_code: %s, error_msg: %s"
% (status_code, request_id, error_code, error_msg))
self._exception_handler.raise_exception(error_msg, status_code, request_id, error_code)
return content