From 50e9c041d55ec7a620a00f873ef371cfd5ef54b3 Mon Sep 17 00:00:00 2001 From: Michael Wright Date: Tue, 10 Mar 2026 13:42:49 +0000 Subject: [PATCH 1/4] fix: get_agent_card tailing slash when A2ACardResolver agent_card_path="" (#799) --- src/a2a/client/card_resolver.py | 4 +++- tests/client/test_card_resolver.py | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/a2a/client/card_resolver.py b/src/a2a/client/card_resolver.py index b34c4e21..1aff27d3 100644 --- a/src/a2a/client/card_resolver.py +++ b/src/a2a/client/card_resolver.py @@ -72,7 +72,9 @@ async def get_agent_card( else: path_segment = relative_card_path.lstrip('/') - target_url = f'{self.base_url}/{path_segment}' + target_url = self.base_url + if path_segment: + target_url = f'{target_url}/{path_segment}' try: response = await self.httpx_client.get( diff --git a/tests/client/test_card_resolver.py b/tests/client/test_card_resolver.py index b175d965..17217e74 100644 --- a/tests/client/test_card_resolver.py +++ b/tests/client/test_card_resolver.py @@ -203,7 +203,23 @@ async def test_get_agent_card_root_path( mock_response.json.return_value = valid_agent_card_data mock_httpx_client.get.return_value = mock_response await resolver.get_agent_card(relative_card_path='/') - mock_httpx_client.get.assert_called_once_with(f'{base_url}/') + mock_httpx_client.get.assert_called_once_with(f'{base_url}') + + @pytest.mark.asyncio + async def test_get_agent_card_with_empty_resolver_agent_card_path( + self, + base_url, + resolver, + mock_httpx_client, + mock_response, + valid_agent_card_data, + ): + """Test fetching agent card with an empty relative_card_path.""" + resolver.agent_card_path = '' + mock_response.json.return_value = valid_agent_card_data + mock_httpx_client.get.return_value = mock_response + await resolver.get_agent_card() + mock_httpx_client.get.assert_called_once_with(f'{base_url}') @pytest.mark.asyncio async def test_get_agent_card_http_status_error( From aef01f7eac9ff701a1767191a76910ac6f57c65e Mon Sep 17 00:00:00 2001 From: Michael Wright Date: Tue, 10 Mar 2026 19:36:29 +0000 Subject: [PATCH 2/4] clarify purpose of test Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- tests/client/test_card_resolver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/client/test_card_resolver.py b/tests/client/test_card_resolver.py index 17217e74..9a684a4a 100644 --- a/tests/client/test_card_resolver.py +++ b/tests/client/test_card_resolver.py @@ -214,7 +214,7 @@ async def test_get_agent_card_with_empty_resolver_agent_card_path( mock_response, valid_agent_card_data, ): - """Test fetching agent card with an empty relative_card_path.""" + """Test fetching agent card when the resolver's agent_card_path is empty.""" resolver.agent_card_path = '' mock_response.json.return_value = valid_agent_card_data mock_httpx_client.get.return_value = mock_response From 8797075444ac1ff80aa0781151acd50a4d618259 Mon Sep 17 00:00:00 2001 From: Michael Wright Date: Wed, 11 Mar 2026 18:31:12 +0000 Subject: [PATCH 3/4] more concise Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- src/a2a/client/card_resolver.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/a2a/client/card_resolver.py b/src/a2a/client/card_resolver.py index 1aff27d3..faf2b35d 100644 --- a/src/a2a/client/card_resolver.py +++ b/src/a2a/client/card_resolver.py @@ -72,9 +72,7 @@ async def get_agent_card( else: path_segment = relative_card_path.lstrip('/') - target_url = self.base_url - if path_segment: - target_url = f'{target_url}/{path_segment}' + target_url = f'{self.base_url}/{path_segment}' if path_segment else self.base_url try: response = await self.httpx_client.get( From 72465dc3b92d4927181ef9d2e6bc87d4fc740d61 Mon Sep 17 00:00:00 2001 From: Michael Wright Date: Wed, 11 Mar 2026 18:35:12 +0000 Subject: [PATCH 4/4] fix bot lint issue --- src/a2a/client/card_resolver.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/a2a/client/card_resolver.py b/src/a2a/client/card_resolver.py index faf2b35d..6d98a536 100644 --- a/src/a2a/client/card_resolver.py +++ b/src/a2a/client/card_resolver.py @@ -72,7 +72,9 @@ async def get_agent_card( else: path_segment = relative_card_path.lstrip('/') - target_url = f'{self.base_url}/{path_segment}' if path_segment else self.base_url + target_url = ( + f'{self.base_url}/{path_segment}' if path_segment else self.base_url + ) try: response = await self.httpx_client.get(