summaryrefslogtreecommitdiff
path: root/savannaclient/api/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'savannaclient/api/base.py')
-rw-r--r--savannaclient/api/base.py25
1 files changed, 18 insertions, 7 deletions
diff --git a/savannaclient/api/base.py b/savannaclient/api/base.py
index 9b475db..fa584f0 100644
--- a/savannaclient/api/base.py
+++ b/savannaclient/api/base.py
@@ -56,7 +56,6 @@ def _check_items(obj, searches):
return False
-#TODO(nkonovalov) handle response body in case of error
class ResourceManager(object):
resource_class = None
@@ -78,9 +77,9 @@ class ResourceManager(object):
self._raise_api_exception(resp)
if response_key is not None:
- data = resp.json()[response_key]
+ data = get_json(resp)[response_key]
else:
- data = resp.json()
+ data = get_json(resp)
return self.resource_class(self, data)
def _update(self, url, data):
@@ -91,7 +90,7 @@ class ResourceManager(object):
def _list(self, url, response_key):
resp = self.api.client.get(url)
if resp.status_code == 200:
- data = resp.json()[response_key]
+ data = get_json(resp)[response_key]
return [self.resource_class(self, res)
for res in data]
@@ -103,9 +102,9 @@ class ResourceManager(object):
if resp.status_code == 200:
if response_key is not None:
- data = resp.json()[response_key]
+ data = get_json(resp)[response_key]
else:
- data = resp.json()
+ data = get_json(resp)
return self.resource_class(self, data)
else:
self._raise_api_exception(resp)
@@ -120,9 +119,21 @@ class ResourceManager(object):
return self.resource_class.resource_name + 's'
def _raise_api_exception(self, resp):
- error_data = resp.json()
+ error_data = get_json(resp)
raise APIException(error_data["error_message"])
+def get_json(response):
+ """This method provided backward compatibility with old versions
+ of requests library
+
+ """
+ json_field_or_function = getattr(response, 'json', None)
+ if callable(json_field_or_function):
+ return response.json()
+ else:
+ return json.loads(response.content)
+
+
class APIException(Exception):
pass