from typing import Optional import typer from rich.console import Console from rich.table import Table from birthday_pool_bot.settings import Settings from .migrator import Migrator def callback(ctx: typer.Context): ctx.obj = ctx.obj or {} settings: Settings = ctx.obj["settings"] ctx.obj["migrator"] = Migrator(settings=settings.repository) def show_migrations_list(ctx: typer.Context): migrator: Migrator = ctx.obj["migrator"] table = Table("ID") for migration_id in migrator.get_migrations(): table.add_row(migration_id) Console().print(table) def apply_migrations(ctx: typer.Context): migrator: Migrator = ctx.obj["migrator"] migrator.migrate() def rollback_migrations( ctx: typer.Context, revision: Optional[str] = typer.Argument( None, help="Revision id or relative revision (`-1`, `-2`)", ), ): migrator: Migrator = ctx.obj["migrator"] migrator.rollback(migration_id=revision) def squash_migrations(ctx: typer.Context): migrator: Migrator = ctx.obj["migrator"] migrator.squash_migrations(new_message="init") def create_migration( ctx: typer.Context, message: Optional[str] = typer.Option( None, "-m", "--message", help="Migration short message", ), ): migrator: Migrator = ctx.obj["migrator"] migrator.create_migration(message=message) def get_cli() -> typer.Typer: cli = typer.Typer(name="Migration") cli.callback()(callback) cli.command(name="apply")(apply_migrations) cli.command(name="rollback")(rollback_migrations) cli.command(name="create")(create_migration) cli.command(name="squash")(squash_migrations) cli.command(name="list")(show_migrations_list) return cli