From e0884df99c69469005a7b1b7e615b2863677871e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20Rowlands=20=28=EB=B3=80=EA=B8=B0=ED=98=B8=29?= Date: Thu, 10 Dec 2020 18:11:00 +0900 Subject: [PATCH] exp show: fix --exclude-... (#5071) * exp show: fix --exclude-... * update exp show tests * fix windows table divider --- dvc/command/experiments.py | 6 ++- tests/func/experiments/test_show.py | 82 ++++++++++++++++------------- 2 files changed, 50 insertions(+), 38 deletions(-) diff --git a/dvc/command/experiments.py b/dvc/command/experiments.py index fabe357fc..38d0e8515 100644 --- a/dvc/command/experiments.py +++ b/dvc/command/experiments.py @@ -56,7 +56,11 @@ def _filter_names( ret = OrderedDict({name: None for name in names}) if exclude: - _filter(exclude, ret.difference_update) # type: ignore[attr-defined] + to_remove = {} + _filter(exclude, to_remove.update) + for key in to_remove: + if key in ret: + del ret[key] return [".".join(name) for name in ret] diff --git a/tests/func/experiments/test_show.py b/tests/func/experiments/test_show.py index c9f0c2d12..cd2b3a895 100644 --- a/tests/func/experiments/test_show.py +++ b/tests/func/experiments/test_show.py @@ -1,23 +1,13 @@ +import os from datetime import datetime from funcy import first -from dvc.dvcfile import PIPELINE_FILE from dvc.main import main from dvc.repo.experiments.base import ExpRefInfo -from tests.func.test_repro_multistage import COPY_SCRIPT -def test_show_simple(tmp_dir, scm, dvc): - tmp_dir.gen("copy.py", COPY_SCRIPT) - tmp_dir.gen("params.yaml", "foo: 1") - dvc.run( - cmd="python copy.py params.yaml metrics.yaml", - metrics_no_cache=["metrics.yaml"], - params=["foo"], - single_stage=True, - ) - +def test_show_simple(tmp_dir, scm, dvc, exp_stage): assert dvc.experiments.show()["workspace"] == { "baseline": { "metrics": {"metrics.yaml": {"foo": 1}}, @@ -28,23 +18,13 @@ def test_show_simple(tmp_dir, scm, dvc): } -def test_show_experiment(tmp_dir, scm, dvc): - tmp_dir.gen("copy.py", COPY_SCRIPT) - tmp_dir.gen("params.yaml", "foo: 1") - dvc.run( - cmd="python copy.py params.yaml metrics.yaml", - metrics_no_cache=["metrics.yaml"], - params=["foo"], - name="foo", - ) - scm.add(["copy.py", "params.yaml", "metrics.yaml", "dvc.yaml", "dvc.lock"]) - scm.commit("baseline") +def test_show_experiment(tmp_dir, scm, dvc, exp_stage): baseline_rev = scm.get_rev() timestamp = datetime.fromtimestamp( scm.gitpython.repo.rev_parse(baseline_rev).committed_date ) - dvc.experiments.run(PIPELINE_FILE, params=["foo=2"]) + dvc.experiments.run(exp_stage.addressing, params=["foo=2"]) results = dvc.experiments.show() expected_baseline = { @@ -67,22 +47,12 @@ def test_show_experiment(tmp_dir, scm, dvc): assert exp["params"]["params.yaml"] == expected_params -def test_show_queued(tmp_dir, scm, dvc): +def test_show_queued(tmp_dir, scm, dvc, exp_stage): from dvc.repo.experiments.base import EXPS_STASH - tmp_dir.gen("copy.py", COPY_SCRIPT) - tmp_dir.gen("params.yaml", "foo: 1") - stage = dvc.run( - cmd="python copy.py params.yaml metrics.yaml", - metrics_no_cache=["metrics.yaml"], - params=["foo"], - name="foo", - ) - scm.add(["copy.py", "params.yaml", "metrics.yaml", "dvc.yaml", "dvc.lock"]) - scm.commit("baseline") baseline_rev = scm.get_rev() - dvc.experiments.run(stage.addressing, params=["foo=2"], queue=True) + dvc.experiments.run(exp_stage.addressing, params=["foo=2"], queue=True) exp_rev = dvc.experiments.scm.resolve_rev(f"{EXPS_STASH}@{{0}}") results = dvc.experiments.show()[baseline_rev] @@ -97,7 +67,7 @@ def test_show_queued(tmp_dir, scm, dvc): scm.commit("new commit") new_rev = scm.get_rev() - dvc.experiments.run(stage.addressing, params=["foo=3"], queue=True) + dvc.experiments.run(exp_stage.addressing, params=["foo=3"], queue=True) exp_rev = dvc.experiments.scm.resolve_rev(f"{EXPS_STASH}@{{0}}") results = dvc.experiments.show()[new_rev] @@ -168,3 +138,41 @@ def test_show_checkpoint_branch(tmp_dir, scm, dvc, checkpoint_stage, capsys): name = ref_info.name assert f"╓ {name}" in cap.out assert f"({branch_rev[:7]})" in cap.out + + +def test_show_filter(tmp_dir, scm, dvc, exp_stage, capsys): + capsys.readouterr() + assert ( + main( + [ + "exp", + "show", + "--no-pager", + "--no-timestamp", + "--include-metrics=foo", + "--include-params=foo", + ] + ) + == 0 + ) + cap = capsys.readouterr() + + div = "│" if os.name == "nt" else "┃" + assert f"{div} foo {div} foo {div}" in cap.out + + assert ( + main( + [ + "exp", + "show", + "--no-pager", + "--no-timestamp", + "--exclude-metrics=foo", + "--exclude-params=foo", + ] + ) + == 0 + ) + cap = capsys.readouterr() + + assert f"{div} foo {div}" not in cap.out