diff --git a/src/a2a/compat/v0_3/rest_transport.py b/src/a2a/compat/v0_3/rest_transport.py index 362946736..9ee74e2b9 100644 --- a/src/a2a/compat/v0_3/rest_transport.py +++ b/src/a2a/compat/v0_3/rest_transport.py @@ -260,8 +260,20 @@ async def list_task_push_notification_configs( context: ClientCallContext | None = None, ) -> ListTaskPushNotificationConfigsResponse: """Lists push notification configurations for a specific task.""" - raise NotImplementedError( - 'list_task_push_notification_configs not supported in v0.3 REST' + response_data = await self._execute_request( + 'GET', + f'/v1/tasks/{request.task_id}/pushNotificationConfigs', + context=context, + ) + resp_proto = ParseDict( + response_data, + a2a_v0_3_pb2.ListTaskPushNotificationConfigResponse(), + ignore_unknown_fields=True, + ) + return conversions.to_core_list_task_push_notification_config_response( + proto_utils.FromProto.list_task_push_notification_config_response( + resp_proto + ) ) async def delete_task_push_notification_config( diff --git a/tests/compat/v0_3/test_rest_transport.py b/tests/compat/v0_3/test_rest_transport.py index e627b444f..7ad838d9f 100644 --- a/tests/compat/v0_3/test_rest_transport.py +++ b/tests/compat/v0_3/test_rest_transport.py @@ -510,10 +510,43 @@ async def test_compat_rest_transport_list_tasks(transport): async def test_compat_rest_transport_list_task_push_notification_configs( transport, ): - with pytest.raises(NotImplementedError): - await transport.list_task_push_notification_configs( - ListTaskPushNotificationConfigsRequest() - ) + mock_execute_request = AsyncMock( + return_value={ + 'configs': [ + { + 'name': 'tasks/task-123/pushNotificationConfigs/push-1', + 'pushNotificationConfig': { + 'url': 'http://push-1', + 'id': 'push-1', + }, + }, + { + 'name': 'tasks/task-123/pushNotificationConfigs/push-2', + 'pushNotificationConfig': { + 'url': 'http://push-2', + 'id': 'push-2', + }, + }, + ] + } + ) + transport._execute_request = mock_execute_request + + response = await transport.list_task_push_notification_configs( + ListTaskPushNotificationConfigsRequest(task_id='task-123') + ) + + mock_execute_request.assert_awaited_once_with( + 'GET', '/v1/tasks/task-123/pushNotificationConfigs', context=None + ) + assert list(response.configs) == [ + TaskPushNotificationConfig( + id='push-1', task_id='task-123', url='http://push-1' + ), + TaskPushNotificationConfig( + id='push-2', task_id='task-123', url='http://push-2' + ), + ] @pytest.mark.asyncio