Skip to content

Commit 51f99ae

Browse files
committed
Cosmetics
1 parent 73e5445 commit 51f99ae

3 files changed

Lines changed: 14 additions & 20 deletions

File tree

src/a2a/client/transports/grpc.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
TaskPushNotificationConfig,
4848
)
4949
from a2a.utils.constants import PROTOCOL_VERSION_CURRENT, VERSION_HEADER
50-
from a2a.utils.errors import InvalidParamsError
50+
from a2a.utils.errors import A2A_REASON_TO_ERROR, A2AError, InvalidParamsError
5151
from a2a.utils.telemetry import SpanKind, trace_class
5252

5353

@@ -64,7 +64,7 @@ def _map_grpc_error(e: grpc.aio.AioRpcError) -> NoReturn:
6464
data = None
6565

6666
if status is not None:
67-
exception_cls = None
67+
exception_cls: type[A2AError] | None = None
6868
for detail in status.details:
6969
if detail.Is(error_details_pb2.BadRequest.DESCRIPTOR):
7070
bad_request = error_details_pb2.BadRequest()

src/a2a/client/transports/http_helpers.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ def handle_http_exceptions(
4040
raise A2AClientError(f'Network communication error: {e}') from e
4141
except json.JSONDecodeError as e:
4242
raise A2AClientError(f'JSON Decode Error: {e}') from e
43+
except Exception as e:
44+
# ASGITransport propagates local server-side generator crashes as ExceptionGroups
45+
if hasattr(e, 'exceptions') and len(e.exceptions) == 1:
46+
raise e.exceptions[0] from e
47+
raise e
4348

4449

4550
def get_http_args(context: ClientCallContext | None) -> dict[str, Any]:

tests/integration/test_end_to_end.py

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -555,37 +555,26 @@ async def test_end_to_end_input_required(transport_setups):
555555
[
556556
(
557557
SendMessageRequest(),
558-
['message'],
558+
{'message'},
559559
),
560560
(
561561
SendMessageRequest(message=Message()),
562-
['message.message_id', 'message.role', 'message.parts'],
562+
{'message.message_id', 'message.role', 'message.parts'},
563563
),
564564
],
565565
)
566566
async def test_end_to_end_validation_errors(
567567
transport_setups,
568568
empty_request: SendMessageRequest,
569-
expected_fields: list[str],
569+
expected_fields: set[str],
570570
) -> None:
571571
client = transport_setups.client
572572

573-
try:
573+
with pytest.raises(InvalidParamsError) as exc_info:
574574
async for _ in client.send_message(request=empty_request):
575575
pass
576-
except Exception as e:
577-
# ASGITransport propagates server-side generator crashes as ExceptionGroups
578-
exc = e
579-
if hasattr(e, 'exceptions') and len(e.exceptions) == 1:
580-
exc = e.exceptions[0]
581-
582-
if not isinstance(exc, InvalidParamsError):
583-
raise e
584-
585-
errors = exc.data.get('errors', []) if exc.data else []
586-
assert {e['field'] for e in errors} == set(expected_fields)
587-
return
588-
589-
pytest.fail('InvalidParamsError was not raised')
576+
577+
errors = exc_info.value.data.get('errors', [])
578+
assert {e['field'] for e in errors} == expected_fields
590579

591580
await client.close()

0 commit comments

Comments
 (0)