Fix bug 1721: charms can include reference to .charm files
[osm/osmclient.git] / osmclient / v1 / package.py
index 48e69ff..f1a4bf4 100644 (file)
@@ -18,9 +18,6 @@
 OSM package API handling
 """
 
-import tarfile
-import re
-import yaml
 from osmclient.common.exceptions import ClientException
 from osmclient.common.exceptions import NotFound
 from osmclient.common import utils
@@ -33,9 +30,9 @@ class Package(object):
         self._upload_http = upload_http
 
     def _wait_for_package(self, pkg_type):
-        if 'vnfd' in pkg_type['type']:
+        if "vnfd" in pkg_type["type"]:
             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")
@@ -48,59 +45,26 @@ class Package(object):
                 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"]))
+        )
 
-    # method opens up a package and finds the name of the resulting
-    # descriptor (vnfd or nsd name)
-    def get_descriptor_type_from_pkg(self, descriptor_file):
-        tar = tarfile.open(descriptor_file)
-        yamlfile = None
-        for member in tar.getmembers():
-            if (re.match('.*.yaml', member.name) and
-               len(member.name.split('/')) == 2):
-                yamlfile = member.name
-                break
-        if yamlfile is None:
-            return None
-
-        dict = yaml.load(tar.extractfile(yamlfile))
-        result = {}
-        for k1, v1 in dict.items():
-            if not k1.endswith('-catalog'):
-                continue
-            for k2, v2 in v1.items():
-                if not k2.endswith('nsd') and not k2.endswith('vnfd'):
-                    continue
-
-                if 'nsd' in k2:
-                    result['type'] = 'nsd'
-                else:
-                    result['type'] = 'vnfd'
-
-                for entry in v2:
-                    for k3, v3 in entry.items():
-                        if k3 == 'name' or k3.endswith(':name'):
-                            result['name'] = v3
-                            return result
-        tar.close()
-        return None
+    def get_key_val_from_pkg(self, descriptor_file):
+        return utils.get_key_val_from_pkg(descriptor_file)
 
     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.
         """
-        pkg_type = self.get_descriptor_type_from_pkg(filename)
+        pkg_type = utils.get_key_val_from_pkg(filename)
 
         if pkg_type is None:
             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):
-        resp = self._upload_http.post_cmd(formfile=('package', filename))
-        if not resp or 'transaction_id' not in resp:
+        resp = self._upload_http.post_cmd(formfile=("package", filename))
+        if not resp or "transaction_id" not in resp:
             raise ClientException("failed to upload package")