def specific_api_error(self, rbody, rcode, resp, rheaders, error_data):
        util.log_info(
            'Ping++ API error received',
            error_code=error_data.get('code'),
            error_type=error_data.get('type'),
            error_message=error_data.get('message'),
            error_param=error_data.get('param'),
        )

        if rcode in [400, 404]:
            raise error.InvalidRequestError(error_data.get('message'),
                                            error_data.get('param'),
                                            error_data.get('code'), rbody,
                                            rcode, resp, rheaders)
        elif rcode == 401:
            raise error.AuthenticationError(error_data.get('message'), rbody,
                                            rcode, resp, rheaders)
        elif rcode == 402:
            raise error.ChannelError(error_data.get('message'),
                                     error_data.get('param'),
                                     error_data.get('code'), rbody, rcode,
                                     resp, rheaders)
        elif rcode == 403:
            raise error.RateLimitError(error_data.get('message'), rbody, rcode,
                                       resp, rheaders)
        else:
            raise error.APIError(error_data.get('message'), rbody, rcode, resp,
                                 rheaders)
Example #2
0
 def all(cls, app_id=None, api_key=None, **params):
     params['app'] = {}
     if app_id is None:
         raise error.APIError("params app_id is required")
     params['app']['id'] = app_id
     requestor = api_requestor.APIRequestor(api_key)
     url = cls.class_url()
     response, api_key = requestor.request('get', url, params)
     return convert_to_pingpp_object(response, api_key)
Example #3
0
    def handle_api_error(self, rbody, rcode, resp):
        try:
            err = resp['error']
        except (KeyError, TypeError):
            raise error.APIError(
                "Invalid response object from API: %r (HTTP response code "
                "was %d)" % (rbody, rcode), rbody, rcode, resp)

        if rcode in [400, 404]:
            raise error.InvalidRequestError(err.get('message'),
                                            err.get('param'), rbody, rcode,
                                            resp)
        elif rcode == 401:
            raise error.AuthenticationError(err.get('message'), rbody, rcode,
                                            resp)
        elif rcode == 402:
            raise error.ChannelError(err.get('message'), err.get('param'),
                                     err.get('code'), rbody, rcode, resp)
        else:
            raise error.APIError(err.get('message'), rbody, rcode, resp)
    def handle_error_response(self, rbody, rcode, resp, rheaders):
        try:
            error_data = resp['error']
        except (KeyError, TypeError):
            raise error.APIError(
                "Invalid response object from API: %r (HTTP response code "
                "was %d)" % (rbody, rcode), rbody, rcode, resp)

        err = self.specific_api_error(rbody, rcode, resp, rheaders, error_data)

        raise err
Example #5
0
 def interpret_response(self, rbody, rcode):
     try:
         if hasattr(rbody, 'decode'):
             rbody = rbody.decode('utf-8')
         resp = util.json.loads(rbody)
     except Exception:
         raise error.APIError(
             "Invalid response body from API: %s "
             "(HTTP response code was %d)" % (rbody, rcode), rbody, rcode)
     if not (200 <= rcode < 300):
         self.handle_api_error(rbody, rcode, resp)
     return resp
    def interpret_response(self, rbody, rcode, rheaders):
        try:
            if hasattr(rbody, 'decode'):
                rbody = rbody.decode('utf-8')
            resp = PingppResponse(rbody, rcode, rheaders)
        except Exception:
            raise error.APIError(
                "Invalid response body from API: %s "
                "(HTTP response code was %d)" % (rbody, rcode), rbody, rcode,
                rheaders)
        if not (200 <= rcode < 300):
            self.handle_error_response(rbody, rcode, resp.data, rheaders)

        return resp