121 lines
4.4 KiB
Python
121 lines
4.4 KiB
Python
import click
|
|
from pathlib import Path
|
|
import logging
|
|
from logging.handlers import RotatingFileHandler
|
|
import sys
|
|
from iottb.models.iottb_config import IottbConfig
|
|
from iottb.definitions import DB_NAME, CFG_FILE_PATH
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@click.command()
|
|
@click.option('-d', '--dest', type=click.Path(), help='Location to put (new) iottb database')
|
|
@click.option('-n', '--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()
|
|
logger.debug(f'Known databases: {known_dbs}')
|
|
if name in known_dbs:
|
|
dest = config.get_database_location(name)
|
|
if Path(dest).joinpath(name).is_dir():
|
|
click.echo(f'A database {name} already exists.')
|
|
logger.debug(f'DB {name} exists in {dest}')
|
|
click.echo(f'Exiting...')
|
|
exit()
|
|
logger.debug(f'DB name {name} registered but does not exist.')
|
|
if not dest:
|
|
logger.info('No dest set, choosing default destination.')
|
|
dest = Path(config.default_db_location).parent
|
|
|
|
db_path = Path(dest).joinpath(name)
|
|
logger.debug(f'Full path for db {str(db_path)}')
|
|
# Create the directory if it doesn't exist
|
|
db_path.mkdir(parents=True, exist_ok=True)
|
|
logger.info(f"mkdir {db_path} successful")
|
|
click.echo(f'Created {db_path}')
|
|
|
|
# Update configuration
|
|
config.set_database_location(name, str(dest))
|
|
if update_default:
|
|
config.set_default_database(name, str(dest))
|
|
config.save_config()
|
|
logger.info(f"Updated configuration with database {name} at {db_path}")
|
|
|
|
|
|
# @click.group('config')
|
|
# @click.pass_context
|
|
# def cfg(ctx):
|
|
# pass
|
|
#
|
|
# @click.command('set', help='Set the location of a database.')
|
|
# @click.argument('database', help='Name of database')
|
|
# @click.argument('location', help='Where the database is located (i.e. its parent directory)')
|
|
# @click.pass_context
|
|
# def set(ctx, key, value):
|
|
# click.echo(f'Setting {key} to {value} in config')
|
|
# config = ctx.obj['CONFIG']
|
|
# logger.warning('No checks performed!')
|
|
# config.set_database_location(key, value)
|
|
# config.save_config()
|
|
|
|
|
|
|
|
|
|
|
|
@click.command()
|
|
@click.option('-d', '--dest', type=click.Path(), help='Location to put (new) iottb database')
|
|
@click.option('-n', '--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_inactive(ctx, dest, name, update_default):
|
|
logger.info('init-db invoked')
|
|
config = ctx.obj['CONFIG']
|
|
logger.debug(f'str(config)')
|
|
|
|
# Retrieve known databases
|
|
known_dbs = config.get_known_databases()
|
|
|
|
# Determine destination path
|
|
if name in known_dbs:
|
|
dest = Path(config.get_database_location(name))
|
|
if dest.joinpath(name).is_dir():
|
|
click.echo(f'A database {name} already exists.')
|
|
logger.debug(f'DB {name} exists in {dest}')
|
|
click.echo(f'Exiting...')
|
|
exit()
|
|
logger.debug(f'DB name {name} registered but does not exist.')
|
|
elif not dest:
|
|
logger.info('No destination set, using default path from config.')
|
|
dest = Path(config.default_db_location).parent
|
|
|
|
# Ensure destination path is absolute
|
|
dest = dest.resolve()
|
|
|
|
# Combine destination path with database name
|
|
db_path = dest / name
|
|
logger.debug(f'Full path for database: {str(db_path)}')
|
|
|
|
# Create the directory if it doesn't exist
|
|
try:
|
|
db_path.mkdir(parents=True, exist_ok=True)
|
|
logger.info(f'Directory {db_path} created successfully.')
|
|
click.echo(f'Created {db_path}')
|
|
except Exception as e:
|
|
logger.error(f'Failed to create directory {db_path}: {e}')
|
|
click.echo(f'Failed to create directory {db_path}: {e}', err=True)
|
|
exit(1)
|
|
|
|
# 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}')
|
|
click.echo(f'Updated configuration with database {name} at {db_path}')
|