proper handling of http_codes in http.post_cmd
authorgarciadeblas <gerardo.garciadeblas@telefonica.com>
Mon, 14 May 2018 14:06:22 +0000 (16:06 +0200)
committergarciadeblas <gerardo.garciadeblas@telefonica.com>
Mon, 14 May 2018 14:55:08 +0000 (16:55 +0200)
Change-Id: I7526522f11f2c7c991c61e0a8bbe99393bddbc85
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
osmclient/sol005/client.py
osmclient/sol005/http.py
osmclient/sol005/ns.py
osmclient/sol005/nsd.py
osmclient/sol005/package.py
osmclient/sol005/sdncontroller.py
osmclient/sol005/vim.py
osmclient/sol005/vnfd.py

index d1c90aa..b8627b9 100644 (file)
@@ -28,6 +28,7 @@ from osmclient.sol005 import package
 from osmclient.sol005 import http
 from osmclient.sol005 import sdncontroller
 from osmclient.common.exceptions import ClientException
+import json
 
 class Client(object):
 
@@ -94,8 +95,11 @@ class Client(object):
         postfields_dict = {'username': self._user,
                            'password': self._password,
                            'project-id': self._project}
-        token = self._http_client.post_cmd(endpoint=self._auth_endpoint,
+        http_code, resp = self._http_client.post_cmd(endpoint=self._auth_endpoint,
                               postfields_dict=postfields_dict)
+        if http_code not in (200, 201, 202, 204):
+            raise ClientException(resp)
+        token = json.loads(resp) if resp else None
         if token is not None:
             return token['_id']
         return None
index 60f0a49..8e80ba9 100644 (file)
@@ -84,21 +84,10 @@ class Http(http.Http):
         curl_cmd.perform()
         http_code = curl_cmd.getinfo(pycurl.HTTP_CODE)
         curl_cmd.close()
-        if http_code not in (200, 201, 202, 204):
-            raise ClientException(data.getvalue().decode())
-        if postfields_dict is not None:
-            if data.getvalue():
-                return json.loads(data.getvalue().decode())
-            return None
-        elif formfile is not None:
-            if data.getvalue():
-                return yaml.safe_load(data.getvalue().decode())
-            return None
-        elif filename is not None:
-            if data.getvalue():
-                return yaml.safe_load(data.getvalue().decode())
-            return None
-        return None
+        if data.getvalue():
+            return http_code, data.getvalue().decode()
+        else:
+            return http_code, None
 
     def post_cmd(self, endpoint='', postfields_dict=None,
                  formfile=None, filename=None):
@@ -133,6 +122,6 @@ class Http(http.Http):
         http_code = curl_cmd.getinfo(pycurl.HTTP_CODE)
         curl_cmd.close()
         if data.getvalue():
-            return http_code, data.getvalue()
+            return http_code, data.getvalue().decode()
         return http_code, None
 
index 73c5973..945e622 100644 (file)
@@ -148,8 +148,10 @@ class Ns(object):
             self._apiResource = '/ns_instances_content'
             self._apiBase = '{}{}{}'.format(self._apiName,
                                             self._apiVersion, self._apiResource)
-            resp = self._http.post_cmd(endpoint=self._apiBase,
+            http_code, resp = self._http.post_cmd(endpoint=self._apiBase,
                                        postfields_dict=ns)
+            if resp:
+                resp = json.loads(resp)
             #print 'RESP: {}'.format(resp)
             if not resp or 'id' not in resp:
                 raise ClientException('unexpected response from server: '.format(
@@ -176,7 +178,7 @@ class Ns(object):
                 filter_string = '&{}'.format(filter)
             http_code, resp = self._http.get2_cmd('{}?nsInstanceId={}'.format(self._apiBase, ns['_id'],
                                                                   filter_string) )
-            resp = json.loads(resp.decode())
+            resp = json.loads(resp)
             #print 'RESP: {}'.format(resp)
             if http_code == 200:
                 return resp
@@ -197,7 +199,7 @@ class Ns(object):
             self._apiBase = '{}{}{}'.format(self._apiName,
                                       self._apiVersion, self._apiResource)
             http_code, resp = self._http.get2_cmd('{}/{}'.format(self._apiBase, operationId))
-            resp = json.loads(resp.decode())
+            resp = json.loads(resp)
             #print 'RESP: {}'.format(resp)
             if http_code == 200:
                 return resp
@@ -220,7 +222,9 @@ class Ns(object):
             endpoint = '{}/{}/{}'.format(self._apiBase, ns['_id'], op_name)
             #print 'OP_NAME: {}'.format(op_name)
             #print 'OP_DATA: {}'.format(json.dumps(op_data))
-            resp = self._http.post_cmd(endpoint=endpoint, postfields_dict=op_data)
+            http_code, resp = self._http.post_cmd(endpoint=endpoint, postfields_dict=op_data)
+            if resp:
+                resp = json.loads(resp)
             #print 'RESP: {}'.format(resp)
             if not resp or 'id' not in resp:
                 raise ClientException('unexpected response from server: '.format(
@@ -241,8 +245,10 @@ class Ns(object):
         data["create_alarm_request"] = {}
         data["create_alarm_request"]["alarm_create_request"] = alarm
         try:
-            resp = self._http.post_cmd(endpoint='/test/message/alarm_request',
+            http_code, resp = self._http.post_cmd(endpoint='/test/message/alarm_request',
                                        postfields_dict=data)
+            if resp:
+                resp = json.loads(resp)
             #print 'RESP: {}'.format(resp)
             if not resp:
                 raise ClientException('unexpected response from server: '.format(
@@ -260,8 +266,10 @@ class Ns(object):
         data["delete_alarm_request"]["alarm_delete_request"] = {}
         data["delete_alarm_request"]["alarm_delete_request"]["alarm_uuid"] = name
         try:
-            resp = self._http.post_cmd(endpoint='/test/message/alarm_request',
+            http_code, resp = self._http.post_cmd(endpoint='/test/message/alarm_request',
                                        postfields_dict=data)
+            if resp:
+                resp = json.loads(resp)
             #print 'RESP: {}'.format(resp)
             if not resp:
                 raise ClientException('unexpected response from server: '.format(
@@ -280,8 +288,10 @@ class Ns(object):
         data = {}
         data["read_metric_data_request"] = metric
         try:
-            resp = self._http.post_cmd(endpoint='/test/message/metric_request',
+            http_code, resp = self._http.post_cmd(endpoint='/test/message/metric_request',
                                        postfields_dict=data)
+            if resp:
+                resp = json.loads(resp)
             #print 'RESP: {}'.format(resp)
             if not resp:
                 raise ClientException('unexpected response from server: '.format(
index 95fc92a..4ae755b 100644 (file)
@@ -22,6 +22,7 @@ from osmclient.common.exceptions import NotFound
 from osmclient.common.exceptions import ClientException
 from osmclient.common import utils
 import yaml
+import json
 import magic
 #from os import stat
 #from os.path import basename
@@ -73,11 +74,11 @@ class Nsd(object):
         nsd = self.get(name)
         headers = self._client._headers
         headers['Accept'] = 'application/binary'
-        http_code, resp2 = self._http.get2_cmd('{}/{}/{}'.format(self._apiBase, nsd['_id'], thing))
+        http_code, resp = self._http.get2_cmd('{}/{}/{}'.format(self._apiBase, nsd['_id'], thing))
         #print yaml.safe_dump(resp2)
-        if resp2:
+        if resp:
             #store in a file
-            return resp2
+            return resp
         raise NotFound("nsd {} not found".format(name))
 
     def get_descriptor(self, name, filename):
@@ -125,7 +126,7 @@ class Nsd(object):
                       for (key,val) in headers.items()]
         self._http.set_http_header(http_header)
         if update_endpoint:
-            resp = self._http.put_cmd(endpoint=update_endpoint, filename=filename)
+            http_code, resp = self._http.put_cmd(endpoint=update_endpoint, filename=filename)
         else:
             ow_string = ''
             if overwrite:
@@ -134,7 +135,9 @@ class Nsd(object):
             self._apiBase = '{}{}{}'.format(self._apiName,
                                             self._apiVersion, self._apiResource)
             endpoint = '{}{}'.format(self._apiBase,ow_string)
-            resp = self._http.post_cmd(endpoint=endpoint, filename=filename)
+            http_code, resp = self._http.post_cmd(endpoint=endpoint, filename=filename)
+        if resp:
+            resp = json.loads(resp)
         #print resp
         if not resp or 'id' not in resp:
             raise ClientException("failed to upload package")
index 9fd734a..b2fe035 100644 (file)
@@ -26,6 +26,7 @@ import yaml
 from osmclient.common.exceptions import ClientException
 from osmclient.common.exceptions import NotFound
 from osmclient.common import utils
+import json
 
 
 class Package(object):
@@ -57,7 +58,9 @@ class Package(object):
         http_header = ['{}: {}'.format(key,val)
                       for (key,val) in headers.items()]
         self._http.set_http_header(http_header)
-        resp = self._http.post_cmd(endpoint=endpoint, filename=filename)
+        http_code, resp = self._http.post_cmd(endpoint=endpoint, filename=filename)
+        if resp:
+            resp = json.loads(resp)
         #print 'RESP: {}'.format(yaml.safe_dump(resp))
         if not resp or 'id' not in resp:
             raise ClientException("failed to upload package")
index 36605eb..0639559 100644 (file)
@@ -21,7 +21,8 @@ OSM SDN controller API handling
 from osmclient.common import utils
 from osmclient.common.exceptions import ClientException
 from osmclient.common.exceptions import NotFound
-import yaml 
+import yaml
+import json
 
 
 class SdnController(object):
@@ -34,8 +35,10 @@ class SdnController(object):
         self._apiBase = '{}{}{}'.format(self._apiName,
                                         self._apiVersion, self._apiResource)
     def create(self, name, sdn_controller):
-        resp = self._http.post_cmd(endpoint=self._apiBase,
+        http_code, resp = self._http.post_cmd(endpoint=self._apiBase,
                                        postfields_dict=sdn_controller)
+        if resp:
+            resp = json.loads(resp)
         #print 'RESP: {}'.format(resp)
         if not resp or 'id' not in resp:
             raise ClientException('failed to create SDN controller: '.format(
@@ -45,8 +48,10 @@ class SdnController(object):
 
     def update(self, name, sdn_controller):
         sdnc = self.get(name)
-        resp = self._http.patch_cmd(endpoint='{}/{}'.format(self._apiBase,sdnc['_id']),
+        http_code, resp = self._http.patch_cmd(endpoint='{}/{}'.format(self._apiBase,sdnc['_id']),
                                        postfields_dict=sdn_controller)
+        if resp:
+            resp = json.loads(resp)
         print 'RESP: {}'.format(resp)
         if not resp or 'id' not in resp:
             raise ClientException('failed to update SDN controller: '.format(
index d540c63..8aee453 100644 (file)
@@ -22,6 +22,7 @@ from osmclient.common import utils
 from osmclient.common.exceptions import ClientException
 from osmclient.common.exceptions import NotFound
 import yaml
+import json
 
 
 class Vim(object):
@@ -49,8 +50,10 @@ class Vim(object):
 
         vim_account['config'] = vim_config
 
-        resp = self._http.post_cmd(endpoint=self._apiBase,
+        http_code, resp = self._http.post_cmd(endpoint=self._apiBase,
                                        postfields_dict=vim_account)
+        if resp:
+            resp = json.loads(resp)
         if not resp or 'id' not in resp:
             raise ClientException('failed to create vim {}: {}'.format(
                                   name, resp))
@@ -59,9 +62,11 @@ class Vim(object):
 
     def update(self, vim_name, vim_account):
         vim = self.get(vim_name)
-        #resp = self._http.put_cmd(endpoint='{}/{}'.format(self._apiBase,vim['_id']),
-        resp = self._http.patch_cmd(endpoint='{}/{}'.format(self._apiBase,vim['_id']),
+        #http_code, resp = self._http.put_cmd(endpoint='{}/{}'.format(self._apiBase,vim['_id']),
+        http_code, resp = self._http.patch_cmd(endpoint='{}/{}'.format(self._apiBase,vim['_id']),
                                        postfields_dict=vim_account)
+        if resp:
+            resp = json.loads(resp)
         #print 'RESP: {}'.format(resp)
         if not resp or 'id' not in resp:
             raise ClientException('failed to update vim: '.format(resp))
index 6b09a1f..cc5f04a 100644 (file)
@@ -22,6 +22,7 @@ from osmclient.common.exceptions import NotFound
 from osmclient.common.exceptions import ClientException
 from osmclient.common import utils
 import yaml
+import json
 import magic
 #from os import stat
 #from os.path import basename
@@ -72,11 +73,11 @@ class Vnfd(object):
         vnfd = self.get(name)
         headers = self._client._headers
         headers['Accept'] = 'application/binary'
-        http_code, resp2 = self._http.get2_cmd('{}/{}/{}'.format(self._apiBase, vnfd['_id'], thing))
+        http_code, resp = self._http.get2_cmd('{}/{}/{}'.format(self._apiBase, vnfd['_id'], thing))
         #print yaml.safe_dump(resp2)
-        if resp2:
+        if resp:
             #store in a file
-            return resp2
+            return resp
         raise NotFound("vnfd {} not found".format(name))
 
     def get_descriptor(self, name, filename):
@@ -124,7 +125,7 @@ class Vnfd(object):
                       for (key,val) in headers.items()]
         self._http.set_http_header(http_header)
         if update_endpoint:
-            resp = self._http.put_cmd(endpoint=update_endpoint, filename=filename)
+            http_code, resp = self._http.put_cmd(endpoint=update_endpoint, filename=filename)
         else:
             ow_string = ''
             if overwrite:
@@ -133,7 +134,9 @@ class Vnfd(object):
             self._apiBase = '{}{}{}'.format(self._apiName,
                                             self._apiVersion, self._apiResource)
             endpoint = '{}{}'.format(self._apiBase,ow_string)
-            resp = self._http.post_cmd(endpoint=endpoint, filename=filename)
+            http_code, resp = self._http.post_cmd(endpoint=endpoint, filename=filename)
+        if resp:
+            resp = json.loads(resp)
         #print resp
         if not resp or 'id' not in resp:
             raise ClientException("failed to upload package")