mirror of
https://codeberg.org/diginaut/digimarks.git
synced 2026-02-04 07:00:26 +01:00
Better declaration of the httpx client
This commit is contained in:
@@ -4,7 +4,7 @@ import logging
|
||||
from collections.abc import Sequence
|
||||
from contextlib import asynccontextmanager
|
||||
from datetime import UTC, datetime
|
||||
from typing import Annotated
|
||||
from typing import Annotated, AsyncGenerator, cast
|
||||
|
||||
import httpx
|
||||
from fastapi import Depends, FastAPI, HTTPException, Query, Request
|
||||
@@ -54,22 +54,32 @@ engine = create_async_engine(f'sqlite+aiosqlite:///{settings.database_file}', co
|
||||
|
||||
async def get_session() -> AsyncSession:
|
||||
"""SQLAlchemy session factory."""
|
||||
async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
|
||||
async_session = sessionmaker(bind=engine, class_=AsyncSession, expire_on_commit=False)
|
||||
async with async_session() as session:
|
||||
yield session
|
||||
|
||||
|
||||
# Shorter way of getting the DB session in an endpoint
|
||||
SessionDep = Annotated[AsyncSession, Depends(get_session)]
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(the_app: FastAPI):
|
||||
async def lifespan(the_app: FastAPI) -> AsyncGenerator[None, None]:
|
||||
"""Upon start, initialise an AsyncClient and assign it to an attribute named requests_client on the app object."""
|
||||
the_app.requests_client = httpx.AsyncClient()
|
||||
yield
|
||||
await the_app.requests_client.aclose()
|
||||
async with httpx.AsyncClient() as requests_client:
|
||||
the_app.state.requests_client = requests_client
|
||||
yield
|
||||
await the_app.state.requests_client.aclose()
|
||||
|
||||
|
||||
async def get_requests_client(request: Request) -> httpx.AsyncClient:
|
||||
"""Get the httpx client from the application object."""
|
||||
return cast(httpx.AsyncClient, request.app.state.requests_client)
|
||||
|
||||
|
||||
# Shorter way of getting the httpx client in an endpoint
|
||||
RequestsDep = Annotated[AsyncSession, Depends(get_requests_client)]
|
||||
|
||||
app = FastAPI(lifespan=lifespan)
|
||||
app.mount('/static', StaticFiles(directory=settings.static_dir), name='static')
|
||||
app.mount('/content/favicons', StaticFiles(directory=settings.favicons_dir), name='favicons')
|
||||
|
||||
Reference in New Issue
Block a user