Source code for bsb.cli
import builtins
import inspect
import sys
from .._contexts import get_cli_context, reset_cli_context
from ..exceptions import CommandError, DryrunError
from .commands import load_root_command
[docs]
def handle_cli():
handle_command(sys.argv[1:], exit=True)
[docs]
def handle_command(command, dryrun=False, exit=False):
reset_cli_context()
context = get_cli_context()
root_command = load_root_command()
parser = root_command.get_parser(context)
try:
namespace = parser.parse_args(command)
except CommandError as e:
if exit:
print(e)
builtins.exit(1)
else:
raise
if not dryrun:
for action in namespace.internal_action_list or ():
action(namespace)
if not dryrun or _can_dryrun(namespace.handler, namespace):
namespace.handler(namespace, dryrun=dryrun)
else: # pragma: nocover
raise DryrunError(f"`{namespace.handler.__name__}` doesn't support dryruns.")
return context
def _can_dryrun(handler, namespace):
try:
return bool(inspect.signature(handler).bind(namespace, dryrun=True))
except TypeError:
return False
__all__ = ["handle_cli", "handle_command"]