Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 10 additions & 12 deletions deltabot_cli/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import subprocess
import sys
import time
from argparse import ArgumentParser, Namespace
from argparse import SUPPRESS, ArgumentParser, Namespace
from pathlib import Path
from threading import Thread
from typing import Callable, Union
Expand Down Expand Up @@ -40,6 +40,8 @@ def __init__(self, app_name: str, log_level: str = "info") -> None:
self._start_hooks: set[CliEventHook] = set()
self._bot: Bot

self._add_default_generic_options()

def on(self, event: Union[type, EventFilter]) -> HookDecorator:
"""Register decorated function as listener for the given event."""
return self._hooks.on(event)
Expand Down Expand Up @@ -80,7 +82,7 @@ def add_generic_option(self, *flags, **kwargs) -> None:
"""
if not (flags and flags[0].startswith("-")):
raise ValueError("can not generically add positional args")
self._base_parser.add_argument(*flags, **kwargs)
self._base_parser.add_argument(*flags, **{**kwargs, "default": SUPPRESS})
self._parser.add_argument(*flags, **kwargs)

def add_subcommand(
Expand All @@ -93,18 +95,12 @@ def add_subcommand(
kwargs["name"] = func.__name__
if not kwargs.get("help") and not kwargs.get("description"):
kwargs["help"], kwargs["description"] = parse_docstring(func.__doc__)
if "parents" not in kwargs:
kwargs["parents"] = [self._base_parser]
subparser = self._subparsers.add_parser(**kwargs)
subparser = self._subparsers.add_parser(**{**kwargs, "parents": [self._base_parser]})
subparser.set_defaults(cmd=func)
return subparser

def init_parser(self) -> None:
"""Add some default options and subcommands.

You don't have to call this method manually. Overwrite this method
if you don't want the default options and subcommand.
"""
def _add_default_generic_options(self) -> None:
"""Add some default generic options."""
config_dir = user_config_dir(self.app_name)
self.add_generic_option(
"--config-dir",
Expand Down Expand Up @@ -132,6 +128,8 @@ def init_parser(self) -> None:
choices=["debug", "info", "warning", "error", "critical"],
)

def _init_parser(self) -> None:
"""Add some default subcommands."""
init_parser = self.add_subcommand(_init_cmd, name="init")
init_parser.add_argument(
"addr",
Expand Down Expand Up @@ -213,7 +211,7 @@ def reset_admin_chat(self, rpc: Rpc, accid: int) -> int:

def start(self) -> None:
"""Start running the bot and processing incoming messages."""
self.init_parser()
self._init_parser()
args = self._parser.parse_args()
log_level = int(getattr(logging, args.logging.upper()))
logger = logging.Logger(self.app_name, log_level)
Expand Down