| 123456789101112131415161718 |
- from contextlib import AsyncExitStack
- from starlette.types import ASGIApp, Receive, Scope, Send
- # Used mainly to close files after the request is done, dependencies are closed
- # in their own AsyncExitStack
- class AsyncExitStackMiddleware:
- def __init__(
- self, app: ASGIApp, context_name: str = "fastapi_middleware_astack"
- ) -> None:
- self.app = app
- self.context_name = context_name
- async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
- async with AsyncExitStack() as stack:
- scope[self.context_name] = stack
- await self.app(scope, receive, send)
|