X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=ice_validator%2Ftests%2Fhelpers.py;h=ff82c71096a232e5b12d4b366e080d531f0ad221;hb=940ae7b0283191d590de40b71a9136bebc80e83c;hp=afa86724d87effd444a9d1b6d01dd2a547ceaf06;hpb=684ad537becece9df772b04d0d8226bcb7c30ca4;p=vvp%2Fvalidation-scripts.git diff --git a/ice_validator/tests/helpers.py b/ice_validator/tests/helpers.py index afa8672..ff82c71 100644 --- a/ice_validator/tests/helpers.py +++ b/ice_validator/tests/helpers.py @@ -47,7 +47,16 @@ from collections import defaultdict from boltons import funcutils from tests import cached_yaml as yaml -VERSION = "1.1.0" +__path__ = [os.path.dirname(os.path.abspath(__file__))] +DEFAULT_OUTPUT_DIR = "{}/../output".format(__path__[0]) +RE_BASE = re.compile(r"(^base$)|(^base_)|(_base_)|(_base$)") + + +def is_base_module(template_path): + basename = os.path.basename(template_path).lower() + name, extension = os.path.splitext(basename) + is_yaml = extension in {".yml", ".yaml"} + return is_yaml and RE_BASE.search(name) and not name.endswith("_volume") def check_basename_ending(template_type, basename): @@ -218,7 +227,7 @@ def traverse(data, search_key, func, path=None): elif isinstance(data, list): for value in data: curr_path = path + [value] - if isinstance(value, dict): + if isinstance(value, (dict, list)): traverse(value, search_key, func, curr_path) elif value == search_key: func(curr_path, value) @@ -262,9 +271,6 @@ def check_indices(pattern, values, value_type): return invalid_params -RE_BASE = re.compile(r"(^base$)|(^base_)|(_base_)|(_base$)") - - def get_base_template_from_yaml_files(yaml_files): """Return first filepath to match RE_BASE """ @@ -310,17 +316,43 @@ def parameter_type_to_heat_type(parameter): def prop_iterator(resource, *props): - terminators = ["get_resource", "get_attr", "str_replace"] + terminators = ["get_resource", "get_attr", "str_replace", "get_param"] if "properties" in resource: resource = resource.get("properties") props = list(props) - if isinstance(resource, dict) and "get_param" in resource: - yield resource.get("get_param") + if isinstance(resource, dict) and any(x for x in terminators if x in resource): + yield resource else: prop = resource.get(props.pop(0)) if isinstance(prop, list): for x in prop: yield from prop_iterator(x, *props) - elif isinstance(prop, dict) and not any(x for x in terminators if x in prop): + elif isinstance(prop, dict): yield from prop_iterator(prop, *props) + + +def get_param(property_value): + """ + Returns the first parameter name from a get_param or None if get_param is + not used + """ + if property_value and isinstance(property_value, dict): + param = property_value.get("get_param") + if param and isinstance(param, list) and len(param) > 0: + return param[0] + else: + return param + return None + + +def get_output_dir(config): + """ + Retrieve the output directory for the reports and create it if necessary + :param config: pytest configuration + :return: output directory as string + """ + output_dir = config.option.output_dir or DEFAULT_OUTPUT_DIR + if not os.path.exists(output_dir): + os.makedirs(output_dir, exist_ok=True) + return output_dir