From 133018af78c1474a3bb2994b73e71ac30608bfd5 Mon Sep 17 00:00:00 2001 From: Saugat Pachhai Date: Fri, 20 Nov 2020 19:47:58 +0545 Subject: [PATCH] s/foreach..in/foreach..do (#4928) --- dvc/parsing/__init__.py | 14 +++++++------- dvc/schema.py | 4 ++-- tests/func/test_stage_resolver.py | 10 +++++----- tests/func/test_stage_resolver_error_msg.py | 16 ++++++++-------- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/dvc/parsing/__init__.py b/dvc/parsing/__init__.py index eb59b050f..e4b39a625 100644 --- a/dvc/parsing/__init__.py +++ b/dvc/parsing/__init__.py @@ -36,7 +36,7 @@ WDIR_KWD = "wdir" DEFAULT_PARAMS_FILE = ParamsDependency.DEFAULT_PARAMS_FILE PARAMS_KWD = "params" FOREACH_KWD = "foreach" -IN_KWD = "in" +DO_KWD = "do" SET_KWD = "set" DEFAULT_SENTINEL = object() @@ -119,12 +119,12 @@ class DataResolver: def _resolve_entry(self, name: str, definition): context = Context.clone(self.global_ctx) if FOREACH_KWD in definition: - assert IN_KWD in definition + assert DO_KWD in definition self.set_context_from( context, definition.get(SET_KWD, {}), source=[name, "set"] ) return self._foreach( - context, name, definition[FOREACH_KWD], definition[IN_KWD] + context, name, definition[FOREACH_KWD], definition[DO_KWD] ) try: @@ -206,9 +206,9 @@ class DataResolver: format_and_raise(exc, f"'stages.{name}.wdir'", self.relpath) return self.wdir / str(wdir) - def _foreach(self, context: Context, name: str, foreach_data, in_data): + def _foreach(self, context: Context, name: str, foreach_data, do_data): iterable = self._resolve_foreach_data(context, name, foreach_data) - args = (context, name, in_data, iterable) + args = (context, name, do_data, iterable) it = ( range(len(iterable)) if not isinstance(iterable, Mapping) @@ -217,7 +217,7 @@ class DataResolver: gen = (self._each_iter(*args, i) for i in it) return join(gen) - def _each_iter(self, context: Context, name: str, in_data, iterable, key): + def _each_iter(self, context: Context, name: str, do_data, iterable, key): value = iterable[key] c = Context.clone(context) suffix = c["item"] = value @@ -226,7 +226,7 @@ class DataResolver: generated = f"{name}{JOIN}{suffix}" try: - return self._resolve_stage(c, generated, in_data) + return self._resolve_stage(c, generated, do_data) except ContextError as exc: # pylint: disable=no-member if isinstance(exc, MergeError) and exc.key in self._inserted_keys( diff --git a/dvc/schema.py b/dvc/schema.py index cfd0a451d..6ca5390fd 100644 --- a/dvc/schema.py +++ b/dvc/schema.py @@ -3,7 +3,7 @@ from voluptuous import Any, Optional, Required, Schema from dvc import dependency, output from dvc.hash_info import HashInfo from dvc.output import CHECKSUMS_SCHEMA, BaseOutput -from dvc.parsing import FOREACH_KWD, IN_KWD, SET_KWD, VARS_KWD +from dvc.parsing import DO_KWD, FOREACH_KWD, SET_KWD, VARS_KWD from dvc.stage.params import StageParams STAGES = "stages" @@ -83,7 +83,7 @@ STAGE_DEFINITION = { FOREACH_IN = { Optional(SET_KWD): dict, Required(FOREACH_KWD): Any(dict, list, str), - Required(IN_KWD): STAGE_DEFINITION, + Required(DO_KWD): STAGE_DEFINITION, } SINGLE_PIPELINE_STAGE_SCHEMA = {str: Any(STAGE_DEFINITION, FOREACH_IN)} MULTI_STAGE_SCHEMA = { diff --git a/tests/func/test_stage_resolver.py b/tests/func/test_stage_resolver.py index 767ceea25..7fdab41c7 100644 --- a/tests/func/test_stage_resolver.py +++ b/tests/func/test_stage_resolver.py @@ -254,7 +254,7 @@ def test_simple_foreach_loop(tmp_dir, dvc): "stages": { "build": { "foreach": iterable, - "in": {"cmd": "python script.py ${item}"}, + "do": {"cmd": "python script.py ${item}"}, } } } @@ -277,7 +277,7 @@ def test_foreach_loop_dict(tmp_dir, dvc): "stages": { "build": { "foreach": iterable["models"], - "in": {"cmd": "python script.py ${item.thresh}"}, + "do": {"cmd": "python script.py ${item.thresh}"}, } } } @@ -303,7 +303,7 @@ def test_foreach_loop_templatized(tmp_dir, dvc): "stages": { "build": { "foreach": "${models}", - "in": {"cmd": "python script.py --thresh ${item.thresh}"}, + "do": {"cmd": "python script.py --thresh ${item.thresh}"}, } }, } @@ -381,7 +381,7 @@ def test_set_with_foreach(tmp_dir, dvc): "build": { "set": {"items": items}, "foreach": "${items}", - "in": {"cmd": "command --value ${item}"}, + "do": {"cmd": "command --value ${item}"}, } } } @@ -407,7 +407,7 @@ def test_set_with_foreach_and_on_stage_definition(tmp_dir, dvc): "build": { "set": {"data": "${models}"}, "foreach": "${data}", - "in": { + "do": { "set": {"thresh": "${item.thresh}"}, "cmd": "command --value ${thresh}", }, diff --git a/tests/func/test_stage_resolver_error_msg.py b/tests/func/test_stage_resolver_error_msg.py index 4b7e5af3e..2bcc86763 100644 --- a/tests/func/test_stage_resolver_error_msg.py +++ b/tests/func/test_stage_resolver_error_msg.py @@ -139,7 +139,7 @@ def test_foreach_item_key_already_exists( ): d = { "vars": [local_vars], - "stages": {"build": {"foreach": "${models}", "in": {}}}, + "stages": {"build": {"foreach": "${models}", "do": {}}}, } resolver = DataResolver(repo, tmp_dir, d) @@ -152,7 +152,7 @@ def test_foreach_item_key_already_exists( def test_foreach_interpolation_key_does_not_exist(tmp_dir, repo): d = { - "stages": {"build": {"foreach": "${modelss}", "in": {}}}, + "stages": {"build": {"foreach": "${modelss}", "do": {}}}, } resolver = DataResolver(repo, tmp_dir, d) with pytest.raises(ResolveError) as exc_info: @@ -165,7 +165,7 @@ def test_foreach_interpolation_key_does_not_exist(tmp_dir, repo): def test_foreach_interpolation_key_error(tmp_dir, repo): d = { - "stages": {"build": {"foreach": "${models[123}", "in": {}}}, + "stages": {"build": {"foreach": "${models[123}", "do": {}}}, } resolver = DataResolver(repo, tmp_dir, d) with pytest.raises(ResolveError) as exc_info: @@ -195,7 +195,7 @@ def test_foreach_interpolation_key_error(tmp_dir, repo): def test_foreach_generated_errors(tmp_dir, repo, syn, msg): d = { "stages": { - "build": {"foreach": "${models}", "in": {"cmd": f"echo {syn}"}} + "build": {"foreach": "${models}", "do": {"cmd": f"echo {syn}"}} }, } resolver = DataResolver(repo, tmp_dir, d) @@ -222,7 +222,7 @@ def test_foreach_generated_local_vars_error(tmp_dir, repo, vars_, msg): "stages": { "build": { "foreach": "${models}", - "in": {"vars": vars_, "cmd": "echo ${item}"}, + "do": {"vars": vars_, "cmd": "echo ${item}"}, } }, } @@ -253,7 +253,7 @@ def test_foreach_wdir_interpolation_issues(tmp_dir, repo, wdir, msg): "stages": { "build": { "foreach": "${models}", - "in": {"wdir": wdir, "cmd": "echo ${item}"}, + "do": {"wdir": wdir, "cmd": "echo ${item}"}, } }, } @@ -268,7 +268,7 @@ def test_foreach_wdir_interpolation_issues(tmp_dir, repo, wdir, msg): @pytest.mark.parametrize("foreach", ["${models.bar}", "foo"]) def test_foreach_expects_dict_or_list(tmp_dir, repo, foreach): d = { - "stages": {"build": {"foreach": foreach, "in": {}}}, + "stages": {"build": {"foreach": foreach, "do": {}}}, } resolver = DataResolver(repo, tmp_dir, d) with pytest.raises(ResolveError) as exc_info: @@ -315,7 +315,7 @@ def test_item_key_in_generated_stage_vars(tmp_dir, repo, foreach, redefine): "stages": { "build": { "foreach": foreach, - "in": {"cmd": "echo ${item}", "vars": [{redefine: "value"}]}, + "do": {"cmd": "echo ${item}", "vars": [{redefine: "value"}]}, } }, }