def test_with_composite_list(tmp_dir, dvc): resolver = DataResolver(dvc, tmp_dir.fs_path, {}) context = Context() foreach_data = [{"thresh": "foo"}, {"thresh": "bar"}] data = {"foreach": foreach_data, "do": {"cmd": "echo ${item.thresh}"}} definition = ForeachDefinition(resolver, context, "build", data) assert definition.resolve_one("0") == {"build@0": {"cmd": "echo foo"}} # check that `foreach` item-key replacement didnot leave any leftovers. assert not context assert definition.resolve_one("1") == {"build@1": {"cmd": "echo bar"}} assert not context assert not resolver.tracked_vars["build@0"]
def test_with_simple_list_data(tmp_dir, dvc): """Testing a simple non-nested list as a foreach data""" resolver = DataResolver(dvc, tmp_dir.fs_path, {}) context = Context() data = {"foreach": ["foo", "bar", "baz"], "do": {"cmd": "echo ${item}"}} definition = ForeachDefinition(resolver, context, "build", data) assert definition.resolve_one("foo") == {"build@foo": {"cmd": "echo foo"}} assert definition.resolve_one("bar") == {"build@bar": {"cmd": "echo bar"}} # check that `foreach` item-key replacement didnot leave any leftovers. assert not context assert not resolver.tracked_vars["build@foo"] assert not resolver.tracked_vars["build@bar"]
def test_with_dict_data(tmp_dir, dvc): resolver = DataResolver(dvc, tmp_dir.fs_path, {}) context = Context() foreach_data = {"model1": "foo", "model2": "bar"} data = {"foreach": foreach_data, "do": {"cmd": "echo ${key} ${item}"}} definition = ForeachDefinition(resolver, context, "build", data) assert definition.resolve_one("model1") == { "build@model1": { "cmd": "echo model1 foo" } } assert definition.resolve_one("model2") == { "build@model2": { "cmd": "echo model2 bar" } } # check that `foreach` item-key replacement didnot leave any leftovers. assert not context assert not resolver.tracked_vars["build@model1"] assert not resolver.tracked_vars["build@model2"]