diff --git a/dvc/cli/formatter.py b/dvc/cli/formatter.py new file mode 100644 index 000000000..b70383c35 --- /dev/null +++ b/dvc/cli/formatter.py @@ -0,0 +1,14 @@ +import argparse + + +class HelpFormatter(argparse.HelpFormatter): + def _get_default_metavar_for_optional(self, action: argparse.Action) -> str: + return action.dest + + +class RawTextHelpFormatter(HelpFormatter, argparse.RawTextHelpFormatter): + pass + + +class RawDescriptionHelpFormatter(HelpFormatter, argparse.RawDescriptionHelpFormatter): + pass diff --git a/dvc/cli/parser.py b/dvc/cli/parser.py index eb0b456e8..915fb2863 100644 --- a/dvc/cli/parser.py +++ b/dvc/cli/parser.py @@ -50,7 +50,7 @@ from dvc.commands import ( ) from dvc.log import logger -from . import DvcParserError +from . import DvcParserError, formatter logger = logger.getChild(__name__) @@ -165,7 +165,7 @@ def get_main_parser(): prog="dvc", description=desc, parents=[parent_parser], - formatter_class=argparse.RawTextHelpFormatter, + formatter_class=formatter.RawTextHelpFormatter, add_help=False, ) @@ -200,9 +200,9 @@ def get_main_parser(): # Sub commands subparsers = parser.add_subparsers( title="Available Commands", - metavar="COMMAND", + metavar="command", dest="cmd", - help="Use `dvc COMMAND --help` for command-specific help.", + help="Use `dvc command --help` for command-specific help.", ) from .utils import fix_subparsers diff --git a/dvc/commands/add.py b/dvc/commands/add.py index 4a0b246f3..1e0ccd7ae 100644 --- a/dvc/commands/add.py +++ b/dvc/commands/add.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -71,7 +69,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(ADD_HELP, "add"), help=ADD_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) parser.add_argument( "--no-commit", diff --git a/dvc/commands/artifacts.py b/dvc/commands/artifacts.py index ccd576c2f..68cf1ea4f 100644 --- a/dvc/commands/artifacts.py +++ b/dvc/commands/artifacts.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBaseNoRepo from dvc.cli.utils import DictAction, append_doc_link, fix_subparsers from dvc.exceptions import DvcException @@ -47,7 +45,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(ARTIFACTS_HELP, "artifacts"), help=ARTIFACTS_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) artifacts_subparsers = artifacts_parser.add_subparsers( dest="cmd", @@ -61,7 +59,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(ARTIFACTS_GET_HELP, "artifacts/get"), help=ARTIFACTS_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) get_parser.add_argument("url", help="Location of DVC repository to download from") get_parser.add_argument( diff --git a/dvc/commands/cache.py b/dvc/commands/cache.py index a567af00c..b77449d10 100644 --- a/dvc/commands/cache.py +++ b/dvc/commands/cache.py @@ -1,7 +1,7 @@ import argparse import os -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link, fix_subparsers from dvc.commands.config import CmdConfig @@ -58,7 +58,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(CACHE_HELP, "cache"), help=CACHE_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) cache_subparsers = cache_parser.add_subparsers( @@ -76,7 +76,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser, parent_cache_config_parser], description=append_doc_link(CACHE_HELP, "cache/dir"), help=CACHE_DIR_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) cache_dir_parser.add_argument( "-u", @@ -103,7 +103,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(CACHE_HELP, "cache/migrate"), help=CACHE_MIGRATE_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) cache_migrate_parser.add_argument( "--dvc-files", diff --git a/dvc/commands/check_ignore.py b/dvc/commands/check_ignore.py index b1a996474..d8f2597f9 100644 --- a/dvc/commands/check_ignore.py +++ b/dvc/commands/check_ignore.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.ui import ui @@ -85,7 +83,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(ADD_HELP, "check-ignore"), help=ADD_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) parser.add_argument( "-d", diff --git a/dvc/commands/checkout.py b/dvc/commands/checkout.py index a7a1b276d..201a5b53c 100644 --- a/dvc/commands/checkout.py +++ b/dvc/commands/checkout.py @@ -1,7 +1,6 @@ -import argparse import operator -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.exceptions import CheckoutError @@ -67,7 +66,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(CHECKOUT_HELP, "checkout"), help=CHECKOUT_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) checkout_parser.add_argument( "--summary", diff --git a/dvc/commands/commit.py b/dvc/commands/commit.py index 714b2433f..ef37e9cd9 100644 --- a/dvc/commands/commit.py +++ b/dvc/commands/commit.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -40,7 +38,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(COMMIT_HELP, "commit"), help=COMMIT_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) commit_parser.add_argument( "-f", diff --git a/dvc/commands/completion.py b/dvc/commands/completion.py index 119b60741..120856c5b 100644 --- a/dvc/commands/completion.py +++ b/dvc/commands/completion.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBaseNoRepo from dvc.cli.completion import PREAMBLE from dvc.cli.utils import append_doc_link @@ -31,7 +30,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(COMPLETION_DESCRIPTION, "completion"), help=COMPLETION_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) completion_parser.add_argument( "-s", diff --git a/dvc/commands/config.py b/dvc/commands/config.py index 6cd50a780..f3e650c5d 100644 --- a/dvc/commands/config.py +++ b/dvc/commands/config.py @@ -3,6 +3,7 @@ import os from funcy import set_in +from dvc.cli import formatter from dvc.cli.command import CmdBaseNoRepo from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -209,7 +210,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_config_parser, parent_parser], description=append_doc_link(CONFIG_HELP, "config"), help=CONFIG_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) config_parser.add_argument( "-u", diff --git a/dvc/commands/dag.py b/dvc/commands/dag.py index d119edca6..46b44d0d6 100644 --- a/dvc/commands/dag.py +++ b/dvc/commands/dag.py @@ -1,6 +1,6 @@ -import argparse from typing import TYPE_CHECKING +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.ui import ui @@ -160,7 +160,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(DAG_HELP, "dag"), help=DAG_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) dag_parser.add_argument( "--dot", diff --git a/dvc/commands/data.py b/dvc/commands/data.py index ca797a838..a77cf0eca 100644 --- a/dvc/commands/data.py +++ b/dvc/commands/data.py @@ -1,8 +1,8 @@ -import argparse from typing import TYPE_CHECKING from funcy import chunks, compact, log_durations +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link, fix_subparsers from dvc.log import logger @@ -129,7 +129,7 @@ def add_parser(subparsers, parent_parser): data_parser = subparsers.add_parser( "data", parents=[parent_parser], - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) data_subparsers = data_parser.add_subparsers( dest="cmd", @@ -144,7 +144,7 @@ def add_parser(subparsers, parent_parser): "status", parents=[parent_parser], description=append_doc_link(DATA_STATUS_HELP, "data/status"), - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, help=DATA_STATUS_HELP, ) data_status_parser.add_argument( diff --git a/dvc/commands/data_sync.py b/dvc/commands/data_sync.py index 0d6b314db..fa05cf7aa 100644 --- a/dvc/commands/data_sync.py +++ b/dvc/commands/data_sync.py @@ -1,6 +1,6 @@ import argparse -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -145,7 +145,7 @@ def add_parser(subparsers, _parent_parser): parents=[shared_parent_parser()], description=append_doc_link(PULL_HELP, "pull"), help=PULL_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) pull_parser.add_argument( "-r", "--remote", help="Remote storage to pull from", metavar="" @@ -220,7 +220,7 @@ def add_parser(subparsers, _parent_parser): parents=[shared_parent_parser()], description=append_doc_link(PUSH_HELP, "push"), help=PUSH_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) push_parser.add_argument( "-r", "--remote", help="Remote storage to push to", metavar="" @@ -282,7 +282,7 @@ def add_parser(subparsers, _parent_parser): parents=[shared_parent_parser()], description=append_doc_link(FETCH_HELP, "fetch"), help=FETCH_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) fetch_parser.add_argument( "-r", "--remote", help="Remote storage to fetch from", metavar="" @@ -355,7 +355,7 @@ def add_parser(subparsers, _parent_parser): description=append_doc_link(STATUS_HELP, "status"), help=STATUS_HELP, conflict_handler="resolve", - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) status_parser.add_argument( "-q", diff --git a/dvc/commands/destroy.py b/dvc/commands/destroy.py index 04990026c..720cfabf4 100644 --- a/dvc/commands/destroy.py +++ b/dvc/commands/destroy.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -41,7 +40,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(DESTROY_HELP, "destroy"), help=DESTROY_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) destroy_parser.add_argument( "-f", diff --git a/dvc/commands/diff.py b/dvc/commands/diff.py index 3c176558e..a869b432c 100644 --- a/dvc/commands/diff.py +++ b/dvc/commands/diff.py @@ -1,7 +1,6 @@ -import argparse import os -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -163,7 +162,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(DIFF_DESCRIPTION, "diff"), help=DIFF_DESCRIPTION, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) diff_parser.add_argument( "--targets", diff --git a/dvc/commands/du.py b/dvc/commands/du.py index 11f067c32..486695c5f 100644 --- a/dvc/commands/du.py +++ b/dvc/commands/du.py @@ -1,7 +1,6 @@ -import argparse import logging -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBaseNoRepo from dvc.cli.utils import DictAction, append_doc_link from dvc.ui import ui @@ -34,7 +33,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(DU_HELP, "du"), help=DU_HELP, - formatter_class=argparse.RawTextHelpFormatter, + formatter_class=formatter.RawTextHelpFormatter, ) du_parser.add_argument("url", help="Location of DVC repository") du_parser.add_argument( diff --git a/dvc/commands/experiments/__init__.py b/dvc/commands/experiments/__init__.py index 8a966894f..b2417d1d4 100644 --- a/dvc/commands/experiments/__init__.py +++ b/dvc/commands/experiments/__init__.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.utils import append_doc_link, fix_subparsers, hide_subparsers_from_help from dvc.commands.experiments import ( apply, @@ -44,7 +43,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], aliases=["exp"], description=append_doc_link(EXPERIMENTS_HELP, "exp"), - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, help=EXPERIMENTS_HELP, ) diff --git a/dvc/commands/experiments/apply.py b/dvc/commands/experiments/apply.py index 28d7d789e..0062dd254 100644 --- a/dvc/commands/experiments/apply.py +++ b/dvc/commands/experiments/apply.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -30,7 +28,7 @@ def add_parser(experiments_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(EXPERIMENTS_APPLY_HELP, "exp/apply"), help=EXPERIMENTS_APPLY_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) experiments_apply_parser.add_argument( "--no-force", diff --git a/dvc/commands/experiments/branch.py b/dvc/commands/experiments/branch.py index de254db9d..7a6d09ca1 100644 --- a/dvc/commands/experiments/branch.py +++ b/dvc/commands/experiments/branch.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -21,7 +20,7 @@ def add_parser(experiments_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(EXPERIMENTS_BRANCH_HELP, "exp/branch"), help=EXPERIMENTS_BRANCH_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) experiments_branch_parser.add_argument( "experiment", help="Experiment to be promoted." diff --git a/dvc/commands/experiments/clean.py b/dvc/commands/experiments/clean.py index f52758288..203dffd41 100644 --- a/dvc/commands/experiments/clean.py +++ b/dvc/commands/experiments/clean.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -20,6 +19,6 @@ def add_parser(experiments_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(EXPERIMENTS_CLEAN_HELP, "exp/clean"), help=EXPERIMENTS_CLEAN_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) experiments_clean_parser.set_defaults(func=CmdExperimentsClean) diff --git a/dvc/commands/experiments/diff.py b/dvc/commands/experiments/diff.py index 16d0df18c..6df702fbd 100644 --- a/dvc/commands/experiments/diff.py +++ b/dvc/commands/experiments/diff.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.commands.metrics import DEFAULT_PRECISION @@ -59,7 +57,7 @@ def add_parser(experiments_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(EXPERIMENTS_DIFF_HELP, "exp/diff"), help=EXPERIMENTS_DIFF_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) experiments_diff_parser.add_argument( "a_rev", nargs="?", help="Old experiment to compare (defaults to HEAD)" diff --git a/dvc/commands/experiments/ls.py b/dvc/commands/experiments/ls.py index 29a6e75f4..86312e478 100644 --- a/dvc/commands/experiments/ls.py +++ b/dvc/commands/experiments/ls.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.exceptions import InvalidArgumentError @@ -63,7 +62,7 @@ def add_parser(experiments_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(EXPERIMENTS_LIST_HELP, "exp/list"), help=EXPERIMENTS_LIST_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) add_rev_selection_flags(experiments_list_parser, "List") display_group = experiments_list_parser.add_mutually_exclusive_group() diff --git a/dvc/commands/experiments/pull.py b/dvc/commands/experiments/pull.py index a04cacc71..768c21ba7 100644 --- a/dvc/commands/experiments/pull.py +++ b/dvc/commands/experiments/pull.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -49,7 +48,7 @@ def add_parser(experiments_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(EXPERIMENTS_PULL_HELP, "exp/pull"), help=EXPERIMENTS_PULL_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) add_rev_selection_flags(experiments_pull_parser, "Pull", True) experiments_pull_parser.add_argument( diff --git a/dvc/commands/experiments/push.py b/dvc/commands/experiments/push.py index 771ef9806..4b1ec750b 100644 --- a/dvc/commands/experiments/push.py +++ b/dvc/commands/experiments/push.py @@ -1,7 +1,6 @@ -import argparse from typing import Any, Dict -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -90,7 +89,7 @@ def add_parser(experiments_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(EXPERIMENTS_PUSH_HELP, "exp/push"), help=EXPERIMENTS_PUSH_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) add_rev_selection_flags(experiments_push_parser, "Push", True) experiments_push_parser.add_argument( diff --git a/dvc/commands/experiments/remove.py b/dvc/commands/experiments/remove.py index 34f2ccdba..f7c48d73a 100644 --- a/dvc/commands/experiments/remove.py +++ b/dvc/commands/experiments/remove.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.exceptions import InvalidArgumentError @@ -54,7 +53,7 @@ def add_parser(experiments_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(EXPERIMENTS_REMOVE_HELP, "exp/remove"), help=EXPERIMENTS_REMOVE_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) remove_group = experiments_remove_parser.add_mutually_exclusive_group() add_rev_selection_flags(experiments_remove_parser, "Remove", False) diff --git a/dvc/commands/experiments/rename.py b/dvc/commands/experiments/rename.py index 6d65a76e0..af71ad1e8 100644 --- a/dvc/commands/experiments/rename.py +++ b/dvc/commands/experiments/rename.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.exceptions import InvalidArgumentError @@ -38,7 +37,7 @@ def add_parser(experiments_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(EXPERIMENTS_RENAME_HELP, "exp/rename"), help=EXPERIMENTS_RENAME_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) rename_group = experiments_rename_parser.add_mutually_exclusive_group() rename_group.add_argument( diff --git a/dvc/commands/experiments/run.py b/dvc/commands/experiments/run.py index 654b1df0c..c95ca5abd 100644 --- a/dvc/commands/experiments/run.py +++ b/dvc/commands/experiments/run.py @@ -1,5 +1,6 @@ import argparse +from dvc.cli import formatter from dvc.cli.utils import append_doc_link from dvc.commands.repro import CmdRepro from dvc.commands.repro import add_arguments as add_repro_arguments @@ -32,7 +33,7 @@ def add_parser(experiments_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(EXPERIMENTS_RUN_HELP, "exp/run"), help=EXPERIMENTS_RUN_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) _add_run_common(experiments_run_parser) experiments_run_parser.set_defaults(func=CmdExperimentsRun) diff --git a/dvc/commands/experiments/save.py b/dvc/commands/experiments/save.py index f2f28c7e6..c73123fea 100644 --- a/dvc/commands/experiments/save.py +++ b/dvc/commands/experiments/save.py @@ -1,5 +1,6 @@ import argparse +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.exceptions import DvcException @@ -38,7 +39,7 @@ def add_parser(experiments_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(EXPERIMENTS_SAVE_HELP, "exp/save"), help=EXPERIMENTS_SAVE_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) save_parser.add_argument( "-f", diff --git a/dvc/commands/experiments/show.py b/dvc/commands/experiments/show.py index df450a550..8c4e7cd23 100644 --- a/dvc/commands/experiments/show.py +++ b/dvc/commands/experiments/show.py @@ -5,6 +5,7 @@ from typing import TYPE_CHECKING, Dict, Iterable from funcy import lmap +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.commands.metrics import DEFAULT_PRECISION @@ -200,7 +201,7 @@ def add_parser(experiments_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(EXPERIMENTS_SHOW_HELP, "exp/show"), help=EXPERIMENTS_SHOW_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) add_rev_selection_flags(experiments_show_parser, "Show") experiments_show_parser.add_argument( diff --git a/dvc/commands/freeze.py b/dvc/commands/freeze.py index 5104ed785..33794ed97 100644 --- a/dvc/commands/freeze.py +++ b/dvc/commands/freeze.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.exceptions import DvcException @@ -38,7 +36,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(FREEZE_HELP, "freeze"), help=FREEZE_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) freeze_parser.add_argument( "targets", nargs="+", help="Stages or .dvc files to freeze" @@ -51,7 +49,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(UNFREEZE_HELP, "unfreeze"), help=UNFREEZE_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) unfreeze_parser.add_argument( "targets", nargs="+", help="Stages or .dvc files to unfreeze" diff --git a/dvc/commands/gc.py b/dvc/commands/gc.py index 9bb0f8ded..96a2e1c32 100644 --- a/dvc/commands/gc.py +++ b/dvc/commands/gc.py @@ -1,6 +1,6 @@ -import argparse import os +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -102,7 +102,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(GC_DESCRIPTION, "gc"), help=GC_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) gc_parser.add_argument( "-w", @@ -156,12 +156,12 @@ def add_parser(subparsers, parent_parser): "--date", type=str, dest="commit_date", - metavar="", + metavar="", default=None, help=( "Keep cached data referenced in the commits after ( inclusive )" " a certain time. Date must match the extended ISO 8601 format " - "(YYYY-MM-DD)." + "(yyyy-mm-dd)." ), ) gc_parser.add_argument( diff --git a/dvc/commands/get.py b/dvc/commands/get.py index 2d8a5a9eb..2014eee1d 100644 --- a/dvc/commands/get.py +++ b/dvc/commands/get.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBaseNoRepo from dvc.cli.utils import DictAction, append_doc_link from dvc.exceptions import DvcException @@ -59,7 +57,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(GET_HELP, "get"), help=GET_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) get_parser.add_argument( "url", help="Location of DVC or Git repository to download from" diff --git a/dvc/commands/get_url.py b/dvc/commands/get_url.py index 1f33be319..1cb042857 100644 --- a/dvc/commands/get_url.py +++ b/dvc/commands/get_url.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBaseNoRepo from dvc.cli.utils import DictAction, append_doc_link from dvc.exceptions import DvcException @@ -36,7 +34,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(GET_HELP, "get-url"), help=GET_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) get_parser.add_argument( "url", help="See `dvc import-url -h` for full list of supported URLs." diff --git a/dvc/commands/git_hook.py b/dvc/commands/git_hook.py index 9b1547561..838979e02 100644 --- a/dvc/commands/git_hook.py +++ b/dvc/commands/git_hook.py @@ -1,5 +1,6 @@ import os +from dvc.cli import formatter from dvc.cli.command import CmdBaseNoRepo from dvc.cli.utils import fix_subparsers from dvc.exceptions import NotDvcRepoError @@ -140,6 +141,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=MERGE_DRIVER_HELP, help=MERGE_DRIVER_HELP, + formatter_class=formatter.HelpFormatter, ) merge_driver_parser.add_argument( "--ancestor", diff --git a/dvc/commands/imp.py b/dvc/commands/imp.py index 1e6b52027..9b1437757 100644 --- a/dvc/commands/imp.py +++ b/dvc/commands/imp.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import DictAction, append_doc_link from dvc.exceptions import DvcException @@ -51,7 +49,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(IMPORT_HELP, "import"), help=IMPORT_HELP, - formatter_class=argparse.RawTextHelpFormatter, + formatter_class=formatter.RawTextHelpFormatter, ) import_parser.add_argument( "url", help="Location of DVC or Git repository to download from" diff --git a/dvc/commands/imp_db.py b/dvc/commands/imp_db.py index be8b84084..14ea6d960 100644 --- a/dvc/commands/imp_db.py +++ b/dvc/commands/imp_db.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase, CmdBaseNoRepo from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -53,7 +51,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(IMPORT_HELP, "import-db"), help=IMPORT_HELP, - formatter_class=argparse.RawTextHelpFormatter, + formatter_class=formatter.RawTextHelpFormatter, ) group = import_parser.add_mutually_exclusive_group(required=True) group.add_argument("--sql", help="SQL query to snapshot", metavar="sql") diff --git a/dvc/commands/imp_url.py b/dvc/commands/imp_url.py index 3c0bdc5db..24e725463 100644 --- a/dvc/commands/imp_url.py +++ b/dvc/commands/imp_url.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import DictAction, append_doc_link from dvc.exceptions import DvcException @@ -44,7 +42,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(IMPORT_HELP, "import-url"), help=IMPORT_HELP, - formatter_class=argparse.RawTextHelpFormatter, + formatter_class=formatter.RawTextHelpFormatter, ) import_parser.add_argument( "url", diff --git a/dvc/commands/init.py b/dvc/commands/init.py index 62815c616..5f6d7424c 100644 --- a/dvc/commands/init.py +++ b/dvc/commands/init.py @@ -1,8 +1,7 @@ -import argparse - import colorama from dvc import analytics +from dvc.cli import formatter from dvc.cli.command import CmdBaseNoRepo from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -69,7 +68,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(INIT_DESCRIPTION, "init"), help=INIT_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) init_parser.add_argument( "--no-scm", diff --git a/dvc/commands/install.py b/dvc/commands/install.py index c8d05593e..663e21cda 100644 --- a/dvc/commands/install.py +++ b/dvc/commands/install.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.exceptions import DvcException @@ -25,7 +24,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(INSTALL_HELP, "install"), help=INSTALL_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) install_parser.add_argument( "--use-pre-commit-tool", diff --git a/dvc/commands/ls/__init__.py b/dvc/commands/ls/__init__.py index c027827f3..2d34aecf8 100644 --- a/dvc/commands/ls/__init__.py +++ b/dvc/commands/ls/__init__.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBaseNoRepo from dvc.cli.utils import DictAction, append_doc_link from dvc.commands.ls.ls_colors import LsColors @@ -75,7 +73,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(LIST_HELP, "list"), help=LIST_HELP, - formatter_class=argparse.RawTextHelpFormatter, + formatter_class=formatter.RawTextHelpFormatter, ) list_parser.add_argument("url", help="Location of DVC repository to list") list_parser.add_argument( diff --git a/dvc/commands/ls_url.py b/dvc/commands/ls_url.py index 58df43dfc..63ade1eab 100644 --- a/dvc/commands/ls_url.py +++ b/dvc/commands/ls_url.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBaseNoRepo from dvc.cli.utils import DictAction, append_doc_link from dvc.log import logger @@ -33,7 +32,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(LS_HELP, "list-url"), help=LS_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) lsurl_parser.add_argument( "url", help="See `dvc import-url -h` for full list of supported URLs." diff --git a/dvc/commands/metrics.py b/dvc/commands/metrics.py index 45f23653d..b472115b9 100644 --- a/dvc/commands/metrics.py +++ b/dvc/commands/metrics.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link, fix_subparsers from dvc.log import logger @@ -107,7 +105,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(METRICS_HELP, "metrics"), help=METRICS_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) metrics_subparsers = metrics_parser.add_subparsers( @@ -123,7 +121,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(METRICS_SHOW_HELP, "metrics/show"), help=METRICS_SHOW_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) metrics_show_parser.add_argument( "targets", @@ -197,7 +195,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(METRICS_DIFF_HELP, "metrics/diff"), help=METRICS_DIFF_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) metrics_diff_parser.add_argument( "a_rev", diff --git a/dvc/commands/move.py b/dvc/commands/move.py index b729ea7a9..40be11251 100644 --- a/dvc/commands/move.py +++ b/dvc/commands/move.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.exceptions import DvcException @@ -34,7 +32,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(MOVE_DESCRIPTION, "move"), help=MOVE_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) move_parser.add_argument( "src", help="Source path to a data file or directory." diff --git a/dvc/commands/params.py b/dvc/commands/params.py index 5ed737c65..ede02b94b 100644 --- a/dvc/commands/params.py +++ b/dvc/commands/params.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link, fix_subparsers from dvc.log import logger @@ -61,7 +59,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(PARAMS_HELP, "params"), help=PARAMS_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) params_subparsers = params_parser.add_subparsers( @@ -80,7 +78,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(PARAMS_DIFF_HELP, "params/diff"), help=PARAMS_DIFF_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) params_diff_parser.add_argument( "a_rev", diff --git a/dvc/commands/plots.py b/dvc/commands/plots.py index 4c22ea2fe..4fe70f890 100644 --- a/dvc/commands/plots.py +++ b/dvc/commands/plots.py @@ -4,7 +4,7 @@ from typing import TYPE_CHECKING, Dict, List, Optional from funcy import compact, first, get_in -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link, fix_subparsers from dvc.exceptions import DvcException @@ -223,7 +223,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(PLOTS_HELP, "plots"), help=PLOTS_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) plots_subparsers = plots_parser.add_subparsers( dest="cmd", @@ -240,7 +240,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(SHOW_HELP, "plots/show"), help=SHOW_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) plots_show_parser.add_argument( "targets", @@ -263,7 +263,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(PLOTS_DIFF_HELP, "plots/diff"), help=PLOTS_DIFF_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) plots_diff_parser.add_argument( "--targets", @@ -299,7 +299,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(PLOTS_MODIFY_HELP, "plots/modify"), help=PLOTS_MODIFY_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) plots_modify_parser.add_argument( "target", @@ -320,7 +320,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(TEMPLATES_HELP, "plots/templates"), help=TEMPLATES_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) plots_templates_parser.add_argument( "template", diff --git a/dvc/commands/queue/__init__.py b/dvc/commands/queue/__init__.py index 73deb38b8..e3315a090 100644 --- a/dvc/commands/queue/__init__.py +++ b/dvc/commands/queue/__init__.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.utils import append_doc_link, fix_subparsers from dvc.commands.queue import kill, logs, remove, start, status, stop @@ -20,7 +19,7 @@ def add_parser(subparsers, parent_parser): "queue", parents=[parent_parser], description=append_doc_link(QUEUE_HELP, "queue"), - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, help=QUEUE_HELP, ) diff --git a/dvc/commands/queue/kill.py b/dvc/commands/queue/kill.py index de1598670..41724168c 100644 --- a/dvc/commands/queue/kill.py +++ b/dvc/commands/queue/kill.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -27,7 +26,7 @@ def add_parser(queue_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(QUEUE_KILL_HELP, "queue/kill"), help=QUEUE_KILL_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) queue_kill_parser.add_argument( "-f", diff --git a/dvc/commands/queue/logs.py b/dvc/commands/queue/logs.py index 2724254d8..dda44c3dc 100644 --- a/dvc/commands/queue/logs.py +++ b/dvc/commands/queue/logs.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -29,7 +28,7 @@ def add_parser(queue_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(QUEUE_LOGS_HELP, "queue/logs"), help=QUEUE_LOGS_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) queue_logs_parser.add_argument( "-e", diff --git a/dvc/commands/queue/remove.py b/dvc/commands/queue/remove.py index b5afedc54..ac95f76ca 100644 --- a/dvc/commands/queue/remove.py +++ b/dvc/commands/queue/remove.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.exceptions import InvalidArgumentError @@ -62,7 +61,7 @@ def add_parser(queue_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(QUEUE_REMOVE_HELP, "queue/remove"), help=QUEUE_REMOVE_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) queue_remove_parser.add_argument( "--all", diff --git a/dvc/commands/queue/start.py b/dvc/commands/queue/start.py index f1df8d571..5743d20c7 100644 --- a/dvc/commands/queue/start.py +++ b/dvc/commands/queue/start.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -27,7 +26,7 @@ def add_parser(queue_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(QUEUE_START_HELP, "queue/start"), help=QUEUE_START_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) queue_start_parser.add_argument( "-j", diff --git a/dvc/commands/queue/status.py b/dvc/commands/queue/status.py index 68fd73cf3..cf8aadcce 100644 --- a/dvc/commands/queue/status.py +++ b/dvc/commands/queue/status.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.compare import TabularData @@ -52,6 +51,6 @@ def add_parser(queue_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(QUEUE_STATUS_HELP, "queue/status"), help=QUEUE_STATUS_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) queue_status_parser.set_defaults(func=CmdQueueStatus) diff --git a/dvc/commands/queue/stop.py b/dvc/commands/queue/stop.py index 843927337..d0a08dd99 100644 --- a/dvc/commands/queue/stop.py +++ b/dvc/commands/queue/stop.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -32,7 +31,7 @@ def add_parser(queue_subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(QUEUE_STOP_HELP, "queue/stop"), help=QUEUE_STOP_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) queue_stop_parser.add_argument( "--kill", diff --git a/dvc/commands/remote.py b/dvc/commands/remote.py index 1e3c4e5da..12967c001 100644 --- a/dvc/commands/remote.py +++ b/dvc/commands/remote.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.utils import append_doc_link, fix_subparsers from dvc.commands.config import CmdConfig from dvc.ui import ui @@ -155,7 +154,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(REMOTE_HELP, "remote"), help=REMOTE_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) remote_subparsers = remote_parser.add_subparsers( @@ -171,7 +170,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_config_parser, parent_parser], description=append_doc_link(REMOTE_ADD_HELP, "remote/add"), help=REMOTE_ADD_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) remote_add_parser.add_argument("name", help="Name of the remote") remote_add_parser.add_argument( @@ -202,7 +201,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_config_parser, parent_parser], description=append_doc_link(REMOTE_DEFAULT_HELP, "remote/default"), help=REMOTE_DEFAULT_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) remote_default_parser.add_argument("name", nargs="?", help="Name of the remote") remote_default_parser.add_argument( @@ -220,7 +219,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_config_parser, parent_parser], description=append_doc_link(REMOTE_MODIFY_HELP, "remote/modify"), help=REMOTE_MODIFY_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) remote_modify_parser.add_argument("name", help="Name of the remote") remote_modify_parser.add_argument("option", help="Name of the option to modify.") @@ -242,7 +241,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_config_parser, parent_parser], description=append_doc_link(REMOTE_LIST_HELP, "remote/list"), help=REMOTE_LIST_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) remote_list_parser.set_defaults(func=CmdRemoteList) @@ -252,7 +251,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_config_parser, parent_parser], description=append_doc_link(REMOTE_REMOVE_HELP, "remote/remove"), help=REMOTE_REMOVE_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) remote_remove_parser.add_argument("name", help="Name of the remote to remove.") remote_remove_parser.set_defaults(func=CmdRemoteRemove) @@ -262,7 +261,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_config_parser, parent_parser], description=append_doc_link(REMOTE_RENAME_HELP, "remote/rename"), help=REMOTE_RENAME_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) remote_rename_parser.add_argument("name", help="Remote to be renamed") remote_rename_parser.add_argument("new", help="New name of the remote") diff --git a/dvc/commands/remove.py b/dvc/commands/remove.py index 337dd9d52..1205cabea 100644 --- a/dvc/commands/remove.py +++ b/dvc/commands/remove.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.exceptions import DvcException @@ -30,7 +28,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(REMOVE_HELP, "remove"), help=REMOVE_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) remove_parser.add_argument( "--outs", diff --git a/dvc/commands/repro.py b/dvc/commands/repro.py index 6a448142b..fb085a1fe 100644 --- a/dvc/commands/repro.py +++ b/dvc/commands/repro.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.commands.status import CmdDataStatus @@ -167,7 +165,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(REPRO_HELP, "repro"), help=REPRO_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) # repro/exp run shared args add_arguments(repro_parser) diff --git a/dvc/commands/root.py b/dvc/commands/root.py index 5e7b4469f..493c2b011 100644 --- a/dvc/commands/root.py +++ b/dvc/commands/root.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBaseNoRepo from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -24,6 +23,6 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(ROOT_HELP, "root"), help=ROOT_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) root_parser.set_defaults(func=CmdRoot) diff --git a/dvc/commands/stage.py b/dvc/commands/stage.py index 83b66ce6e..46b86aaaf 100644 --- a/dvc/commands/stage.py +++ b/dvc/commands/stage.py @@ -4,7 +4,7 @@ from contextlib import contextmanager from itertools import chain, filterfalse from typing import TYPE_CHECKING, Dict, Iterable, List -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link, fix_subparsers from dvc.log import logger @@ -284,7 +284,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(STAGES_HELP, "stage"), help=STAGES_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) stage_subparsers = stage_parser.add_subparsers( @@ -300,7 +300,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(STAGE_ADD_HELP, "stage/add"), help=STAGE_ADD_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) stage_add_parser.add_argument( "-n", "--name", help="Name of the stage to add", required=True @@ -314,7 +314,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(STAGE_LIST_HELP, "stage/list"), help=STAGE_LIST_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) stage_list_parser.add_argument( "targets", diff --git a/dvc/commands/studio.py b/dvc/commands/studio.py index 00b828557..1239cf57d 100644 --- a/dvc/commands/studio.py +++ b/dvc/commands/studio.py @@ -1,8 +1,8 @@ -import argparse import os from funcy import get_in +from dvc.cli import formatter from dvc.cli.utils import append_doc_link, fix_subparsers from dvc.commands.config import CmdConfig from dvc.log import logger @@ -92,7 +92,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(STUDIO_DESCRIPTION, "studio"), help=STUDIO_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) studio_subparser = studio_parser.add_subparsers( dest="cmd", @@ -110,7 +110,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(STUDIO_LOGIN_DESCRIPTION, "studio/login"), help=STUDIO_LOGIN_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) login_parser.add_argument( @@ -157,7 +157,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(STUDIO_LOGOUT_DESCRIPTION, "studio/logout"), help=STUDIO_LOGOUT_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) logout_parser.set_defaults(func=CmdStudioLogout) @@ -169,7 +169,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(STUDIO_TOKEN_HELP, "studio/token"), help=STUDIO_TOKEN_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) logout_parser.set_defaults(func=CmdStudioToken) diff --git a/dvc/commands/unprotect.py b/dvc/commands/unprotect.py index b6b65f0eb..ab5803909 100644 --- a/dvc/commands/unprotect.py +++ b/dvc/commands/unprotect.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.exceptions import DvcException @@ -31,7 +29,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(UNPROTECT_HELP, "unprotect"), help=UNPROTECT_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) unprotect_parser.add_argument( "targets", nargs="+", help="Data files/directories to unprotect." diff --git a/dvc/commands/update.py b/dvc/commands/update.py index 713befac3..660e03764 100644 --- a/dvc/commands/update.py +++ b/dvc/commands/update.py @@ -1,6 +1,4 @@ -import argparse - -from dvc.cli import completion +from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.exceptions import DvcException @@ -38,7 +36,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(UPDATE_HELP, "update"), help=UPDATE_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, ) update_parser.add_argument( "targets", nargs="+", help=".dvc files to update." diff --git a/dvc/commands/version.py b/dvc/commands/version.py index a29b68789..c7d03645b 100644 --- a/dvc/commands/version.py +++ b/dvc/commands/version.py @@ -1,5 +1,4 @@ -import argparse - +from dvc.cli import formatter from dvc.cli.command import CmdBaseNoRepo from dvc.cli.utils import append_doc_link from dvc.log import logger @@ -27,7 +26,7 @@ def add_parser(subparsers, parent_parser): parents=[parent_parser], description=append_doc_link(VERSION_HELP, "version"), help=VERSION_HELP, - formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=formatter.RawDescriptionHelpFormatter, aliases=["doctor"], ) version_parser.set_defaults(func=CmdVersion) diff --git a/tests/unit/command/test_help.py b/tests/unit/command/test_help.py index d5be4c58c..3eb453ede 100644 --- a/tests/unit/command/test_help.py +++ b/tests/unit/command/test_help.py @@ -1,5 +1,7 @@ import logging +import re from argparse import SUPPRESS, ArgumentParser +from itertools import takewhile from typing import Tuple import pytest @@ -44,5 +46,19 @@ def test_help(caplog, capsys, command_tuples): assert not caplog.text out, err = capsys.readouterr() + + # validate metavars are all in lowercase + usage = "\n".join(takewhile(lambda o: bool(o), out.splitlines())) + + message = ( + "metavars not lowercased, you are likely missing formatter_class=XXX " + "in the command, where XXX should be any of the classes from " + "`dvc.cli.formatter`, which automatically lowercases metavars.\n" + "\nExample:\n" + "\nfrom dvc.cli import formatter\n" + "\nparser.add_parser(..., formatter_class=formatter.TextHelpFormatter)\n" + ) + assert not re.findall(r"\b[A-Z]{2,}\b", usage, re.MULTILINE), message + assert not err assert out