from alembic import context
from flask import current_app

config = context.config
target_db = current_app.extensions["migrate"].db
target_metadata = target_db.metadata
configure_args = dict(current_app.extensions["migrate"].configure_args)


def run_migrations_offline():
    offline_args = dict(configure_args)
    offline_args.update(url=target_db.engine.url, target_metadata=target_metadata, literal_binds=True)
    context.configure(**offline_args)
    with context.begin_transaction():
        context.run_migrations()


def run_migrations_online():
    with target_db.engine.connect() as connection:
        online_args = dict(configure_args)
        online_args.update(connection=connection, target_metadata=target_metadata)
        context.configure(**online_args)
        with context.begin_transaction():
            context.run_migrations()


if context.is_offline_mode():
    run_migrations_offline()
else:
    run_migrations_online()
