Skip to content

Commit

Permalink
Fix exception raise in asgi transport if response is not complete
Browse files Browse the repository at this point in the history
  • Loading branch information
Nnonexistent committed Apr 18, 2023
1 parent c1cc6b2 commit 25482cd
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 1 deletion.
8 changes: 7 additions & 1 deletion httpx/_transports/asgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,9 +161,15 @@ async def send(message: typing.Dict[str, typing.Any]) -> None:
try:
await self.app(scope, receive, send)
except Exception: # noqa: PIE-786
if self.raise_app_exceptions or not response_complete.is_set():
if self.raise_app_exceptions:
raise

response_complete.set()
if status_code is None:
status_code = 500
if response_headers is None:
response_headers = {}

assert response_complete.is_set()
assert status_code is not None
assert response_headers is not None
Expand Down
10 changes: 10 additions & 0 deletions tests/test_asgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import pytest

import httpx
from httpx._transports.asgi import ASGITransport


async def hello_world(scope, receive, send):
Expand Down Expand Up @@ -191,3 +192,12 @@ async def read_body(scope, receive, send):

assert response.status_code == 200
assert disconnect


@pytest.mark.anyio
async def test_asgi_exc_no_raise():
transport = ASGITransport(app=raise_exc, raise_app_exceptions=False)
async with httpx.AsyncClient(app=raise_exc, transport=transport) as client:
response = await client.get("http://www.example.org/")

assert response.status_code == 500

0 comments on commit 25482cd

Please sign in to comment.