in src/cfnlint/template.py [0:0]
def _get_conditions_from_path(self, text, path, include_if_in_function=True, only_last=False):
"""
Get the conditions and their True/False value for the path provided
Input:
text: The object to start processing through the Path
path: The path to recursively look for
Output:
An Object with keys being the Condition Names and the values are what
if its in the True or False part of the path.
{'condition': {True}}
"""
LOGGER.debug('Get conditions for path %s', path)
results = {}
def get_condition_name(value, num=None):
"""Test conditions for validity before providing the name"""
con_path = set()
if num == 1:
con_path.add(True)
elif num == 2:
con_path.add(False)
else:
con_path = con_path.union((True, False))
if value:
if isinstance(value, list):
if len(value) == 3:
if not results.get(value[0]):
results[value[0]] = set()
results[value[0]] = results[value[0]].union(con_path)
try:
# Found a condition at the root of the Path
if path[0] == 'Fn::If' and ((len(path) == 1 and only_last) or not only_last):
condition = text.get('Fn::If')
if len(path) > 1:
if path[1] in [1, 2]:
get_condition_name(condition, path[1])
else:
get_condition_name(condition)
# Iterate if the Path has more than one value
if len(path) > 1:
if (path[0] in cfnlint.helpers.FUNCTIONS and path[0] != 'Fn::If') and not include_if_in_function:
return results
child_results = self._get_conditions_from_path(
text[path[0]], path[1:], include_if_in_function, only_last)
for c_r_k, c_r_v in child_results.items():
if not results.get(c_r_k):
results[c_r_k] = set()
results[c_r_k] = results[c_r_k].union(c_r_v)
except KeyError as _:
pass
return results