diff --git a/dvc/config.py b/dvc/config.py index bb4e31a7d..799924ab5 100644 --- a/dvc/config.py +++ b/dvc/config.py @@ -234,7 +234,10 @@ SCHEMA = { "row_cleanup_quota": All(Coerce(int), Range(0, 100)), }, # section for experimental features - "feature": {Optional("parametrization", default=False): Bool}, + "feature": { + # enabled by default. It's of no use, kept for backward compatibility. + Optional("parametrization", default=True): Bool + }, } COMPILED_SCHEMA = Schema(SCHEMA) diff --git a/dvc/stage/loader.py b/dvc/stage/loader.py index 19df4dcc2..b6494e37d 100644 --- a/dvc/stage/loader.py +++ b/dvc/stage/loader.py @@ -3,14 +3,7 @@ from collections.abc import Mapping from copy import deepcopy from itertools import chain -from funcy import ( - cached_property, - get_in, - lcat, - log_durations, - nullcontext, - project, -) +from funcy import cached_property, get_in, lcat, log_durations, project from dvc import dependency, output from dvc.hash_info import HashInfo @@ -25,43 +18,23 @@ from .utils import fill_stage_dependencies, resolve_paths logger = logging.getLogger(__name__) -class NoopResolver: - def __init__(self, _repo, _wdir, d): - self.d = d - self.tracked_vars = {} - - def resolve(self): - return self.d - - class StageLoader(Mapping): def __init__(self, dvcfile, data, lockfile_data=None): self.dvcfile = dvcfile self.data = data or {} self.stages_data = self.data.get("stages", {}) self.repo = self.dvcfile.repo - self._enable_parametrization = self.repo.config["feature"][ - "parametrization" - ] self.lockfile_data = lockfile_data or {} @cached_property def resolver(self): - resolver_cls = ( - DataResolver if self._enable_parametrization else NoopResolver - ) wdir = PathInfo(self.dvcfile.path).parent - return resolver_cls(self.repo, wdir, self.data) + return DataResolver(self.repo, wdir, self.data) @cached_property def resolved_data(self): data = self.data - log = ( - log_durations(logger.debug, "resolving values") - if self._enable_parametrization - else nullcontext() - ) - with log: + with log_durations(logger.debug, "resolving values"): data = self.resolver.resolve() return data.get("stages", {}) diff --git a/tests/func/params/test_diff.py b/tests/func/params/test_diff.py index df3e131ec..80771079f 100644 --- a/tests/func/params/test_diff.py +++ b/tests/func/params/test_diff.py @@ -151,7 +151,6 @@ def test_no_commits(tmp_dir): def test_vars_shows_on_params_diff(tmp_dir, scm, dvc): - dvc.config["feature"]["parametrization"] = True params_file = tmp_dir / "test_params.yaml" param_data = {"vars": {"model1": {"epoch": 15}, "model2": {"epoch": 35}}} dump_yaml(params_file, param_data) diff --git a/tests/func/test_dvcfile.py b/tests/func/test_dvcfile.py index f98750d57..ce19c1f09 100644 --- a/tests/func/test_dvcfile.py +++ b/tests/func/test_dvcfile.py @@ -375,7 +375,6 @@ def test_dvcfile_dump_preserves_comments(tmp_dir, dvc): ) def test_dvcfile_try_dumping_parametrized_stage(tmp_dir, dvc, data, name): dump_yaml("dvc.yaml", {"stages": data, "vars": [{"foo": "foobar"}]}) - dvc.config["feature"]["parametrization"] = True stage = dvc.stage.load_one(name=name) dvcfile = stage.dvcfile diff --git a/tests/func/test_feature_flags.py b/tests/func/test_feature_flags.py deleted file mode 100644 index cc59cbdff..000000000 --- a/tests/func/test_feature_flags.py +++ /dev/null @@ -1,29 +0,0 @@ -from dvc.dvcfile import Dvcfile -from dvc.stage.loader import StageLoader -from dvc.utils.serialize import dumps_yaml -from tests.unit.test_stage_resolver import ( - RESOLVED_DVC_YAML_DATA, - TEMPLATED_DVC_YAML_DATA, -) - - -def test_parametrization_is_not_enabled_by_default(tmp_dir, dvc, mocker): - assert dvc.config["feature"]["parametrization"] is False - - (tmp_dir / "dvc.yaml").write_text(dumps_yaml(RESOLVED_DVC_YAML_DATA)) - mock = mocker.patch("dvc.stage.loader.DataResolver") - - stages = list(Dvcfile(dvc, "dvc.yaml").stages) - mock.assert_not_called() - assert len(stages) == 2 - - -def test_parametrization_flag_when_enabled(tmp_dir, dvc, mocker): - dvc.config["feature"]["parametrization"] = True - - dvcfile = Dvcfile(dvc, "dvc.yaml") - loader = StageLoader(dvcfile, TEMPLATED_DVC_YAML_DATA, lockfile_data=None) - loader.resolved_data = RESOLVED_DVC_YAML_DATA["stages"] - - stages = list(loader.values()) - assert len(stages) == 2 diff --git a/tests/func/test_stage_load.py b/tests/func/test_stage_load.py index 1f051d829..b8d83608c 100644 --- a/tests/func/test_stage_load.py +++ b/tests/func/test_stage_load.py @@ -147,7 +147,6 @@ def test_collect_not_a_group_stage_with_group_flag(tmp_dir, dvc, stages): def test_collect_generated(tmp_dir, dvc): - dvc.config["feature"]["parametrization"] = True d = { "vars": [{"vars": [1, 2, 3, 4, 5]}], "stages": {