Fix Bug 934. OSM CLI crashes for listing operations with insufficient permissions
[osm/osmclient.git] / osmclient / sol005 / http.py
index aca8a4b..9bdf94e 100644 (file)
@@ -20,6 +20,7 @@ import json
 import logging
 import copy
 from osmclient.common import http
+from osmclient.common.exceptions import OsmHttpException
 
 
 class Http(http.Http):
@@ -54,6 +55,7 @@ class Http(http.Http):
         http_code = curl_cmd.getinfo(pycurl.HTTP_CODE)
         self._logger.info("Response HTTPCODE: {}".format(http_code))
         curl_cmd.close()
+        self.check_http_response(http_code, data)
         # TODO 202 accepted should be returned somehow
         if data.getvalue():
             self._logger.verbose("Response DATA: {}".format(json.loads(data.getvalue().decode())))
@@ -106,6 +108,7 @@ class Http(http.Http):
         http_code = curl_cmd.getinfo(pycurl.HTTP_CODE)
         self._logger.info("Response HTTPCODE: {}".format(http_code))
         curl_cmd.close()
+        self.check_http_response(http_code, data)
         if data.getvalue():
             self._logger.verbose("Response DATA: {}".format(json.loads(data.getvalue().decode())))
             return http_code, data.getvalue().decode()
@@ -150,8 +153,15 @@ class Http(http.Http):
         http_code = curl_cmd.getinfo(pycurl.HTTP_CODE)
         self._logger.info("Response HTTPCODE: {}".format(http_code))
         curl_cmd.close()
+        self.check_http_response(http_code, data)
         if data.getvalue():
             self._logger.debug("Response DATA: {}".format(json.loads(data.getvalue().decode())))
             return http_code, data.getvalue().decode()
         return http_code, None
 
+    def check_http_response(self, http_code, data):
+        if http_code >= 300:
+            resp = ""
+            if data.getvalue():
+                resp=": " + data.getvalue().decode()
+            raise OsmHttpException("Error {}{}".format(http_code, resp))