import click from pathlib import Path import logging from logging.handlers import RotatingFileHandler import sys from iottb.contexts import IottbConfig from iottb.definitions import DB_NAME logger = logging.getLogger(__name__) @click.command() @click.option('-d', '--dest', type=Path, help='Location to put (new) iottb database') @click.option('--name', default=DB_NAME, type=str, help='Name of new database.') @click.option('--update-default/--no-update-default', default=True, help='If new db should be set as the new default') @click.pass_context def init_db(ctx, dest, name, update_default): logger.info('init-db invoked') config = ctx.obj['CONFIG'] logger.debug(f'str(config)') # Use the default path from config if dest is not provided known_dbs = config.get_known_databases() if name in known_dbs: click.echo(f'A database {name} already exists.') logger.info(f'Exiting...') exit() if not dest: logger.info('No dest set, choosing default destination.') dest = Path(config.default_path).parent db_path = dest / name logger.debug(f'Full path for db {db_path}') # Create the directory if it doesn't exist db_path.mkdir(parents=True, exist_ok=True) logger.info(f"Created directory {db_path.parent} for the database") # Update configuration config.set_database_location(name, str(db_path)) if update_default: config.set_default_database(name, str(db_path)) config.save_config() logger.info(f"Updated configuration with database {name} at {db_path}")