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)
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)
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
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