mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-04 07:18:27 +01:00
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:
+4
-1
@@ -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
@@ -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", {})
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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": {
|
||||
|
||||
Reference in New Issue
Block a user