From 7037318813111bcf782057f148f5948fddccee32 Mon Sep 17 00:00:00 2001 From: Daniel McKnight <34697904+NeonDaniel@users.noreply.github.com> Date: Wed, 24 May 2023 11:33:22 -0700 Subject: [PATCH] Add CLI Entrypoint to match other core modules (#50) Implement CLI entrypoint to handle config dir init and remove init from `__main__` Update dependencies to stable versions --- neon_messagebus/cli.py | 54 +++++++++++++++++++++++++++++ neon_messagebus/service/__main__.py | 4 +-- requirements/requirements.txt | 2 +- setup.py | 4 ++- 4 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 neon_messagebus/cli.py diff --git a/neon_messagebus/cli.py b/neon_messagebus/cli.py new file mode 100644 index 0000000..b07d91b --- /dev/null +++ b/neon_messagebus/cli.py @@ -0,0 +1,54 @@ +# NEON AI (TM) SOFTWARE, Software Development Kit & Application Framework +# All trademark and other rights reserved by their respective owners +# Copyright 2008-2022 Neongecko.com Inc. +# Contributors: Daniel McKnight, Guy Daniels, Elon Gasper, Richard Leeds, +# Regina Bloomstine, Casimiro Ferreira, Andrii Pernatii, Kirill Hrymailo +# BSD-3 License +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from this +# software without specific prior written permission. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import click + +from click_default_group import DefaultGroup +from neon_utils.packaging_utils import get_package_version_spec +from neon_utils.configuration_utils import init_config_dir + + +@click.group("neon-messagebus", cls=DefaultGroup, + no_args_is_help=True, invoke_without_command=True, + help="Neon Messagebus Commands\n\n" + "See also: neon COMMAND --help") +@click.option("--version", "-v", is_flag=True, required=False, + help="Print the current version") +def neon_messagebus_cli(version: bool = False): + if version: + click.echo(f"neon_messagebus version " + f"{get_package_version_spec('neon_messagebus')}") + + +@neon_messagebus_cli.command(help="Start Neon Messagebus module") +def run(): + init_config_dir() + from neon_messagebus.service.__main__ import main + click.echo("Starting Messagebus Service") + main() + click.echo("Messagebus Service Shutdown") diff --git a/neon_messagebus/service/__main__.py b/neon_messagebus/service/__main__.py index 9bfb226..45dbc84 100644 --- a/neon_messagebus/service/__main__.py +++ b/neon_messagebus/service/__main__.py @@ -29,10 +29,10 @@ from ovos_utils import wait_for_exit_signal from ovos_utils.log import LOG from ovos_utils.process_utils import reset_sigint_handler, PIDLock as Lock -from neon_utils.configuration_utils import init_config_dir from neon_utils.log_utils import init_log from neon_utils.process_utils import start_malloc, snapshot_malloc, print_malloc from ovos_bus_client.client import MessageBusClient +from ovos_config.config import Configuration from neon_messagebus.service import NeonBusService from neon_messagebus.util.signal_utils import SignalManager from neon_messagebus.util.mq_connector import start_mq_connector @@ -40,12 +40,10 @@ def main(**kwargs): - init_config_dir() init_log(log_name="bus") reset_sigint_handler() # Create PID file, prevent multiple instances of this service lock = Lock("bus") - from ovos_config.config import Configuration config = Configuration() debug = Configuration().get('debug', False) malloc_running = start_malloc(config, stack_depth=4) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 8a7fa2b..76bac2d 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,6 +1,6 @@ neon-utils~=1.1 neon-messagebus-mq-connector~=0.3,>=0.3.3 -ovos-messagebus~=0.0.2,>=0.0.3a1 +ovos-messagebus~=0.0.3 ovos_utils~=0.0.32 ovos-config~=0.0.8 ovos-bus-client~=0.0.3 diff --git a/setup.py b/setup.py index 3bb8bad..bada006 100644 --- a/setup.py +++ b/setup.py @@ -75,7 +75,9 @@ def get_requirements(requirements_filename: str): long_description_content_type="text/markdown", entry_points={ 'console_scripts': [ - 'neon_messagebus_service=neon_messagebus.service.__main__:main' + 'neon_messagebus_service=neon_messagebus.service.__main__:main', + 'neon-messagebus=neon_messagebus.cli:neon_messagebus_cli' + ] } )