Skip to content

Commit

Permalink
♻️ Simplify AsyncExitStackMiddleware as without Python 3.6 `AsyncEx…
Browse files Browse the repository at this point in the history
…itStack` is always available (#9657)

♻️ Simplify AsyncExitStackMiddleware as without Python 3.6 AsyncExitStack is always available
  • Loading branch information
tiangolo committed Jun 11, 2023
1 parent df58ecd commit 17e49bc
Showing 1 changed file with 13 additions and 16 deletions.
29 changes: 13 additions & 16 deletions fastapi/middleware/asyncexitstack.py
Expand Up @@ -10,19 +10,16 @@ def __init__(self, app: ASGIApp, context_name: str = "fastapi_astack") -> None:
self.context_name = context_name

async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
if AsyncExitStack:
dependency_exception: Optional[Exception] = None
async with AsyncExitStack() as stack:
scope[self.context_name] = stack
try:
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
else:
await self.app(scope, receive, send) # pragma: no cover
dependency_exception: Optional[Exception] = None
async with AsyncExitStack() as stack:
scope[self.context_name] = stack
try:
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

0 comments on commit 17e49bc

Please sign in to comment.