@@ -35,6 +35,11 @@ class AuthenticationError(IntercomError):
3535 pass
3636
3737
38+ class BadGatewayError (IntercomError ):
39+ """ Raised when a request does not reach the API due to a 502. """
40+ pass
41+
42+
3843class ResourceNotFound (IntercomError ):
3944 """ Raised when a resource cannot be found e.g. a non-existant User. """
4045 pass
@@ -46,35 +51,36 @@ class ServerError(IntercomError):
4651 pass
4752
4853
54+ class ServiceUnavailableError (IntercomError ):
55+ """ Raised when the API cannot be handle a request. """
56+ pass
57+
58+
4959def api_call (func_to_decorate ):
5060 """ Decorator for handling AWS credentials. """
5161 @functools .wraps (func_to_decorate )
5262 def wrapper (* args , ** kwargs ):
5363 """ Decorator closure. """
5464 response = func_to_decorate (* args , ** kwargs )
55- if response .status_code == 401 :
56- raise AuthenticationError ("Invalid API key/username provided." )
57- try :
58- result = json .loads (response .content )
59- except ValueError as err :
60- if response .status_code == 404 :
61- raise ResourceNotFound ("Not found." )
62- raise ServerError (err .message )
63- if response .status_code in (200 , 201 ):
64- pass
65- else :
66- # an error state try to get the error message
67- error = result .get ('error' , {})
68- message = error .get ('message' , 'Unknown error' )
69-
70- if response .status_code == 404 :
71- raise ResourceNotFound (message , result )
72- else :
73- raise ServerError (message , result )
65+ raise_errors_on_failure (response )
66+ result = json .loads (response .content )
7467 return result
7568 return wrapper
7669
7770
71+ def raise_errors_on_failure (response ):
72+ if response .status_code == 404 :
73+ raise ResourceNotFound ("Not found." )
74+ elif response .status_code == 401 :
75+ raise AuthenticationError ("Invalid API key/username provided." )
76+ elif response .status_code == 500 :
77+ raise ServerError ("Server error." )
78+ elif response .status_code == 502 :
79+ raise BadGatewayError ("Bad gateway." )
80+ elif response .status_code == 503 :
81+ raise ServiceUnavailableError ("Service unavailable." )
82+
83+
7884class Intercom (object ):
7985 """ Intercom API Wrapper """
8086
0 commit comments