From 3445ab485261ca7d5e45895023487ff243ddd20a Mon Sep 17 00:00:00 2001 From: adbenitez Date: Thu, 7 May 2026 18:00:44 +0200 Subject: [PATCH] fix broken generic options --- deltabot_cli/cli.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/deltabot_cli/cli.py b/deltabot_cli/cli.py index dd717d9..b32ce70 100644 --- a/deltabot_cli/cli.py +++ b/deltabot_cli/cli.py @@ -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 @@ -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) @@ -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( @@ -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", @@ -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", @@ -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)