Files

71 lines
1.7 KiB
Python
Raw Permalink Normal View History

import asyncio
import os
from logging.config import fileConfig
from alembic import context
from sqlalchemy import pool
from sqlalchemy.ext.asyncio import async_engine_from_config
from haunt_fm.models.base import Base
# Import all models so they register with Base.metadata
from haunt_fm.models.track import ( # noqa: F401
FeedbackEvent,
ListenEvent,
Playlist,
PlaylistTrack,
SimilarityLink,
TasteProfile,
Track,
TrackEmbedding,
)
config = context.config
if config.config_file_name is not None:
fileConfig(config.config_file_name)
target_metadata = Base.metadata
# Override sqlalchemy.url from environment
db_url = os.environ.get("HAUNTFM_DATABASE_URL", "")
if db_url:
config.set_main_option("sqlalchemy.url", db_url)
def run_migrations_offline() -> None:
url = config.get_main_option("sqlalchemy.url")
context.configure(url=url, target_metadata=target_metadata, literal_binds=True)
with context.begin_transaction():
context.run_migrations()
def do_run_migrations(connection):
context.configure(connection=connection, target_metadata=target_metadata)
with context.begin_transaction():
context.run_migrations()
async def run_async_migrations() -> None:
connectable = async_engine_from_config(
config.get_section(config.config_ini_section, {}),
prefix="sqlalchemy.",
poolclass=pool.NullPool,
)
async with connectable.connect() as connection:
await connection.run_sync(do_run_migrations)
await connectable.dispose()
def run_migrations_online() -> None:
asyncio.run(run_async_migrations())
if context.is_offline_mode():
run_migrations_offline()
else:
run_migrations_online()