env.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import asyncio
  2. from alembic import context
  3. from zhifu.core.config import Settings
  4. from zhifu.core.database import Base, create_engine
  5. from zhifu.modules.after_sales import models # noqa: F401
  6. from zhifu.modules.agent_runtime import models as agent_models # noqa: F401
  7. from zhifu.modules.billing import models as billing_models # noqa: F401
  8. from zhifu.modules.channels import models as channel_models # noqa: F401
  9. from zhifu.modules.conversations import models as conversation_models # noqa: F401
  10. from zhifu.modules.identity import access_models # noqa: F401
  11. from zhifu.modules.identity.models import Store, Tenant # noqa: F401
  12. from zhifu.modules.integrations import models as integration_models # noqa: F401
  13. from zhifu.modules.knowledge import models as knowledge_models # noqa: F401
  14. from zhifu.modules.memory import models as memory_models # noqa: F401
  15. from zhifu.modules.merchant import models as merchant_models # noqa: F401
  16. from zhifu.modules.notifications import models as notification_models # noqa: F401
  17. from zhifu.modules.platform import models as platform_models # noqa: F401
  18. from zhifu.modules.storefront import models as storefront_models # noqa: F401
  19. target_metadata = Base.metadata
  20. def run_migrations(connection):
  21. context.configure(connection=connection, target_metadata=target_metadata, compare_type=True)
  22. with context.begin_transaction():
  23. context.run_migrations()
  24. async def run_online():
  25. engine = create_engine(Settings())
  26. try:
  27. async with engine.connect() as connection:
  28. await connection.run_sync(run_migrations)
  29. finally:
  30. await engine.dispose()
  31. if context.is_offline_mode():
  32. context.configure(
  33. url=Settings().database_url.get_secret_value(),
  34. target_metadata=target_metadata,
  35. literal_binds=True,
  36. dialect_opts={"paramstyle": "named"},
  37. )
  38. with context.begin_transaction():
  39. context.run_migrations()
  40. else:
  41. asyncio.run(run_online())