Source code for viper.cli_base

"""Base classes for the viper.cli module."""

from argparse import _SubParsersAction
from argparse import ArgumentParser
from argparse import Namespace

import typing as t

__all__ = ["SubCommand"]


[docs]class SubCommand: """Base class for the subcommand parsers.""" name: t.Optional[str] = None aliases: t.Sequence[str] = ()
[docs] @classmethod def attach_to(cls, subparsers: _SubParsersAction) -> None: if not cls.name: raise NotImplementedError() # no cover subparser = subparsers.add_parser(cls.name, help=cls.__doc__) if cls.aliases: for alias in cls.aliases: cls(subparsers.add_parser(alias, help=f"alias of {repr(cls.name)}")) cls(subparser)
def __init__(self, subparser: ArgumentParser) -> None: self.add_arguments(subparser) subparser.set_defaults(_handler=self) subparser.add_argument( "--debug", action="store_true", help="show traceback information when an exception is raised", )
[docs] def add_arguments(self, parser: ArgumentParser) -> None: raise NotImplementedError() # no cover
def __call__(self, args: Namespace) -> int: raise NotImplementedError() # no cover