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): if params and params['app']['id'] is None: raise error.InvalidRequestError('Please pass app[id] as parameter', '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 instance_url(self): id = self.get('id') if not id: raise error.InvalidRequestError( 'Could not determine which URL to request: %s instance ' 'has invalid ID: %r' % (type(self).__name__, id), 'id') id = util.utf8(id) base = self.class_url() extn = urllib.quote_plus(id) return "%s/%s" % (base, extn)
def retrieve(cls, id, refund_id=None, api_key=None, app=None, **params): if not refund_id: raise error.InvalidRequestError( 'Could not determine which URL to request: %s instance ' 'has invalid ID: %r' % (type(cls).__name__, refund_id), 'id') instance = cls(id, api_key, **params) requestor = api_requestor.APIRequestor(api_key) url = "%s/%s/refunds/%s" % (instance.class_url(), id, refund_id) response, api_key = requestor.request('get', url, params) return convert_to_pingpp_object(response, api_key)
def instance_url(self): id = self.get('id') if not isinstance(id, six.string_types): raise error.InvalidRequestError( 'Could not determine which URL to request: %s instance ' 'has invalid ID: %r, %s. ID should be of type `str` (or' ' `unicode`)' % (type(self).__name__, id, type(id)), 'id') id = util.utf8(id) base = self.class_url() extn = quote_plus(id) return "%s/%s" % (base, extn)
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 list(cls, *args, **params): if params and (('app' in params and 'id' in params['app']) or 'app[id]' in params): return super(Charge, cls).list(*args, **params) raise error.InvalidRequestError( 'Please pass app_id as parameter with key "app[id]"', 'app[id]')