From 6f728d3e6ba75c873da3cf6ff5fc7f73dbb974fa Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Mon, 1 Jun 2020 22:31:07 +0300 Subject: [PATCH] dvc: remove `dvc metrics add/remove` We will be re-introducing `metrics modify` in the future and will likely revisit `add/remove` too, so it is better to get rid of these for now and introduce later with a clear scneario in mind. Fixes #3849 Fixes #3907 --- dvc/command/metrics.py | 48 +----------------------------------- dvc/exceptions.py | 4 +-- dvc/repo/metrics/__init__.py | 10 -------- dvc/repo/metrics/add.py | 5 ---- dvc/repo/metrics/modify.py | 22 ----------------- dvc/repo/metrics/remove.py | 5 ---- scripts/completion/dvc.bash | 8 +----- scripts/completion/dvc.zsh | 4 +-- tests/func/test_repro.py | 10 ++++++-- 9 files changed, 14 insertions(+), 102 deletions(-) delete mode 100644 dvc/repo/metrics/add.py delete mode 100644 dvc/repo/metrics/modify.py delete mode 100644 dvc/repo/metrics/remove.py diff --git a/dvc/command/metrics.py b/dvc/command/metrics.py index c0e3177482..a6c38c0300 100644 --- a/dvc/command/metrics.py +++ b/dvc/command/metrics.py @@ -63,30 +63,6 @@ def run(self): return 0 -class CmdMetricsAdd(CmdBase): - def run(self): - try: - self.repo.metrics.add(self.args.path) - except DvcException: - msg = f"failed to add metric file '{self.args.path}'" - logger.exception(msg) - return 1 - - return 0 - - -class CmdMetricsRemove(CmdBase): - def run(self): - try: - self.repo.metrics.remove(self.args.path) - except DvcException: - msg = f"failed to remove metric file '{self.args.path}'" - logger.exception(msg) - return 1 - - return 0 - - def _show_diff(diff, markdown=False, no_path=False, old=False): from collections import OrderedDict @@ -145,7 +121,7 @@ def run(self): def add_parser(subparsers, parent_parser): - METRICS_HELP = "Commands to add, manage, collect, and display metrics." + METRICS_HELP = "Commands to display and compare metrics." metrics_parser = subparsers.add_parser( "metrics", @@ -162,17 +138,6 @@ def add_parser(subparsers, parent_parser): fix_subparsers(metrics_subparsers) - METRICS_ADD_HELP = "Mark a DVC-tracked file as a metric." - metrics_add_parser = metrics_subparsers.add_parser( - "add", - parents=[parent_parser], - description=append_doc_link(METRICS_ADD_HELP, "metrics/add"), - help=METRICS_ADD_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, - ) - metrics_add_parser.add_argument("path", help="Path to a metric file.") - metrics_add_parser.set_defaults(func=CmdMetricsAdd) - METRICS_SHOW_HELP = "Print metrics, with optional formatting." metrics_show_parser = metrics_subparsers.add_parser( "show", @@ -291,14 +256,3 @@ def add_parser(subparsers, parent_parser): help="Show old metric value.", ) metrics_diff_parser.set_defaults(func=CmdMetricsDiff) - - METRICS_REMOVE_HELP = "Remove metric mark on a DVC-tracked file." - metrics_remove_parser = metrics_subparsers.add_parser( - "remove", - parents=[parent_parser], - description=append_doc_link(METRICS_REMOVE_HELP, "metrics/remove"), - help=METRICS_REMOVE_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, - ) - metrics_remove_parser.add_argument("path", help="Path to a metric file.") - metrics_remove_parser.set_defaults(func=CmdMetricsRemove) diff --git a/dvc/exceptions.py b/dvc/exceptions.py index 80262a545c..6ec42da907 100644 --- a/dvc/exceptions.py +++ b/dvc/exceptions.py @@ -173,8 +173,8 @@ def __init__(self, paths): class NoMetricsError(DvcException): def __init__(self): super().__init__( - "no metric files in this repository. " - "Use `dvc metrics add` to add a metric file to track." + "no metric files in this repository. Use `-m/-M` options for " + "`dvc run` to mark stage outputs as metrics." ) diff --git a/dvc/repo/metrics/__init__.py b/dvc/repo/metrics/__init__.py index 28468b40c0..4c5a8d591f 100644 --- a/dvc/repo/metrics/__init__.py +++ b/dvc/repo/metrics/__init__.py @@ -2,21 +2,11 @@ class Metrics: def __init__(self, repo): self.repo = repo - def add(self, *args, **kwargs): - from dvc.repo.metrics.add import add - - return add(self.repo, *args, **kwargs) - def show(self, *args, **kwargs): from dvc.repo.metrics.show import show return show(self.repo, *args, **kwargs) - def remove(self, *args, **kwargs): - from dvc.repo.metrics.remove import remove - - return remove(self.repo, *args, **kwargs) - def diff(self, *args, **kwargs): from .diff import diff diff --git a/dvc/repo/metrics/add.py b/dvc/repo/metrics/add.py deleted file mode 100644 index 7828c63ef4..0000000000 --- a/dvc/repo/metrics/add.py +++ /dev/null @@ -1,5 +0,0 @@ -from dvc.repo.metrics.modify import modify - - -def add(repo, path): - modify(repo, path) diff --git a/dvc/repo/metrics/modify.py b/dvc/repo/metrics/modify.py deleted file mode 100644 index d191431ecb..0000000000 --- a/dvc/repo/metrics/modify.py +++ /dev/null @@ -1,22 +0,0 @@ -from dvc.dvcfile import Dvcfile -from dvc.exceptions import DvcException -from dvc.repo import locked - - -@locked -def modify(repo, path, delete=False): - outs = repo.find_outs_by_path(path) - assert len(outs) == 1 - out = outs[0] - - if out.scheme != "local": - msg = "output '{}' scheme '{}' is not supported for metrics" - raise DvcException(msg.format(out.path, out.path_info.scheme)) - - if delete: - out.metric = None - - out.verify_metric() - - dvcfile = Dvcfile(repo, out.stage.path) - dvcfile.dump(out.stage) diff --git a/dvc/repo/metrics/remove.py b/dvc/repo/metrics/remove.py deleted file mode 100644 index 4576c447b1..0000000000 --- a/dvc/repo/metrics/remove.py +++ /dev/null @@ -1,5 +0,0 @@ -from dvc.repo.metrics.modify import modify - - -def remove(repo, path): - modify(repo, path, delete=True) diff --git a/scripts/completion/dvc.bash b/scripts/completion/dvc.bash index 5315e1cbb9..9917030ff2 100644 --- a/scripts/completion/dvc.bash +++ b/scripts/completion/dvc.bash @@ -38,14 +38,8 @@ _dvc_list='-R --recursive --dvc-only --rev' _dvc_list_COMPGEN=_dvc_compgen_files _dvc_freeze='' _dvc_freeze_COMPGEN=_dvc_compgen_DVCFiles -_dvc_metrics='add diff modify remove show' -_dvc_metrics_add='-t --type -x --xpath' -_dvc_metrics_add_COMPGEN=_dvc_compgen_files +_dvc_metrics='diff show' _dvc_metrics_diff='--targets -t --type -x --xpath -R --show-json --show-md --no-path --old' -_dvc_metrics_modify='-t --type -x --xpath' -_dvc_metrics_modify_COMPGEN=_dvc_compgen_files -_dvc_metrics_remove='' -_dvc_metrics_remove_COMPGEN=_dvc_compgen_files _dvc_metrics_show='-t --type -x --xpath -a --all-branches -T --all-tags -R --recursive' _dvc_metrics_show_COMPGEN=_dvc_compgen_files _dvc_move='' diff --git a/scripts/completion/dvc.zsh b/scripts/completion/dvc.zsh index b04155db92..baacc5e54b 100644 --- a/scripts/completion/dvc.zsh +++ b/scripts/completion/dvc.zsh @@ -30,7 +30,7 @@ _dvc_commands() { "install:Install DVC git hooks into the repository." "list:List repository contents, including files and directories tracked by DVC and by Git." "lock:Lock DVC-file." - "metrics:Commands to add, manage, collect and display metrics." + "metrics:Commands to display and compare metrics." "move:Rename or move a DVC controlled data file or a directory." "params:Commands to display params." "pull:Pull data files from a DVC remote storage." @@ -182,7 +182,7 @@ _dvc_list=( ) _dvc_metrics=( - "1:Sub command:(add show diff modify remove)" + "1:Sub command:(show diff)" ) _dvc_move=( diff --git a/tests/func/test_repro.py b/tests/func/test_repro.py index 0d5c42c002..7581d16e8e 100644 --- a/tests/func/test_repro.py +++ b/tests/func/test_repro.py @@ -656,11 +656,17 @@ def test(self): stages = self.dvc.reproduce(file1_stage) self.assertEqual(len(stages), 0) - self.dvc.metrics.add(file1) + d = load_yaml(file1_stage) + d["outs"][0]["metric"] = True + dump_yaml(file1_stage, d) + stages = self.dvc.reproduce(file1_stage) self.assertEqual(len(stages), 0) - self.dvc.metrics.remove(file1) + d = load_yaml(file1_stage) + d["outs"][0]["metric"] = False + dump_yaml(file1_stage, d) + stages = self.dvc.reproduce(file1_stage) self.assertEqual(len(stages), 0)