|
@ -1,5 +1,4 @@ |
|
|
from contextlib import AsyncExitStack |
|
|
from contextlib import AsyncExitStack |
|
|
from typing import Optional |
|
|
|
|
|
|
|
|
|
|
|
from starlette.types import ASGIApp, Receive, Scope, Send |
|
|
from starlette.types import ASGIApp, Receive, Scope, Send |
|
|
|
|
|
|
|
@ -10,16 +9,6 @@ class AsyncExitStackMiddleware: |
|
|
self.context_name = context_name |
|
|
self.context_name = context_name |
|
|
|
|
|
|
|
|
async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: |
|
|
async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: |
|
|
dependency_exception: Optional[Exception] = None |
|
|
|
|
|
async with AsyncExitStack() as stack: |
|
|
async with AsyncExitStack() as stack: |
|
|
scope[self.context_name] = stack |
|
|
scope[self.context_name] = stack |
|
|
try: |
|
|
await self.app(scope, receive, send) |
|
|
await self.app(scope, receive, send) |
|
|
|
|
|
except Exception as e: |
|
|
|
|
|
dependency_exception = e |
|
|
|
|
|
raise e |
|
|
|
|
|
if dependency_exception: |
|
|
|
|
|
# This exception was possibly handled by the dependency but it should |
|
|
|
|
|
# still bubble up so that the ServerErrorMiddleware can return a 500 |
|
|
|
|
|
# or the ExceptionMiddleware can catch and handle any other exceptions |
|
|
|
|
|
raise dependency_exception |
|
|
|
|
|