From 87dd548a4266a92f67ae945c2c7568277f69daac Mon Sep 17 00:00:00 2001 From: Sebastian Lenzlinger Date: Fri, 28 Jun 2024 18:17:06 +0200 Subject: [PATCH] Move developer commands into their own module --- iottb/commands/developer.py | 78 +++++++++++++++++++++++++++++++++++++ iottb/main.py | 75 +---------------------------------- 2 files changed, 80 insertions(+), 73 deletions(-) create mode 100644 iottb/commands/developer.py diff --git a/iottb/commands/developer.py b/iottb/commands/developer.py new file mode 100644 index 0000000..a8b9163 --- /dev/null +++ b/iottb/commands/developer.py @@ -0,0 +1,78 @@ +from pathlib import Path + +import click + +from iottb.main import DB_NAME, logger, CFG_FILE_PATH +from iottb.models.iottb_config import IottbConfig + + +@click.command() +@click.option('--file', default=DB_NAME) +@click.option('--table', type=str, default='DefaultDatabase') +@click.option('--key') +@click.option('--value') +@click.pass_context +def set_key_in_table_to(ctx, file, table, key, value): + """Edit config or metadata files. TODO: Implement""" + click.echo(f'set_key_in_table_to invoked') + logger.warning("Unimplemented subcommand invoked.") + + +@click.command() +@click.confirmation_option(prompt="Are you certain that you want to delete the cfg file?") +def rm_cfg(): + """ Removes the cfg file from the filesystem. + + This is mostly a utility during development. Once non-standard database locations are implemented, + deleting this would lead to iottb not being able to find them anymore. + """ + Path(CFG_FILE_PATH).unlink() + click.echo(f'Iottb configuration removed at {CFG_FILE_PATH}') + + +@click.command() +@click.confirmation_option(prompt="Are you certain that you want to delete the databases file?") +def rm_dbs(dbs): + """ Removes ALL(!) databases from the filesystem if they're empty. + + Development utility currently unfit for use. + """ + config = IottbConfig() + paths = config.get_know_database_paths() + logger.debug(f'Known db paths: {str(paths)}') + for dbs in paths: + try: + Path(dbs).rmdir() + click.echo(f'{dbs} deleted') + except Exception as e: + logger.debug(f'Failed unlinking db {dbs} with error {e}') + logger.info(f'All databases deleted') + + +@click.command('show-cfg', help='Show the current configuration context') +@click.option('--cfg-file', type=click.Path(), default=CFG_FILE_PATH, help='Path to the config file') +@click.option('-pp', is_flag=True, default=False, help='Pretty Print') +@click.pass_context +def show_cfg(ctx, cfg_file, pp): + logger.debug(f'Pretty print option set to {pp}') + if pp: + try: + config = IottbConfig(Path(cfg_file)) + click.echo("Configuration Context:") + click.echo(f"Default Database: {config.default_database}") + click.echo(f"Default Database Path: {config.default_db_location}") + click.echo("Database Locations:") + for db_name, db_path in config.db_path_dict.items(): + click.echo(f" - {db_name}: {db_path}") + except Exception as e: + logger.error(f"Error loading configuration: {e}") + click.echo(f"Failed to load configuration from {cfg_file}") + else: + path = Path(cfg_file) + + if path.is_file(): + with path.open('r') as file: + content = file.read() + click.echo(content) + else: + click.echo(f"Configuration file not found at {cfg_file}") diff --git a/iottb/main.py b/iottb/main.py index a877752..9b28924 100644 --- a/iottb/main.py +++ b/iottb/main.py @@ -1,8 +1,8 @@ -import json import click from pathlib import Path import logging +from iottb.commands.developer import set_key_in_table_to, rm_cfg, rm_dbs, show_cfg ################################################## # Import package modules ################################################# @@ -44,78 +44,6 @@ def cli(ctx, verbosity, debug, cfg_file): # ctx.meta['FULL_PATH_CONFIG_FILE'] = -@click.command() -@click.option('--file', default=DB_NAME) -@click.option('--table', type=str, default='DefaultDatabase') -@click.option('--key') -@click.option('--value') -@click.pass_context -def set_key_in_table_to(ctx, file, table, key, value): - """Edit config or metadata files. TODO: Implement""" - click.echo(f'set_key_in_table_to invoked') - logger.warning("Unimplemented subcommand invoked.") - - -@click.command() -@click.confirmation_option(prompt="Are you certain that you want to delete the cfg file?") -def rm_cfg(): - """ Removes the cfg file from the filesystem. - - This is mostly a utility during development. Once non-standard database locations are implemented, - deleting this would lead to iottb not being able to find them anymore. - """ - Path(CFG_FILE_PATH).unlink() - click.echo(f'Iottb configuration removed at {CFG_FILE_PATH}') - - -@click.command() -@click.confirmation_option(prompt="Are you certain that you want to delete the databases file?") -def rm_dbs(dbs): - """ Removes ALL(!) databases from the filesystem if they're empty. - - Development utility currently unfit for use. - """ - config = IottbConfig() - paths = config.get_know_database_paths() - logger.debug(f'Known db paths: {str(paths)}') - for dbs in paths: - try: - Path(dbs).rmdir() - click.echo(f'{dbs} deleted') - except Exception as e: - logger.debug(f'Failed unlinking db {dbs} with error {e}') - logger.info(f'All databases deleted') - - -@click.command('show-cfg', help='Show the current configuration context') -@click.option('--cfg-file', type=click.Path(), default=CFG_FILE_PATH, help='Path to the config file') -@click.option('-pp', is_flag=True, default=False, help='Pretty Print') -@click.pass_context -def show_cfg(ctx, cfg_file, pp): - logger.debug(f'Pretty print option set to {pp}') - if pp: - try: - config = IottbConfig(Path(cfg_file)) - click.echo("Configuration Context:") - click.echo(f"Default Database: {config.default_database}") - click.echo(f"Default Database Path: {config.default_db_location}") - click.echo("Database Locations:") - for db_name, db_path in config.db_path_dict.items(): - click.echo(f" - {db_name}: {db_path}") - except Exception as e: - logger.error(f"Error loading configuration: {e}") - click.echo(f"Failed to load configuration from {cfg_file}") - else: - path = Path(cfg_file) - - if path.is_file(): - with path.open('r') as file: - content = file.read() - click.echo(content) - else: - click.echo(f"Configuration file not found at {cfg_file}") - - ################################################################################## # Add all subcommands to group here ################################################################################# @@ -127,5 +55,6 @@ cli.add_command(rm_dbs) # noinspection PyTypeChecker cli.add_command(add_device) cli.add_command(show_cfg) + if __name__ == '__main__': cli(auto_envvar_prefix='IOTTB', show_default=True, show_envvars=True)