diff options
| -rw-r--r-- | alembic/env.py | 5 | ||||
| -rw-r--r-- | tests/test_migrations.py | 13 |
2 files changed, 18 insertions, 0 deletions
diff --git a/alembic/env.py b/alembic/env.py index 6fcbeb0..90f262b 100644 --- a/alembic/env.py +++ b/alembic/env.py @@ -1,6 +1,7 @@ from __future__ import annotations from logging.config import fileConfig +import os from alembic import context from sqlalchemy import engine_from_config, pool @@ -18,6 +19,10 @@ target_metadata = Base.metadata def get_database_url() -> str: + env_database_url = os.getenv("DATABASE_URL") + if env_database_url: + return env_database_url + configured_url = config.get_main_option("sqlalchemy.url") if configured_url: return configured_url diff --git a/tests/test_migrations.py b/tests/test_migrations.py index de9cb25..d572af2 100644 --- a/tests/test_migrations.py +++ b/tests/test_migrations.py @@ -115,3 +115,16 @@ def test_alembic_upgrade_adopts_legacy_schema(tmp_path) -> None: assert columns["actor"]["nullable"] is False assert "uq_tracked_repository_service_actor_name" in unique_constraints assert actor == Settings().default_actor + + +def test_alembic_prefers_database_url_from_environment(tmp_path, monkeypatch) -> None: + database_path = tmp_path / "env-selected.db" + database_url = f"sqlite:///{database_path}" + config = Config(str(Path(__file__).resolve().parent.parent / "alembic.ini")) + config.set_main_option("script_location", str(Path(__file__).resolve().parent.parent / "alembic")) + monkeypatch.setenv("DATABASE_URL", database_url) + + command.upgrade(config, "head") + + inspector = inspect(create_engine(database_url)) + assert "actor_aliases" in inspector.get_table_names() |
