mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-07 15:28:28 +01:00
* params: use repo.tree * remote: local: use `repo.tree` for `exists()` * param: handle missing params * stage: move status warning to debug * dvc: introduce `dvc params diff` Fixes #3528
91 lines
2.5 KiB
Python
91 lines
2.5 KiB
Python
import yaml
|
|
|
|
import pytest
|
|
|
|
from dvc.dependency import DependencyPARAMS, loads_params, loadd_from
|
|
from dvc.dependency.param import BadParamFileError, MissingParamsError
|
|
from dvc.stage import Stage
|
|
|
|
|
|
PARAMS = {
|
|
"foo": 1,
|
|
"bar": 53.135,
|
|
"baz": "str",
|
|
"qux": None,
|
|
}
|
|
|
|
|
|
def test_loads_params(dvc):
|
|
stage = Stage(dvc)
|
|
deps = loads_params(stage, ["foo", "bar,baz", "a_file:qux"])
|
|
assert len(deps) == 2
|
|
|
|
assert isinstance(deps[0], DependencyPARAMS)
|
|
assert deps[0].def_path == DependencyPARAMS.DEFAULT_PARAMS_FILE
|
|
assert deps[0].params == ["foo", "bar", "baz"]
|
|
assert deps[0].info == {}
|
|
|
|
assert isinstance(deps[1], DependencyPARAMS)
|
|
assert deps[1].def_path == "a_file"
|
|
assert deps[1].params == ["qux"]
|
|
assert deps[1].info == {}
|
|
|
|
|
|
def test_loadd_from(dvc):
|
|
stage = Stage(dvc)
|
|
deps = loadd_from(stage, [{"params": PARAMS}])
|
|
assert len(deps) == 1
|
|
assert isinstance(deps[0], DependencyPARAMS)
|
|
assert deps[0].def_path == DependencyPARAMS.DEFAULT_PARAMS_FILE
|
|
assert deps[0].params == list(PARAMS.keys())
|
|
assert deps[0].info == PARAMS
|
|
|
|
|
|
def test_dumpd_with_info(dvc):
|
|
dep = DependencyPARAMS(Stage(dvc), None, PARAMS)
|
|
assert dep.dumpd() == {
|
|
"path": "params.yaml",
|
|
"params": PARAMS,
|
|
}
|
|
|
|
|
|
def test_dumpd_without_info(dvc):
|
|
dep = DependencyPARAMS(Stage(dvc), None, list(PARAMS.keys()))
|
|
assert dep.dumpd() == {
|
|
"path": "params.yaml",
|
|
"params": list(PARAMS.keys()),
|
|
}
|
|
|
|
|
|
def test_read_params_nonexistent_file(dvc):
|
|
dep = DependencyPARAMS(Stage(dvc), None, ["foo"])
|
|
assert dep.read_params() == {}
|
|
|
|
|
|
def test_read_params_unsupported_format(tmp_dir, dvc):
|
|
tmp_dir.gen("params.yaml", b"\0\1\2\3\4\5\6\7")
|
|
dep = DependencyPARAMS(Stage(dvc), None, ["foo"])
|
|
with pytest.raises(BadParamFileError):
|
|
dep.read_params()
|
|
|
|
|
|
def test_read_params_nested(tmp_dir, dvc):
|
|
tmp_dir.gen(
|
|
"params.yaml", yaml.dump({"some": {"path": {"foo": ["val1", "val2"]}}})
|
|
)
|
|
dep = DependencyPARAMS(Stage(dvc), None, ["some.path.foo"])
|
|
assert dep.read_params() == {"some.path.foo": ["val1", "val2"]}
|
|
|
|
|
|
def test_save_info_missing_config(dvc):
|
|
dep = DependencyPARAMS(Stage(dvc), None, ["foo"])
|
|
with pytest.raises(MissingParamsError):
|
|
dep.save_info()
|
|
|
|
|
|
def test_save_info_missing_param(tmp_dir, dvc):
|
|
tmp_dir.gen("params.yaml", "bar: baz")
|
|
dep = DependencyPARAMS(Stage(dvc), None, ["foo"])
|
|
with pytest.raises(MissingParamsError):
|
|
dep.save_info()
|