Пример #1
0
    def request(self, method, url, data=None, params=None):

        logger.debug("API request {} {}".format(method, url))

        payload = json.dumps(data)

        api_token = create_jwt_token(
            self.api_key,
            self.service_id
        )

        headers = {
            "Content-type": "application/json",
            "Authorization": "Bearer {}".format(api_token),
            "User-agent": "NOTIFY-API-PYTHON-CLIENT/{}".format(__version__),
        }

        url = urlparse.urljoin(self.base_url, url)

        start_time = monotonic()
        try:
            response = requests.request(
                method,
                url,
                headers=headers,
                data=payload,
                params=params
            )
            response.raise_for_status()
        except requests.RequestException as e:
            api_error = HTTPError.create(e)
            logger.error(
                "API {} request on {} failed with {} '{}'".format(
                    method,
                    url,
                    api_error.status_code,
                    api_error.message
                )
            )
            raise api_error
        finally:
            elapsed_time = monotonic() - start_time
            logger.debug("API {} request on {} finished in {}".format(method, url, elapsed_time))

        try:
            if response.status_code == 204:
                return
            return response.json()
        except ValueError:
            raise InvalidResponse(
                response,
                message="No JSON response object could be decoded"
            )
Пример #2
0
 def _perform_request(self, method, url, kwargs):
     start_time = monotonic()
     try:
         response = requests.request(method, url, **kwargs)
         response.raise_for_status()
         return response
     except requests.RequestException as e:
         api_error = HTTPError.create(e)
         logger.error("API {} request on {} failed with {} '{}'".format(
             method, url, api_error.status_code, api_error.message))
         raise api_error
     finally:
         elapsed_time = monotonic() - start_time
         logger.debug("API {} request on {} finished in {}".format(
             method, url, elapsed_time))
    def request(self, method, url, data=None, params=None):

        logger.debug("API request {} {}".format(method, url))

        api_token = create_jwt_token(self.api_key, self.service_id)

        kwargs = {
            "headers": self.generate_headers(api_token),
        }

        if data is not None:
            kwargs.update(data=json.dumps(data))

        if params is not None:
            kwargs.update(params=params)

        url = urllib.parse.urljoin(str(self.base_url), str(url))

        start_time = monotonic()
        try:
            response = requests.request(method, url, **kwargs)
            response.raise_for_status()
        except requests.RequestException as e:
            api_error = HTTPError.create(e)
            logger.error("API {} request on {} failed with {} '{}'".format(
                method, url, api_error.status_code, api_error.message))
            raise api_error
        finally:
            elapsed_time = monotonic() - start_time
            logger.debug("API {} request on {} finished in {}".format(
                method, url, elapsed_time))

        try:
            if response.status_code == 204:
                return
            return response.json()
        except ValueError:
            raise InvalidResponse(
                response, message="No JSON response object could be decoded")