[VVP] R-100280, R-100290, and aap_exempt support
[vvp/validation-scripts.git] / ice_validator / tests / helpers.py
index 5744945..fd78c75 100644 (file)
@@ -307,3 +307,34 @@ def parameter_type_to_heat_type(parameter):
         parameter_type = None
 
     return parameter_type
+
+
+def prop_iterator(resource, *props):
+    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 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):
+            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