diff --git a/amqtt/scripts/broker_script.py b/amqtt/scripts/broker_script.py index d0df947..a09af24 100644 --- a/amqtt/scripts/broker_script.py +++ b/amqtt/scripts/broker_script.py @@ -16,9 +16,10 @@ import asyncio import logging from pathlib import Path -from docopt import docopt +import typer import amqtt +from amqtt import __version__ as amqtt_version from amqtt.broker import Broker from amqtt.utils import read_yaml_config @@ -43,15 +44,34 @@ logger = logging.getLogger(__name__) def main() -> None: """Run the MQTT broker.""" - arguments = docopt(__doc__, version=amqtt.__version__) + typer.run(broker_main) + + +def _version(v:bool) -> None: + if v: + typer.echo(f"{amqtt_version}") + raise typer.Exit(code=0) + + +def broker_main( + config_file: str | None = typer.Option(None, "-c", help="Broker configuration file (YAML format)"), + debug: bool = typer.Option(False, "-d", help="Enable debug messages"), + version: bool = typer.Option( # noqa : ARG001 + False, + "--version", + callback=_version, + is_eager=True, + help="Show version and exit", + ), +) -> None: + formatter = "[%(asctime)s] :: %(levelname)s - %(message)s" - level = logging.DEBUG if arguments["-d"] else logging.INFO + level = logging.DEBUG if debug else logging.INFO logging.basicConfig(level=level, format=formatter) - config = None - if arguments["-c"]: - config = read_yaml_config(arguments["-c"]) + if config_file: + config = read_yaml_config(config_file) else: config = read_yaml_config(Path(__file__).parent / "default_broker.yaml") logger.debug("Using default configuration") diff --git a/amqtt/scripts/pub_script.py b/amqtt/scripts/pub_script.py index afc36a8..f51f099 100644 --- a/amqtt/scripts/pub_script.py +++ b/amqtt/scripts/pub_script.py @@ -119,7 +119,7 @@ async def do_pub( def main() -> None: """Entry point for the amqtt publisher.""" - typer.run(publisher) + typer.run(publisher_main) def _version(v: bool) -> None: @@ -128,7 +128,7 @@ def _version(v: bool) -> None: raise typer.Exit(code=0) -def publisher( # pylint: disable=R0914,R0917 # noqa : PLR0913 +def publisher_main( # pylint: disable=R0914,R0917 # noqa : PLR0913 url: str = typer.Option( ..., "--url", help="Broker connection URL (must conform to MQTT URI scheme: mqtt://@HOST:port)" ), diff --git a/amqtt/scripts/sub_script.py b/amqtt/scripts/sub_script.py index d57e33b..0686526 100644 --- a/amqtt/scripts/sub_script.py +++ b/amqtt/scripts/sub_script.py @@ -91,7 +91,7 @@ async def do_sub(client: MQTTClient, def main() -> None: - typer.run(subscribe) + typer.run(subscribe_main) def _version(v:bool) -> None: @@ -100,7 +100,7 @@ def _version(v:bool) -> None: raise typer.Exit(code=0) -def subscribe( # pylint: disable=R0914,R0917 # noqa : PLR0913 +def subscribe_main( # pylint: disable=R0914,R0917 # noqa : PLR0913 url: str = typer.Option(..., help="Broker connection URL (must conform to MQTT URI scheme)", show_default=False), config_file: str | None = typer.Option(None, "-c", help="Broker configuration file (YAML format)"), client_id: str | None = typer.Option(None, "-i", help="Id to use as client ID"),