Enable parametrization by default (#5018)

* Enable parametrization by default

* Remove a way to disable parametrization

* Add a comment for the feature flag
This commit is contained in:
Saugat Pachhai
2020-12-03 10:20:29 +02:00
committed by GitHub
parent f50f12ad61
commit bb84f5d9e2
6 changed files with 7 additions and 63 deletions
+4 -1
View File
@@ -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)
+3 -30
View File
@@ -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", {})
-1
View File
@@ -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)
-1
View File
@@ -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
-29
View File
@@ -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
-1
View File
@@ -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": {