X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osmclient%2Fcommon%2Futils.py;h=6279234841e6e4bd931b77212a8f4dab37b8a62c;hb=51a2a09f30b969bd0ecc6b3cd6fced3b5010743a;hp=94bd72f9c762c84cca5de6d24cb404301a715b66;hpb=15b8b64b9b3134b13f9b229329f0cc1f508aad38;p=osm%2Fosmclient.git diff --git a/osmclient/common/utils.py b/osmclient/common/utils.py index 94bd72f..6279234 100644 --- a/osmclient/common/utils.py +++ b/osmclient/common/utils.py @@ -18,6 +18,7 @@ import time from uuid import UUID import hashlib import tarfile +from zipfile import ZipFile import re import yaml @@ -46,6 +47,11 @@ def validate_uuid4(uuid_text): def md5(fname): + """ + Checksum generator + :param fname: file path + :return: checksum string + """ hash_md5 = hashlib.md5() with open(fname, "rb") as f: for chunk in iter(lambda: f.read(4096), b""): @@ -54,41 +60,73 @@ def md5(fname): def get_key_val_from_pkg(descriptor_file): - # method opens up a package and finds the name of the resulting - # descriptor (vnfd or nsd name) + if descriptor_file.split(".")[-1] == "zip": + return get_key_val_from_pkg_sol004(descriptor_file) + else: + return get_key_val_from_pkg_old(descriptor_file) + + +def get_key_val_from_pkg_sol004(package_file): + """Method opens up a package and finds the name of the resulting + descriptor (vnfd or nsd name), using SOL004 spec + """ + with ZipFile(package_file) as zipfile: + yamlfile = None + for filedata in zipfile.infolist(): + if ( + re.match(".*.yaml", filedata.filename) + and filedata.filename.find("Scripts") < 0 + ): + yamlfile = filedata.filename + break + if yamlfile is None: + return None + + return get_key_val_from_descriptor(zipfile.open(yamlfile)) + + +def get_key_val_from_pkg_old(descriptor_file): + """Method opens up a package and finds the name of the resulting + descriptor (vnfd or nsd name) + """ 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.safe_load(tar.extractfile(yamlfile)) + result = get_key_val_from_descriptor(tar.extractfile(yamlfile)) + + tar.close() + return result + + +def get_key_val_from_descriptor(descriptor): + dict = yaml.safe_load(descriptor) result = {} for k in dict: - if 'nsd' in k: - result['type'] = 'nsd' + if "nsd" in k: + result["type"] = "nsd" else: - result['type'] = 'vnfd' - if 'type' not in result: + result["type"] = "vnfd" + + if "type" not in result: for k1, v1 in list(dict.items()): - if not k1.endswith('-catalog'): + if not k1.endswith("-catalog"): continue for k2, v2 in v1.items(): - if not k2.endswith('nsd') and not k2.endswith('vnfd'): + if not k2.endswith("nsd") and not k2.endswith("vnfd"): continue - if 'nsd' in k2: - result['type'] = 'nsd' + if "nsd" in k2: + result["type"] = "nsd" else: - result['type'] = 'vnfd' + result["type"] = "vnfd" for entry in v2: for k3, v3 in list(entry.items()): # strip off preceeding chars before : - key_name = k3.split(':').pop() + key_name = k3.split(":").pop() result[key_name] = v3 - - tar.close() return result