Files
bracket/backend/cli.py
2022-12-11 17:55:11 +01:00

57 lines
1.5 KiB
Python

import asyncio
import functools
from typing import Any
import click
from ladderz.database import database, engine
from ladderz.logger import get_logger
from ladderz.schema import metadata, players, tournaments, users
from ladderz.utils.dummy_records import DUMMY_PLAYER, DUMMY_TOURNAMENT, DUMMY_USER
logger = get_logger('cli')
def run_async(f: Any) -> Any:
@functools.wraps(f)
def wrapper(*args: Any, **kwargs: Any) -> Any:
loop = asyncio.new_event_loop()
async def inner() -> None:
try:
await database.connect()
await f(*args, **kwargs)
except KeyboardInterrupt:
logger.debug('Closing the process.')
except Exception as e:
logger.error(e, exc_info=True)
raise e
finally:
await database.disconnect()
return loop.run_until_complete(inner())
return wrapper
@click.group()
def cli() -> None:
pass
@click.command()
@run_async
async def create_dev_db() -> None:
logger.warning('Initializing database with dummy records')
await database.connect()
metadata.create_all(engine)
await database.execute(query=users.insert(), values=DUMMY_USER.dict())
await database.execute(query=tournaments.insert(), values=DUMMY_TOURNAMENT.dict())
await database.execute(query=players.insert(), values=DUMMY_PLAYER.dict())
if __name__ == "__main__":
cli.add_command(create_dev_db)
cli()