env.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import os
  2. import sys
  3. from logging.config import fileConfig
  4. from sqlalchemy import engine_from_config, pool
  5. from alembic import context
  6. from dotenv import load_dotenv
  7. load_dotenv()
  8. sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
  9. from flowsint_core.core.models import * # noqa
  10. config = context.config
  11. if config.config_file_name is not None:
  12. fileConfig(config.config_file_name)
  13. database_url = os.getenv("DATABASE_URL")
  14. if not database_url:
  15. raise RuntimeError("DATABASE_URL is not defined in .env")
  16. config.set_main_option("sqlalchemy.url", database_url)
  17. target_metadata = Base.metadata
  18. def run_migrations_offline() -> None:
  19. """Run migrations in 'offline' mode."""
  20. url = config.get_main_option("sqlalchemy.url")
  21. context.configure(
  22. url=url,
  23. target_metadata=target_metadata,
  24. literal_binds=True,
  25. dialect_opts={"paramstyle": "named"},
  26. )
  27. with context.begin_transaction():
  28. context.run_migrations()
  29. def run_migrations_online() -> None:
  30. """Run migrations in 'online' mode."""
  31. connectable = engine_from_config(
  32. config.get_section(config.config_ini_section),
  33. prefix="sqlalchemy.",
  34. poolclass=pool.NullPool,
  35. )
  36. with connectable.connect() as connection:
  37. context.configure(connection=connection, target_metadata=target_metadata)
  38. with context.begin_transaction():
  39. context.run_migrations()
  40. if context.is_offline_mode():
  41. run_migrations_offline()
  42. else:
  43. run_migrations_online()