support of PATCH method for sol005 client
[osm/osmclient.git] / osmclient / sol005 / http.py
index 11ddca6..60f0a49 100644 (file)
@@ -48,24 +48,21 @@ class Http(http.Http):
         http_code = curl_cmd.getinfo(pycurl.HTTP_CODE)
         #print 'HTTP_CODE: {}'.format(http_code)
         curl_cmd.close()
-        if http_code == 204:
-            return None
-        elif http_code == 404:
-            if data.getvalue():
-                return json.loads(data.getvalue().decode())
-            else:
-                return "NOT FOUND"
+        # TODO 202 accepted should be returned somehow
         if data.getvalue():
-            return json.loads(data.getvalue().decode())
-        return "Failed"
+            return http_code, json.loads(data.getvalue().decode())
+        else:
+            return http_code, None
 
     def send_cmd(self, endpoint='', postfields_dict=None,
                  formfile=None, filename=None,
-                 put_method=False):
+                 put_method=False, patch_method=False):
         data = BytesIO()
         curl_cmd = self._get_curl_cmd(endpoint)
         if put_method:
             curl_cmd.setopt(pycurl.PUT, 1)
+        elif patch_method:
+            curl_cmd.setopt(pycurl.CUSTOMREQUEST, "PATCH")
         else:
             curl_cmd.setopt(pycurl.POST, 1)
         curl_cmd.setopt(pycurl.WRITEFUNCTION, data.write)
@@ -109,7 +106,7 @@ class Http(http.Http):
                              postfields_dict=postfields_dict,
                              formfile=formfile,
                              filename=filename,
-                             put_method=False)
+                             put_method=False, patch_method=False)
 
     def put_cmd(self, endpoint='', postfields_dict=None,
                 formfile=None, filename=None):
@@ -117,7 +114,15 @@ class Http(http.Http):
                              postfields_dict=postfields_dict,
                              formfile=formfile,
                              filename=filename,
-                             put_method=True)
+                             put_method=True, patch_method=False)
+
+    def patch_cmd(self, endpoint='', postfields_dict=None,
+                formfile=None, filename=None):
+        return self.send_cmd(endpoint=endpoint,
+                             postfields_dict=postfields_dict,
+                             formfile=formfile,
+                             filename=filename,
+                             put_method=False, patch_method=True)
 
     def get2_cmd(self, endpoint):
         data = BytesIO()
@@ -125,6 +130,9 @@ class Http(http.Http):
         curl_cmd.setopt(pycurl.HTTPGET, 1)
         curl_cmd.setopt(pycurl.WRITEFUNCTION, data.write)
         curl_cmd.perform()
+        http_code = curl_cmd.getinfo(pycurl.HTTP_CODE)
         curl_cmd.close()
-        return data.getvalue()
+        if data.getvalue():
+            return http_code, data.getvalue()
+        return http_code, None