11from requests_oauthlib import OAuth1Session as OAuth1
22
3+ # handle python 3.x
34try :
45 import urlparse
5- except ImportError : # handly python 3.x
6+ except ImportError :
67 from urllib import parse as urlparse
78
89
@@ -19,26 +20,33 @@ def _get_headers(self, json=True):
1920
2021 def _get_url (self , end_point ):
2122 if not end_point .startswith ("/" ):
22- return "%s/%s" % (self .url , end_point )
23+ return "{0}/{1}" . format (self .url , end_point )
2324 else :
2425 return self .url + end_point
2526
27+ def _parse_json (self , response ):
28+ try :
29+ return response .json ()
30+ except ValueError as e :
31+ raise self .ServerError (response , str (e ))
32+
2633 def _data_request (self , method , end_point , data , ** kwargs ):
2734 if data is None and "params" in kwargs :
2835 params = kwargs .pop ("params" )
2936 if type (params ) is str :
3037 params = urlparse .parse_qs (params )
3138 data = params
32-
3339 action = getattr (self .client , method )
34- return action (self ._get_url (end_point ), data = data ,
35- headers = self ._get_headers (json = True ), ** kwargs ).json ()
40+ response = action (self ._get_url (end_point ), data = data ,
41+ headers = self ._get_headers (json = True ), ** kwargs )
42+
43+ if (response .status_code > 299 ):
44+ raise self .ServerError (response )
45+
46+ return self ._parse_json (response )
3647
3748 def get (self , end_point , data = None , ** kwargs ):
3849 return self ._data_request ("post" , end_point , data = data , ** kwargs )
39- #return self.client.get(self._get_url(end_point), data,
40- #headers=self._get_headers(json=False),
41- #**kwargs).json()
4250
4351 def patch (self , end_point , data = None , ** kwargs ):
4452 return self ._data_request ("post" , end_point , data = data , ** kwargs )
@@ -57,3 +65,26 @@ def purge(self, zoneid, file_or_files=None, **kwargs):
5765 if file_or_files is not None :
5866 return self .delete (path , data = {"files" : file_or_files }, ** kwargs )
5967 return self .delete (path , ** kwargs )
68+
69+ class ServerError (Exception ):
70+ def __init__ (self , response , message = None ):
71+ try :
72+ resp = response .json ()
73+ if message is None :
74+ message = "{0}:: {1}" .format (resp ['error' ]['type' ],
75+ resp ['error' ]['message' ])
76+ self .reason = resp ['error' ]['type' ]
77+ except ValueError :
78+ if message is None :
79+ message = "{0} {1} from {2}" .format (response .status_code ,
80+ response .reason ,
81+ response .url )
82+
83+ self .reason = response .reason
84+
85+ self .headers = response .headers
86+ self .code = response .status_code
87+ self .body = response ._content
88+ self .url = response .url
89+
90+ super (Exception , self ).__init__ (message )
0 commit comments