feat: wire native leaudit upload flow

This commit is contained in:
wren
2026-04-28 16:53:16 +08:00
parent c776af598a
commit e738398eb6
26 changed files with 7364 additions and 5778 deletions
@@ -4,18 +4,36 @@ from __future__ import annotations
from contextlib import asynccontextmanager
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.pool import NullPool
from fastapi_admin.config import ASYNCPG_DATABASE_URL
_engine = create_async_engine(ASYNCPG_DATABASE_URL, echo=False, pool_size=20, max_overflow=10)
_engine: AsyncEngine | None = None
_AsyncSessionFactory: async_sessionmaker[AsyncSession] | None = None
_AsyncSessionFactory = async_sessionmaker(_engine, class_=AsyncSession, expire_on_commit=False)
def _get_session_factory() -> async_sessionmaker[AsyncSession]:
"""按需创建 session factory,避免 reload/多事件循环复用旧连接池。"""
global _engine, _AsyncSessionFactory
if _AsyncSessionFactory is None:
_engine = create_async_engine(
ASYNCPG_DATABASE_URL,
echo=False,
poolclass=NullPool,
)
_AsyncSessionFactory = async_sessionmaker(
_engine,
class_=AsyncSession,
expire_on_commit=False,
)
return _AsyncSessionFactory
@asynccontextmanager
async def GetAsyncSession():
"""获取异步数据库 session(上下文管理器)。"""
async with _AsyncSessionFactory() as session:
SessionFactory = _get_session_factory()
async with SessionFactory() as session:
yield session
await session.commit()