async def test_CustomDict_returns_a_dictionary(self): class TestObj: def __init__(self, k, v): self.key = k self.value = v create_variable("variable", "varValue") create_env_var("envvar", "envarValue") create_mist_param("param", "paramValue") entries = [ TestObj("number", MistObj({"value": 5})), TestObj("string", MistObj({"value": "strvalue"})), TestObj("mistVar", MistObj({"value": VarReference(None, "variable", None)})), TestObj("mistEnvvar", MistObj({"value": EnvVariable(None, "envvar")})), TestObj("mistParam", MistObj({"value": ExtParameter(None, "param")})) ] cd = CustomDict(None, entries) d = await cd.getValue(get_mistStack()) self.assertEqual( { "number": 5, "string": "strvalue", "mistVar": "varValue", "mistEnvvar": "envarValue", "mistParam": "paramValue" }, d)
async def test_ListDictReference_returns_stored_value(self): create_variable("myIndex", 0) create_variable("myList", ["value"]) dl = ListDictReference( None, "myList", MistObj({"value": VarReference(None, "myIndex", None)})) v = await dl.getValue(get_mistStack()) self.assertEqual("value", v)
async def test_ListDictReference_returns_stored_value(self): create_variable("myKey", "key") create_variable("myDict", {"key": "val"}) dr = ListDictReference( None, "myDict", MistObj({"value": VarReference(None, "myKey", None)})) v = await dr.getValue(get_mistStack()) self.assertEqual("val", v)
async def runFinalizers(stack): for f in finallyHooks: from mist.lang.classes import VarReference method = VarReference(None, f[0], []) await function_runner(method, args=f[1], stack=f[2], commands=f[3], sourceStream=None, targetStream=None, processArgs=False)
async def test_returns_function_return_value_when_given_a_function_with_args( self, mock_function_runner): result = "function_return_value" mock_function_runner.return_value = result ret = await get_key("myFunc(one, two, three)", []) self.assertEqual(result, ret) mock_function_runner.assert_called_once_with( VarReference(parent=None, id='myFunc', childs=[]), [], None, None, ["one", "two", "three"])
async def test_CustomList_returns_a_list(self): class TestObj: def __init__(self, k, v): self.key = k self.value = v create_variable("variable", "varValue") create_env_var("envvar", "envarValue") create_mist_param("param", "paramValue") elements = [ MistObj({"value": 5}), MistObj({"value": "strvalue"}), MistObj({"value": VarReference(None, "variable", None)}), MistObj({"value": EnvVariable(None, "envvar")}), MistObj({"value": ExtParameter(None, "param")}) ] cd = CustomList(None, elements) d = await cd.getValue(get_mistStack()) self.assertEqual( [5, "strvalue", "varValue", "envarValue", "paramValue"], d)
if key[0] == '%': return params[key[1:]] if key[0] == '$': return environment[key[1:]] if key[0] == ':': return key if key[-1] == ']': # List or dictionary reference if grs := LDREF_MATCHER.fullmatch(key): return await resolve_list_dict_reference(grs.group(1), grs.group(2), stack) else: raise MistException(f"Invalid reference {key}") if key[-1] == ')': function = key.split('(')[0].strip().split(".") from mist.lang.classes import VarReference method = VarReference(None, function[0], function[1:]) args = [ i.strip() for i in re.sub(' +', ' ', key.split('(', 1)[1]).rsplit(')', 1) [0].strip().split(',') ] if '=' in args[0]: namedArgs = [ NamedArg( i.split('=', 1)[0].strip(), i.split('=', 1)[1].strip()) for i in args ] return await function_runner(method, stack, None, None, None, namedArgs) return await function_runner(method, stack, None, None, [] if args[0] == '' else args)