Capture end organize exceptions. Fix NotFound
[osm/osmclient.git] / osmclient / sol005 / http.py
index aca8a4b..3d21465 100644 (file)
@@ -20,6 +20,7 @@ import json
 import logging
 import copy
 from osmclient.common import http
+from osmclient.common.exceptions import OsmHttpException, NotFound
 
 
 class Http(http.Http):
@@ -54,10 +55,12 @@ 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())))
-            return http_code, data.getvalue().decode()
+            data_text = data.getvalue().decode()
+            self._logger.verbose("Response DATA: {}".format(data_text))
+            return http_code, data_text
         else:
             return http_code, None
 
@@ -106,9 +109,11 @@ 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()
+            data_text = data.getvalue().decode()
+            self._logger.verbose("Response DATA: {}".format(data_text))
+            return http_code, data_text
         else:
             return http_code, None
 
@@ -150,8 +155,22 @@ 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()
+            data_text = data.getvalue().decode()
+            self._logger.verbose("Response DATA: {}".format(data_text))
+            return http_code, data_text
         return http_code, None
 
+    def check_http_response(self, http_code, data):
+        if http_code >= 300:
+            resp = ""
+            if data.getvalue():
+                data_text = data.getvalue().decode()
+                self._logger.verbose("Response {} DATA: {}".format(http_code, data_text))
+                resp = ": " + data_text
+            else:
+                self._logger.verbose("Response {}".format(http_code))
+            if http_code == 404:
+                raise NotFound("Error {}{}".format(http_code, resp))
+            raise OsmHttpException("Error {}{}".format(http_code, resp))