|
12 | 12 | from fastapi.responses import RedirectResponse |
13 | 13 | from mcp.server.mcpserver import MCPServer |
14 | 14 | from sqlalchemy import JSON, ForeignKey, Text, UniqueConstraint |
| 15 | +from sqlalchemy.engine import URL |
| 16 | +from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine |
15 | 17 | from sqlalchemy.orm import Mapped, mapped_column, relationship |
16 | 18 |
|
17 | 19 | from belgie import Belgie, BelgieClient, BelgieSettings, CookieSettings, SessionSettings, URLSettings |
18 | | -from belgie.alchemy import BelgieAdapter, SqliteSettings |
| 20 | +from belgie.alchemy import BelgieAdapter |
19 | 21 | from belgie.mcp import Mcp, get_user_from_access_token |
20 | 22 | from belgie.oauth.server import OAuthResource, OAuthServer |
21 | 23 |
|
22 | 24 | if TYPE_CHECKING: |
23 | | - from collections.abc import AsyncIterator |
| 25 | + from collections.abc import AsyncGenerator, AsyncIterator |
24 | 26 |
|
25 | 27 |
|
26 | 28 | class User(DataclassBase, PrimaryKeyMixin, TimestampMixin): |
@@ -120,18 +122,27 @@ class OAuthState(DataclassBase, PrimaryKeyMixin, TimestampMixin): |
120 | 122 | DB_PATH = "./belgie_mcp_example.db" |
121 | 123 |
|
122 | 124 |
|
123 | | -db_settings = SqliteSettings(database=DB_PATH, echo=True) |
| 125 | +engine = create_async_engine( |
| 126 | + URL.create("sqlite+aiosqlite", database=DB_PATH), |
| 127 | + echo=True, |
| 128 | +) |
| 129 | +session_maker = async_sessionmaker(engine, class_=AsyncSession, expire_on_commit=False) |
| 130 | + |
| 131 | + |
| 132 | +async def get_db() -> AsyncGenerator[AsyncSession, None]: |
| 133 | + async with session_maker() as session: |
| 134 | + yield session |
124 | 135 |
|
125 | 136 |
|
126 | 137 | @asynccontextmanager |
127 | 138 | async def lifespan(_app: FastAPI) -> AsyncIterator[None]: |
128 | | - async with db_settings.engine.begin() as conn: |
| 139 | + async with engine.begin() as conn: |
129 | 140 | await conn.run_sync(DataclassBase.metadata.create_all) |
130 | 141 |
|
131 | 142 | async with mcp_server.session_manager.run(): |
132 | 143 | yield |
133 | 144 |
|
134 | | - await db_settings.engine.dispose() |
| 145 | + await engine.dispose() |
135 | 146 |
|
136 | 147 |
|
137 | 148 | app = FastAPI(title="Belgie MCP OAuth Example", lifespan=lifespan) |
@@ -164,7 +175,7 @@ async def lifespan(_app: FastAPI) -> AsyncIterator[None]: |
164 | 175 | belgie = Belgie( |
165 | 176 | settings=settings, |
166 | 177 | adapter=adapter, |
167 | | - database=db_settings, |
| 178 | + database=get_db, |
168 | 179 | ) |
169 | 180 |
|
170 | 181 | oauth_settings = OAuthServer( |
|
0 commit comments