import argparse import sys import verboselogs sys.path.append('src/') import config import constants import database import log_setup from log_setup import logger def subcommand_init(force: bool, no_fetch_variants: bool): tables = database.get_existing_tables() if len(tables) > 0 and not force: logger.info( 'Database tables "{}" exist already, aborting. To force re-initialization, use the --force options' .format(", ".join(tables)) ) return if len(tables) > 0: logger.info( "WARNING: This will drop all existing tables from the database and re-initialize them." ) response = input("Do you wish to continue? [y/N] ") if response not in ["y", "Y", "yes"]: logger.info("Database initialization aborted.") return database.init_database() logger.info("Successfully initialized database tables") if not no_fetch_variants: database.fetch_and_initialize_variants() database.initialize_variant_base_ratings() logger.info("Successfully initialized variants and base ratings.") def subcommand_generate_config(): config.create_db_config() config.create_config() def get_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser( prog=constants.APP_NAME, description="Data collection and analysis tool for the Hanabi League" ) parser.add_argument('--verbose', '-v', help='Enable verbose logging to console', action='store_true') subparsers = parser.add_subparsers(dest='command', required=True, help='select subcommand') init_parser = subparsers.add_parser('init', help='Initialize database.') init_parser.add_argument('--force', '-f', help='Force initialization (Drops existing tables)', action='store_true') init_parser.add_argument('--no-fetch-variants', '-n', help='Do not fetch and initialize variants', action='store_true') subparsers.add_parser('generate-config', help='Generate config file at default location') return parser def main(): parser = get_parser() args = parser.parse_args() subcommand_func = { 'init': subcommand_init, 'generate-config': subcommand_generate_config }[args.command] if args.verbose: log_setup.logger_manager.set_console_level(verboselogs.VERBOSE) del args.command del args.verbose subcommand_func(**vars(args)) if __name__ == "__main__": main()