Skip to content

Commit 4b87ab4

Browse files
committed
set online alembic migrations
1 parent 3e41245 commit 4b87ab4

2 files changed

Lines changed: 35 additions & 4 deletions

File tree

api_v1/tests/conftest.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
from asgi_lifespan import LifespanManager
1010
from fastapi import FastAPI
1111
from sqlalchemy.pool import NullPool
12+
from alembic.config import Config
13+
from alembic import command
1214

1315
from config import test_connection, settings, BaseModel
1416
from config import db_connection
@@ -21,6 +23,12 @@
2123
)
2224

2325

26+
cfg = Config(settings.alembic.CONFIG_PATH.as_posix())
27+
cfg.set_main_option('script_location',
28+
settings.alembic.MIGRATION_PATH.as_posix(),
29+
)
30+
31+
2432
@pytest.fixture(scope='session', autouse=True)
2533
def event_loop(request):
2634
loop = asyncio.get_event_loop_policy().new_event_loop()
@@ -39,7 +47,7 @@ async def app() -> AsyncGenerator[LifespanManager, Any]:
3947
async def lifespan(app: FastAPI):
4048
async with db_setup.engine.begin() as conn:
4149
await conn.run_sync(BaseModel.metadata.create_all)
42-
sys.stdout.write('alembic upgrade head')
50+
await conn.run_sync(alembic_do_upgrade)
4351
yield
4452
await conn.run_sync(BaseModel.metadata.drop_all)
4553

@@ -63,3 +71,11 @@ async def client(app: FastAPI) -> AsyncGenerator[httpx.AsyncClient, Any]:
6371
base_url=current_home + current_api,
6472
) as client:
6573
yield client
74+
75+
76+
def alembic_do_upgrade(connection):
77+
"""
78+
Upgrade миграция алембик
79+
"""
80+
cfg.attributes['connection'] = connection
81+
command.upgrade(cfg, 'head')

async_alembic/env.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33

44
from sqlalchemy import pool
55
from sqlalchemy.engine import Connection
6-
from sqlalchemy.ext.asyncio import async_engine_from_config
6+
from sqlalchemy.ext.asyncio import async_engine_from_config, AsyncEngine
7+
from sqlalchemy import engine_from_config
78

89
from alembic import context
910

@@ -84,8 +85,22 @@ async def run_async_migrations() -> None:
8485

8586
def run_migrations_online() -> None:
8687
"""Run migrations in 'online' mode."""
87-
88-
asyncio.run(run_async_migrations())
88+
connectable = context.config.attributes.get('connection', None)
89+
if connectable is None:
90+
connectable = AsyncEngine(
91+
engine_from_config(
92+
context.config.get_section(
93+
context.config.config_ini_section,
94+
),
95+
prefix='sqlalchemy.',
96+
poolclass=pool.NullPool,
97+
future=True,
98+
)
99+
)
100+
if isinstance(connectable, AsyncEngine):
101+
asyncio.run(run_async_migrations(connectable))
102+
else:
103+
do_run_migrations(connectable)
89104

90105

91106
if context.is_offline_mode():

0 commit comments

Comments
 (0)