Skip to content

Commit 9f20389

Browse files
committed
Raise RuntimeError if transport is None
When a client disconnects immediately after connecting, the transport might become None. This should not lead to an assertion, since this can happen in real-world scenarios. Use a RuntimeException instead.
1 parent 056d929 commit 9f20389

3 files changed

Lines changed: 13 additions & 2 deletions

File tree

aiohttp/web_fileresponse.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,8 @@ async def _sendfile(
128128

129129
loop = request._loop
130130
transport = request.transport
131-
assert transport is not None
131+
if transport is None:
132+
raise RuntimeError("Transport is not available")
132133

133134
try:
134135
await loop.sendfile(transport, fobj, offset, count)

aiohttp/web_ws.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,8 @@ def _pre_start(self, request: BaseRequest) -> tuple[str | None, WebSocketWriter]
317317
self.force_close()
318318
self._compress = compress
319319
transport = request._protocol.transport
320-
assert transport is not None
320+
if transport is None:
321+
raise RuntimeError("Transport is not available")
321322
writer = WebSocketWriter(
322323
request._protocol,
323324
transport,

tests/test_web_websocket.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,3 +671,12 @@ async def test_get_extra_info(
671671
ws._writer = ws_transport
672672

673673
assert expected_result == ws.get_extra_info(valid_key, default_value)
674+
675+
676+
async def test_prepare_transport_not_available(make_request: _RequestMaker) -> None:
677+
req = make_request("GET", "/")
678+
ws = web.WebSocketResponse()
679+
# Simulate transport being None
680+
req._protocol.transport = None
681+
with pytest.raises(RuntimeError, match="Transport is not available"):
682+
await ws.prepare(req)

0 commit comments

Comments
 (0)