Fix Bug 1493 repo generation from osm-packages
[osm/osmclient.git] / osmclient / sol005 / package.py
index 1ca3864..1fa0e24 100644 (file)
 OSM package API handling
 """
 
 OSM package API handling
 """
 
-#from os import stat
-#from os.path import basename
+# from os import stat
+# from os.path import basename
 from osmclient.common.exceptions import ClientException
 from osmclient.common.exceptions import NotFound
 from osmclient.common import utils
 import json
 import logging
 from osmclient.common.exceptions import ClientException
 from osmclient.common.exceptions import NotFound
 from osmclient.common import utils
 import json
 import logging
+import os.path
 
 
 class Package(object):
     def __init__(self, http=None, client=None):
         self._client = client
         self._http = http
 
 
 class Package(object):
     def __init__(self, http=None, client=None):
         self._client = client
         self._http = http
-        self._logger = logging.getLogger('osmclient')
+        self._logger = logging.getLogger("osmclient")
 
     def get_key_val_from_pkg(self, descriptor_file):
         self._logger.debug("")
 
     def get_key_val_from_pkg(self, descriptor_file):
         self._logger.debug("")
@@ -39,9 +40,9 @@ class Package(object):
 
     def _wait_for_package(self, pkg_type):
         self._logger.debug("")
 
     def _wait_for_package(self, pkg_type):
         self._logger.debug("")
-        if 'vnfd' in pkg_type['type']:
+        if "vnfd" in pkg_type["type"]:
             get_method = self._client.vnfd.get
             get_method = self._client.vnfd.get
-        elif 'nsd' in pkg_type['type']:
+        elif "nsd" in pkg_type["type"]:
             get_method = self._client.nsd.get
         else:
             raise ClientException("no valid package type found")
             get_method = self._client.nsd.get
         else:
             raise ClientException("no valid package type found")
@@ -55,13 +56,13 @@ class Package(object):
                 return False
             return True
 
                 return False
             return True
 
-        return utils.wait_for_value(lambda:
-                                    check_exists(lambda:
-                                                 get_method(pkg_type['name'])))
+        return utils.wait_for_value(
+            lambda: check_exists(lambda: get_method(pkg_type["name"]))
+        )
 
     def wait_for_upload(self, filename):
         """wait(block) for an upload to succeed.
 
     def wait_for_upload(self, filename):
         """wait(block) for an upload to succeed.
-           The filename passed is assumed to be a descriptor tarball.
+        The filename passed is assumed to be a descriptor tarball.
         """
         self._logger.debug("")
         self._client.get_token()
         """
         self._logger.debug("")
         self._client.get_token()
@@ -71,47 +72,55 @@ class Package(object):
             raise ClientException("Cannot determine package type")
 
         if not self._wait_for_package(pkg_type):
             raise ClientException("Cannot determine package type")
 
         if not self._wait_for_package(pkg_type):
-            raise ClientException("package {} failed to upload"
-                                  .format(filename))
+            raise ClientException("package {} failed to upload".format(filename))
 
 
-    def upload(self, filename):
+    def upload(self, filename, skip_charm_build=False):
         self._logger.debug("")
         self._logger.debug("")
-        self._client.get_token()
-        pkg_type = utils.get_key_val_from_pkg(filename)
-        if pkg_type is None:
-            raise ClientException("Cannot determine package type")
-        if pkg_type['type'] == 'nsd':
-            endpoint = '/nsd/v1/ns_descriptors_content'
+        if os.path.isdir(filename):
+            filename = filename.rstrip("/")
+            filename = self._client.package_tool.build(
+                filename, skip_validation=False, skip_charm_build=skip_charm_build
+            )
+            self.upload(filename)
         else:
         else:
-            endpoint = '/vnfpkgm/v1/vnf_packages_content'
-        #endpoint = '/nsds' if pkg_type['type'] == 'nsd' else '/vnfds'
-        #print('Endpoint: {}'.format(endpoint))
-        headers = self._client._headers
-        headers['Content-Type'] = 'application/gzip'
-        #headers['Content-Type'] = 'application/binary'
-        # Next three lines are to be removed in next version
-        #headers['Content-Filename'] = basename(filename)
-        #file_size = stat(filename).st_size
-        #headers['Content-Range'] = 'bytes 0-{}/{}'.format(file_size - 1, file_size)
-        headers["Content-File-MD5"] = utils.md5(filename)
-        http_header = ['{}: {}'.format(key,val)
-                      for (key,val) in list(headers.items())]
-        self._http.set_http_header(http_header)
-        http_code, resp = self._http.post_cmd(endpoint=endpoint, filename=filename)
-        #print('HTTP CODE: {}'.format(http_code))
-        #print('RESP: {}'.format(resp))
-        #if http_code in (200, 201, 202, 204):
-        if resp:
-            resp = json.loads(resp)
-        if not resp or 'id' not in resp:
-            raise ClientException('unexpected response from server - {}'.format(
-                                   resp))
-        print(resp['id'])
-        # else:
-        #     msg = ""
-        #     if resp:
-        #         try:
-        #              msg = json.loads(resp)
-        #         except ValueError:
-        #             msg = resp
-        #     raise ClientException("failed to upload package - {}".format(msg))
+            self._client.get_token()
+            pkg_type = utils.get_key_val_from_pkg(filename)
+            if pkg_type is None:
+                raise ClientException("Cannot determine package type")
+            if pkg_type["type"] == "nsd":
+                endpoint = "/nsd/v1/ns_descriptors_content"
+            else:
+                endpoint = "/vnfpkgm/v1/vnf_packages_content"
+            # endpoint = '/nsds' if pkg_type['type'] == 'nsd' else '/vnfds'
+            # print('Endpoint: {}'.format(endpoint))
+            headers = self._client._headers
+            headers["Content-Type"] = "application/gzip"
+            # headers['Content-Type'] = 'application/binary'
+            # Next three lines are to be removed in next version
+            # headers['Content-Filename'] = basename(filename)
+            # file_size = stat(filename).st_size
+            # headers['Content-Range'] = 'bytes 0-{}/{}'.format(file_size - 1, file_size)
+            headers["Content-File-MD5"] = utils.md5(filename)
+            http_header = [
+                "{}: {}".format(key, val) for (key, val) in list(headers.items())
+            ]
+            self._http.set_http_header(http_header)
+            http_code, resp = self._http.post_cmd(endpoint=endpoint, filename=filename)
+            # print('HTTP CODE: {}'.format(http_code))
+            # print('RESP: {}'.format(resp))
+            # if http_code in (200, 201, 202, 204):
+            if resp:
+                resp = json.loads(resp)
+            if not resp or "id" not in resp:
+                raise ClientException(
+                    "unexpected response from server - {}".format(resp)
+                )
+            print(resp["id"])
+            #  else:
+            #     msg = ""
+            #     if resp:
+            #         try:
+            #              msg = json.loads(resp)
+            #         except ValueError:
+            #             msg = resp
+            #     raise ClientException("failed to upload package - {}".format(msg))