X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=ice_validator%2Ftests%2Futils%2Fnested_files.py;h=e5f59417f84d4acbe34d810059671aff287912e8;hb=da26f1709fa5406ee3efebdb82d2c43fcf0122a1;hp=aff5a6b4bab5edf0761cf7a3c19cfc77f9477989;hpb=1f4df7c7ad27b23773ad9cdbe4db1632ce388cf1;p=vvp%2Fvalidation-scripts.git diff --git a/ice_validator/tests/utils/nested_files.py b/ice_validator/tests/utils/nested_files.py index aff5a6b..e5f5941 100644 --- a/ice_validator/tests/utils/nested_files.py +++ b/ice_validator/tests/utils/nested_files.py @@ -35,17 +35,18 @@ # # ============LICENSE_END============================================ # -# ECOMP is a trademark and service mark of AT&T Intellectual Property. # """nested files """ - -from os import path +from functools import lru_cache +from os import path, listdir import re from tests import cached_yaml as yaml from tests.structures import Heat +from tests.helpers import load_yaml + VERSION = "1.4.0" """ @@ -109,40 +110,31 @@ def get_dict_of_nested_files(yml, dirpath): return nested_files -def get_list_of_nested_files(yml, dirpath): +@lru_cache(maxsize=None) +def get_list_of_nested_files(yml_path, dirpath): """ return a list of all nested files """ - if not hasattr(yml, "items"): - return [] - + yml = load_yaml(yml_path) nested_files = [] + resources = yml.get("resources") or {} - for v in yml.values(): + for v in resources.values(): if isinstance(v, dict) and "type" in v: t = v["type"] if t.endswith(".yml") or t.endswith(".yaml"): filepath = path.join(dirpath, t) if path.exists(filepath): - with open(filepath) as fh: - t_yml = yaml.load(fh) nested_files.append(filepath) - nested_files.extend(get_list_of_nested_files(t_yml, dirpath)) + nested_files.extend(get_list_of_nested_files(filepath, dirpath)) elif t == "OS::Heat::ResourceGroup": rdt = v.get("properties", {}).get("resource_def", {}).get("type", None) if rdt and (rdt.endswith(".yml") or rdt.endswith(".yaml")): filepath = path.join(dirpath, rdt) if path.exists(filepath): - with open(filepath) as fh: - rdt_yml = yaml.load(fh) nested_files.append(filepath) - nested_files.extend(get_list_of_nested_files(rdt_yml, dirpath)) - if isinstance(v, dict): - nested_files.extend(get_list_of_nested_files(v, dirpath)) - elif isinstance(v, list): - for d in v: - nested_files.extend(get_list_of_nested_files(d, dirpath)) + nested_files.extend(get_list_of_nested_files(filepath, dirpath)) return nested_files @@ -259,3 +251,31 @@ def get_type_nested_files(yml, dirpath): if path.exists(filepath): nested_files[rid] = nested_file return nested_files + + +def get_nested_files(filenames): + """ + returns all the nested files for a set of filenames + """ + nested_files = [] + for filename in filenames: + if file_is_a_nested_template(filename): + nested_files.append(filename) + return nested_files + + +@lru_cache(maxsize=None) +def file_is_a_nested_template(file): + directory = path.dirname(file) + nested_files = [] + for filename in listdir(directory): + if filename.endswith(".yaml") or filename.endswith(".yml"): + filename = "{}/{}".format(directory, filename) + try: + nested_files.extend( + get_list_of_nested_files(filename, path.dirname(filename)) + ) + except yaml.YAMLError as e: + print(e) # pylint: disable=superfluous-parens + continue + return file in nested_files