Skip to content

Commit 32cfef0

Browse files
committed
WIP
1 parent b7f323f commit 32cfef0

2 files changed

Lines changed: 16 additions & 13 deletions

File tree

src/a2a/client/transports/http_helpers.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -81,19 +81,20 @@ async def send_http_stream_request(
8181
try:
8282
event_source.response.raise_for_status()
8383
except httpx.HTTPStatusError as e:
84+
# Read upfront streaming error content immediately, otherwise lower-level handlers
85+
# (e.g. response.json()) crash with 'ResponseNotRead' Access errors.
8486
await event_source.response.aread()
8587
raise e
8688

87-
try:
88-
async for sse in event_source.aiter_sse():
89-
if not sse.data:
90-
continue
91-
yield sse.data
92-
except SSEError as e:
93-
if 'application/json' in event_source.response.headers.get(
94-
'content-type', ''
95-
):
96-
content = await event_source.response.aread()
97-
yield content.decode('utf-8')
98-
else:
99-
raise e
89+
# If the response is not a stream, read it standardly (e.g., upfront JSON-RPC error payload)
90+
if 'text/event-stream' not in event_source.response.headers.get(
91+
'content-type', ''
92+
):
93+
content = await event_source.response.aread()
94+
yield content.decode('utf-8')
95+
return
96+
97+
async for sse in event_source.aiter_sse():
98+
if not sse.data:
99+
continue
100+
yield sse.data

tests/client/transports/test_jsonrpc_client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,7 @@ async def test_send_message_streaming_request_error(
464464
request = create_send_message_request()
465465
mock_event_source = AsyncMock()
466466
mock_event_source.response.raise_for_status = MagicMock()
467+
mock_event_source.response.headers = {}
467468
mock_event_source.aiter_sse = MagicMock(
468469
side_effect=httpx.RequestError(
469470
'Simulated request error', request=MagicMock()
@@ -487,6 +488,7 @@ async def test_send_message_streaming_timeout(
487488
request = create_send_message_request()
488489
mock_event_source = AsyncMock()
489490
mock_event_source.response.raise_for_status = MagicMock()
491+
mock_event_source.response.headers = {}
490492
mock_event_source.aiter_sse = MagicMock(
491493
side_effect=httpx.TimeoutException('Timeout')
492494
)

0 commit comments

Comments
 (0)