def request()

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