hanabi-league/main.py

80 lines
2.3 KiB
Python

import argparse
import datetime
import verboselogs
import config
import constants
import database
import log_setup
from log_setup import logger
def subcommand_init(force: bool, 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 fetch_variants:
database.fetch_and_initialize_variants()
database.initialize_variant_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('--fetch-variants', '-v', help='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()