from meshview import models from sqlalchemy.ext.asyncio import async_sessionmaker from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession engine = None async_session = None def init_database(database_connection_string, read_only=False): global engine, async_session kwargs = {"echo": False} if database_connection_string.startswith("sqlite"): if read_only: # Ensure SQLite is opened in read-only mode database_connection_string += "?mode=ro" kwargs["connect_args"] = {"uri": True} else: kwargs["connect_args"] = {"timeout": 60} else: kwargs["pool_size"] = 20 kwargs["max_overflow"] = 50 engine = create_async_engine(database_connection_string, **kwargs) async_session = async_sessionmaker( bind=engine, class_=AsyncSession, expire_on_commit=False, ) async def create_tables(): async with engine.begin() as conn: await conn.run_sync(models.Base.metadata.create_all)