Files
Birthday-Pool-Bot/birthday_pool_bot/repositories/migrations/cli.py

76 lines
1.8 KiB
Python

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