fix: dead circle in parse_variables_mapping

This commit is contained in:
debugtalk
2019-04-09 10:33:03 +08:00
parent 7d6208b681
commit 8862b16f77
2 changed files with 22 additions and 2 deletions

View File

@@ -638,11 +638,21 @@ def parse_variables_mapping(variables_mapping, ignore=False):
"""
variables_mapping = variables_mapping or {}
ref_variables_set = set()
run_times = 0
parsed_variables_mapping = {}
while len(parsed_variables_mapping) != len(variables_mapping):
for var_name in variables_mapping:
run_times += 1
if run_times > len(variables_mapping) * 4:
not_found_variables = {
key: variables_mapping[key]
for key in variables_mapping
if key not in parsed_variables_mapping
}
raise exceptions.VariableNotFound(not_found_variables)
if var_name in parsed_variables_mapping:
continue

View File

@@ -495,6 +495,16 @@ class TestParserBasic(unittest.TestCase):
parsed_variables = parser.parse_variables_mapping(prepared_variables)
self.assertEqual(parsed_variables["varA"], parsed_variables["varB"])
def test_parse_variables_mapping_dead_circle(self):
variables = {
"varA": "$varB",
"varB": "123$varC"
}
check_variables_set = {"varA", "varB", "varC"}
prepared_variables = parser.prepare_lazy_data(variables, {}, check_variables_set)
with self.assertRaises(exceptions.VariableNotFound):
parser.parse_variables_mapping(prepared_variables)
def test_parse_variables_mapping_not_found(self):
variables = {
"varA": "123$varB",