From 4268b5a33942bc4aabc84fbce927d7da91771489 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Saugat=20Pachhai=20=28=E0=A4=B8=E0=A5=8C=E0=A4=97=E0=A4=BE?= =?UTF-8?q?=E0=A4=A4=29?= Date: Wed, 19 Jan 2022 14:07:14 +0545 Subject: [PATCH] cli: don't inherit DvcParserError from DvcException, move to dvc.cli --- dvc/cli/__init__.py | 15 +++++++++++---- dvc/cli/parser.py | 6 +++--- dvc/exceptions.py | 7 ------- tests/func/test_cli.py | 4 ++-- tests/unit/command/test_config.py | 3 +-- tests/unit/command/test_experiments.py | 4 ++-- 6 files changed, 19 insertions(+), 20 deletions(-) diff --git a/dvc/cli/__init__.py b/dvc/cli/__init__.py index 21142e2c3..94613db2c 100644 --- a/dvc/cli/__init__.py +++ b/dvc/cli/__init__.py @@ -9,6 +9,13 @@ import logging logger = logging.getLogger("dvc") +class DvcParserError(Exception): + """Base class for CLI parser errors.""" + + def __init__(self): + super().__init__("parser error") + + def parse_args(argv=None): """Parses CLI arguments. @@ -16,7 +23,7 @@ def parse_args(argv=None): argv: optional list of arguments to parse. sys.argv is used by default. Raises: - dvc.exceptions.DvcParserError: raised for argument parsing errors. + DvcParserError: raised for argument parsing errors. """ from .parser import get_main_parser @@ -36,7 +43,7 @@ def main(argv=None): # noqa: C901 """ from dvc._debug import debugtools from dvc.config import ConfigError - from dvc.exceptions import DvcException, DvcParserError, NotDvcRepoError + from dvc.exceptions import DvcException, NotDvcRepoError from dvc.logger import FOOTER, disable_other_loggers args = None @@ -76,11 +83,11 @@ def main(argv=None): # noqa: C901 except NotDvcRepoError: logger.exception("") ret = 253 - except DvcParserError: - ret = 254 except DvcException: ret = 255 logger.exception("") + except DvcParserError: + ret = 254 except Exception as exc: # noqa, pylint: disable=broad-except # pylint: disable=no-member import errno diff --git a/dvc/cli/parser.py b/dvc/cli/parser.py index 5b6d9ec2a..9b2ea265e 100644 --- a/dvc/cli/parser.py +++ b/dvc/cli/parser.py @@ -45,6 +45,8 @@ from dvc.command import ( version, ) +from . import DvcParserError + logger = logging.getLogger(__name__) COMMANDS = [ @@ -92,10 +94,8 @@ COMMANDS = [ def _find_parser(parser, cmd_cls): defaults = parser._defaults # pylint: disable=protected-access if not cmd_cls or cmd_cls == defaults.get("func"): - from dvc.exceptions import DvcParserError - parser.print_help() - raise DvcParserError() + raise DvcParserError actions = parser._actions # pylint: disable=protected-access for action in actions: diff --git a/dvc/exceptions.py b/dvc/exceptions.py index 6bc38fb53..435c11fa8 100644 --- a/dvc/exceptions.py +++ b/dvc/exceptions.py @@ -128,13 +128,6 @@ class NotDvcRepoError(DvcException): """Thrown if a directory is not a DVC repo""" -class DvcParserError(DvcException): - """Base class for CLI parser errors.""" - - def __init__(self): - super().__init__("parser error") - - class CyclicGraphError(DvcException): def __init__(self, stages): assert isinstance(stages, list) diff --git a/tests/func/test_cli.py b/tests/func/test_cli.py index e1cb844d3..9d9fc84d4 100644 --- a/tests/func/test_cli.py +++ b/tests/func/test_cli.py @@ -1,6 +1,6 @@ import os -from dvc.cli import parse_args +from dvc.cli import DvcParserError, parse_args from dvc.command.add import CmdAdd from dvc.command.base import CmdBase from dvc.command.checkout import CmdCheckout @@ -12,7 +12,7 @@ from dvc.command.remove import CmdRemove from dvc.command.repro import CmdRepro from dvc.command.run import CmdRun from dvc.command.status import CmdDataStatus -from dvc.exceptions import DvcException, DvcParserError +from dvc.exceptions import DvcException from tests.basic_env import TestDvc diff --git a/tests/unit/command/test_config.py b/tests/unit/command/test_config.py index 4530762cf..b89683833 100644 --- a/tests/unit/command/test_config.py +++ b/tests/unit/command/test_config.py @@ -1,8 +1,7 @@ import pytest -from dvc.cli import parse_args +from dvc.cli import DvcParserError, parse_args from dvc.command.config import CmdConfig -from dvc.exceptions import DvcParserError def test_config_formatter(): diff --git a/tests/unit/command/test_experiments.py b/tests/unit/command/test_experiments.py index 2ff01914e..3ad86ce75 100644 --- a/tests/unit/command/test_experiments.py +++ b/tests/unit/command/test_experiments.py @@ -4,7 +4,7 @@ from datetime import datetime import pytest -from dvc.cli import parse_args +from dvc.cli import DvcParserError, parse_args from dvc.command.experiments.apply import CmdExperimentsApply from dvc.command.experiments.branch import CmdExperimentsBranch from dvc.command.experiments.diff import CmdExperimentsDiff @@ -16,7 +16,7 @@ from dvc.command.experiments.push import CmdExperimentsPush from dvc.command.experiments.remove import CmdExperimentsRemove from dvc.command.experiments.run import CmdExperimentsRun from dvc.command.experiments.show import CmdExperimentsShow, show_experiments -from dvc.exceptions import DvcParserError, InvalidArgumentError +from dvc.exceptions import InvalidArgumentError from dvc.repo import Repo from dvc.stage import PipelineStage from tests.utils import ANY