76 lines
1.8 KiB
Python
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
|