X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osmclient%2Fv1%2Fpackage.py;h=b383003dff0642b18c3838c3e5d1ee3979ffb099;hb=af80b5ddd01038e617977ade6d8ead801ff55889;hp=16560c368364ed54b4f5e87233b0b88cb736cec3;hpb=e84eb31aded0cb62a5523422ddc4524f6e615209;p=osm%2Fosmclient.git diff --git a/osmclient/v1/package.py b/osmclient/v1/package.py index 16560c3..b383003 100644 --- a/osmclient/v1/package.py +++ b/osmclient/v1/package.py @@ -15,63 +15,62 @@ # under the License. """ -OSM package API handling +OSM package API handling """ -import json -import pycurl -from io import BytesIO import tarfile -import re +import re import yaml -import time from osmclient.common.exceptions import ClientException from osmclient.common.exceptions import NotFound from osmclient.common import utils class Package(object): - def __init__(self,http=None,upload_http=None,client=None): - self._client=client - self._http=http - self._upload_http=upload_http + def __init__(self, http=None, upload_http=None, client=None): + self._client = client + self._http = http + self._upload_http = upload_http - def _wait_for_package(self,pkg_type): + def _wait_for_package(self, pkg_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']: - get_method=self._client.nsd.get + get_method = self._client.nsd.get else: raise ClientException("no valid package type found") # helper method to check if pkg exists - def check_exists( func ): + def check_exists(func): try: func() except NotFound: 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): + def get_key_val_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: + 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(): + 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(): + for k2, v2 in v1.items(): if not k2.endswith('nsd') and not k2.endswith('vnfd'): continue @@ -81,27 +80,28 @@ class Package(object): 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 + for k3, v3 in entry.items(): + # strip off preceeding chars before : + key_name = k3.split(':').pop() + + result[key_name] = v3 tar.close() - return None + return result - def wait_for_upload(self,filename): + def wait_for_upload(self, filename): """wait(block) for an upload to succeed. - The filename passed is assumed to be a descriptor tarball. """ - pkg_type=self.get_descriptor_type_from_pkg(filename) + pkg_type = self.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)) + def upload(self, filename): + resp = self._upload_http.post_cmd(formfile=('package', filename)) if not resp or 'transaction_id' not in resp: raise ClientException("failed to upload package")