All checks were successful
CI / frontend-tests (pull_request) Successful in 1m2s
CI / openapi-codegen-check (push) Successful in 2m13s
CI / openapi-codegen-check (pull_request) Successful in 1m45s
CI / backend-tests (push) Successful in 9m29s
CI / backend-tests (pull_request) Successful in 9m29s
CI / changes (push) Successful in 8s
CI / changes (pull_request) Successful in 8s
CI / frontend-tests (push) Successful in 1m7s
Финиш-волна по cross-file/partial остаткам аудита + a11y-харнесс. Полностью (4): #1569 alembic регистрирует все ORM-модели (+убран фантомный Parcel) · #1590 «Индекс дефицита» больше не лжёт на fallback-горизонте (report_pdf+report_md) · #1642 thumbs mtime-freshness (нет устаревшей миниатюры) · #801 /__preview/estimate mock-render для axe/lighthouse (env-gated bypass). Частично (остаток cross-file/домен, открыты): #1593 #1635 #1640. needs-leha (открыт): #1650 (нужна новая миграция вьюхи supply-слоёв). Verify: tsc --noEmit 0; py_compile OK. Closes #1569 Closes #1590 Closes #1642 Closes #801
61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
"""Alembic env. Loads DB URL from app settings, registers all SQLAlchemy
|
|
models so autogenerate can detect schema drift."""
|
|
|
|
from logging.config import fileConfig
|
|
|
|
from sqlalchemy import engine_from_config, pool
|
|
|
|
# Import the models package so every ORM model registers on Base.metadata.
|
|
# Add new model modules in app/models/__init__.py as they appear.
|
|
import app.models # noqa: F401
|
|
from alembic import context
|
|
from app.core.config import settings
|
|
from app.core.db import Base
|
|
|
|
config = context.config
|
|
|
|
# Inject runtime DB URL.
|
|
config.set_main_option("sqlalchemy.url", settings.database_url)
|
|
|
|
if config.config_file_name is not None:
|
|
fileConfig(config.config_file_name)
|
|
|
|
target_metadata = Base.metadata
|
|
|
|
|
|
def run_migrations_offline() -> None:
|
|
"""Generate SQL without a live DB connection."""
|
|
context.configure(
|
|
url=config.get_main_option("sqlalchemy.url"),
|
|
target_metadata=target_metadata,
|
|
literal_binds=True,
|
|
dialect_opts={"paramstyle": "named"},
|
|
compare_type=True,
|
|
compare_server_default=True,
|
|
)
|
|
with context.begin_transaction():
|
|
context.run_migrations()
|
|
|
|
|
|
def run_migrations_online() -> None:
|
|
"""Run migrations against a live DB."""
|
|
connectable = engine_from_config(
|
|
config.get_section(config.config_ini_section, {}),
|
|
prefix="sqlalchemy.",
|
|
poolclass=pool.NullPool,
|
|
)
|
|
with connectable.connect() as connection:
|
|
context.configure(
|
|
connection=connection,
|
|
target_metadata=target_metadata,
|
|
compare_type=True,
|
|
compare_server_default=True,
|
|
)
|
|
with context.begin_transaction():
|
|
context.run_migrations()
|
|
|
|
|
|
if context.is_offline_mode():
|
|
run_migrations_offline()
|
|
else:
|
|
run_migrations_online()
|