diff options
Diffstat (limited to '')
| -rw-r--r-- | migrations/__init__.py | 0 | ||||
| -rw-r--r-- | migrations/env.py | 86 | ||||
| -rw-r--r-- | migrations/script.py.mako | 27 | ||||
| -rw-r--r-- | migrations/versions/__init__.py | 0 | 
4 files changed, 113 insertions, 0 deletions
diff --git a/migrations/__init__.py b/migrations/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/migrations/__init__.py diff --git a/migrations/env.py b/migrations/env.py new file mode 100644 index 0000000..36ddea1 --- /dev/null +++ b/migrations/env.py @@ -0,0 +1,86 @@ +import asyncio +from logging.config import fileConfig + +from alembic import context +from sqlalchemy import engine_from_config, pool +from sqlalchemy.ext.asyncio import AsyncEngine +from sqlalchemy.ext.asyncio.engine import AsyncConnection + +# This is a required step by Alembic to properly generate migrations +import backend.models.orm +from backend.constants import PSQL_DATABASE_URL + +target_metadata = backend.models.orm.base.Base.metadata + +# this is the Alembic Config object, which provides +# access to the values within the .ini file in use. +config = context.config + +# Interpret the config file for Python logging. +# This line sets up loggers basically. +fileConfig(config.config_file_name) +config.set_main_option("sqlalchemy.url", PSQL_DATABASE_URL) + + +def run_migrations_offline() -> None: +    """ +    Run migrations in 'offline' mode. + +    This configures the context with just a URL +    and not an Engine, though an Engine is acceptable +    here as well.  By skipping the Engine creation +    we don't even need a DBAPI to be available. + +    Calls to context.execute() here emit the given string to the +    script output. + +    """ +    url = config.get_main_option("sqlalchemy.url") +    context.configure( +        url=url, +        target_metadata=target_metadata, +        literal_binds=True, +        dialect_opts={"paramstyle": "named"}, +    ) + +    with context.begin_transaction(): +        context.run_migrations() + + +def do_run_migrations(connection: AsyncConnection) -> None: +    """Run all migrations on the given connection.""" +    context.configure( +        connection=connection, +        target_metadata=target_metadata, +        compare_type=True, +        compare_server_default=True, +    ) + +    with context.begin_transaction(): +        context.run_migrations() + + +async def run_migrations_online() -> None: +    """ +    Run migrations in 'online' mode. + +    In this scenario we need to create an Engine +    and associate a connection with the context. +    """ +    connectable = AsyncEngine( +        engine_from_config( +            config.get_section(config.config_ini_section), +            prefix="sqlalchemy.", +            poolclass=pool.NullPool, +            future=True, +        ), +    ) + +    async with connectable.connect() as connection: +        await connection.run_sync(do_run_migrations) + + +if context.is_offline_mode(): +    run_migrations_offline() +else: +    asyncio.run(run_migrations_online()) diff --git a/migrations/script.py.mako b/migrations/script.py.mako new file mode 100644 index 0000000..1d3e1aa --- /dev/null +++ b/migrations/script.py.mako @@ -0,0 +1,27 @@ +""" +${message} + +Revision ID: ${up_revision} +Revises: ${down_revision | comma,n} +Create Date: ${create_date} +""" +import sqlalchemy as sa +from alembic import op + +${imports if imports else ""} + +# revision identifiers, used by Alembic. +revision = ${repr(up_revision)} +down_revision = ${repr(down_revision)} +branch_labels = ${repr(branch_labels)} +depends_on = ${repr(depends_on)} + + +def upgrade() -> None: +    """Apply this migration.""" +    ${upgrades if upgrades else "pass"} + + +def downgrade() -> None: +    """Revert this migration.""" +    ${downgrades if downgrades else "pass"} diff --git a/migrations/versions/__init__.py b/migrations/versions/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/migrations/versions/__init__.py  |