| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | 
							- import logging
 - 
 - import gevent
 - from sqlalchemy import event
 - from sqlalchemy.pool import Pool
 - 
 - from dify_app import DifyApp
 - from models import db
 - 
 - logger = logging.getLogger(__name__)
 - 
 - # Global flag to avoid duplicate registration of event listener
 - _GEVENT_COMPATIBILITY_SETUP: bool = False
 - 
 - 
 - def _safe_rollback(connection) -> None:
 -     """Safely rollback database connection.
 - 
 -     Args:
 -         connection: Database connection object
 -     """
 -     try:
 -         connection.rollback()
 -     except Exception:  # pylint: disable=broad-exception-caught
 -         logger.exception("Failed to rollback connection")
 - 
 - 
 - def _setup_gevent_compatibility() -> None:
 -     global _GEVENT_COMPATIBILITY_SETUP  # pylint: disable=global-statement
 - 
 -     # Avoid duplicate registration
 -     if _GEVENT_COMPATIBILITY_SETUP:
 -         return
 - 
 -     @event.listens_for(Pool, "reset")
 -     def _safe_reset(dbapi_connection, connection_record, reset_state) -> None:  # pylint: disable=unused-argument
 -         if reset_state.terminate_only:
 -             return
 - 
 -         # Safe rollback for connection
 -         try:
 -             hub = gevent.get_hub()
 -             if hasattr(hub, "loop") and getattr(hub.loop, "in_callback", False):
 -                 gevent.spawn_later(0, lambda: _safe_rollback(dbapi_connection))
 -             else:
 -                 _safe_rollback(dbapi_connection)
 -         except (AttributeError, ImportError):
 -             _safe_rollback(dbapi_connection)
 - 
 -     _GEVENT_COMPATIBILITY_SETUP = True
 - 
 - 
 - def init_app(app: DifyApp):
 -     db.init_app(app)
 -     _setup_gevent_compatibility()
 
 
  |