From 472c1f649dc6d880f0810b4e66b49c7667ea4e83 Mon Sep 17 00:00:00 2001 From: fernandotorres Date: Sat, 12 Jul 2025 14:51:01 -0300 Subject: [PATCH 1/4] feat: add metadata property to RequestContext for request metadata access --- src/a2a/server/agent_execution/context.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/a2a/server/agent_execution/context.py b/src/a2a/server/agent_execution/context.py index 01055840..86c0c314 100644 --- a/src/a2a/server/agent_execution/context.py +++ b/src/a2a/server/agent_execution/context.py @@ -21,13 +21,13 @@ class RequestContext: """ def __init__( # noqa: PLR0913 - self, - request: MessageSendParams | None = None, - task_id: str | None = None, - context_id: str | None = None, - task: Task | None = None, - related_tasks: list[Task] | None = None, - call_context: ServerCallContext | None = None, + self, + request: MessageSendParams | None = None, + task_id: str | None = None, + context_id: str | None = None, + task: Task | None = None, + related_tasks: list[Task] | None = None, + call_context: ServerCallContext | None = None, ): """Initializes the RequestContext. @@ -134,6 +134,13 @@ def call_context(self) -> ServerCallContext | None: """The server call context associated with this request.""" return self._call_context + @property + def metadata(self) -> dict: + """Metadata associated with the request, if available.""" + if not self._params: + return {} + return self._params.metadata or {} + def _check_or_generate_task_id(self) -> None: """Ensures a task ID is present, generating one if necessary.""" if not self._params: From afc2b6babc97913be1416a6d581ec8911e9a8dc6 Mon Sep 17 00:00:00 2001 From: fernandotorres Date: Mon, 14 Jul 2025 11:49:16 -0300 Subject: [PATCH 2/4] feat: update metadata property in RequestContext to use type hints and add tests --- src/a2a/server/agent_execution/context.py | 3 ++- tests/server/agent_execution/test_context.py | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/a2a/server/agent_execution/context.py b/src/a2a/server/agent_execution/context.py index 86c0c314..af3864cd 100644 --- a/src/a2a/server/agent_execution/context.py +++ b/src/a2a/server/agent_execution/context.py @@ -1,4 +1,5 @@ import uuid +from typing import Any from a2a.server.context import ServerCallContext from a2a.types import ( @@ -135,7 +136,7 @@ def call_context(self) -> ServerCallContext | None: return self._call_context @property - def metadata(self) -> dict: + def metadata(self) -> dict[str, Any]: """Metadata associated with the request, if available.""" if not self._params: return {} diff --git a/tests/server/agent_execution/test_context.py b/tests/server/agent_execution/test_context.py index ea90631c..aa72b5a6 100644 --- a/tests/server/agent_execution/test_context.py +++ b/tests/server/agent_execution/test_context.py @@ -211,6 +211,17 @@ def test_message_property_with_params(self, mock_params): context = RequestContext(request=mock_params) assert context.message == mock_params.message + def test_metadata_property_without_content(self): + """Test metadata property returns empty dict when no content are provided.""" + context = RequestContext() + assert context.metadata == {} + + def test_metadata_property_with_content(self, mock_params): + """Test metadata property returns the metadata from params.""" + mock_params.metadata = {'key': 'value'} + context = RequestContext(request=mock_params) + assert context.metadata == {'key': 'value'} + def test_init_with_existing_ids_in_message(self, mock_message, mock_params): """Test initialization with existing IDs in the message.""" mock_message.taskId = 'existing-task-id' From f7f43baddf260be2f4d56abc43f021c13f59e1cd Mon Sep 17 00:00:00 2001 From: fernandotorres Date: Mon, 14 Jul 2025 11:51:38 -0300 Subject: [PATCH 3/4] chore: reorder import using ruff --- src/a2a/server/agent_execution/context.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/a2a/server/agent_execution/context.py b/src/a2a/server/agent_execution/context.py index af3864cd..531131b7 100644 --- a/src/a2a/server/agent_execution/context.py +++ b/src/a2a/server/agent_execution/context.py @@ -1,4 +1,5 @@ import uuid + from typing import Any from a2a.server.context import ServerCallContext From a5a014451162ea0080ded565c93da9f177449fa5 Mon Sep 17 00:00:00 2001 From: Holt Skinner Date: Mon, 14 Jul 2025 11:15:49 -0500 Subject: [PATCH 4/4] Formatting --- src/a2a/server/agent_execution/context.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/a2a/server/agent_execution/context.py b/src/a2a/server/agent_execution/context.py index 531131b7..782d488b 100644 --- a/src/a2a/server/agent_execution/context.py +++ b/src/a2a/server/agent_execution/context.py @@ -23,13 +23,13 @@ class RequestContext: """ def __init__( # noqa: PLR0913 - self, - request: MessageSendParams | None = None, - task_id: str | None = None, - context_id: str | None = None, - task: Task | None = None, - related_tasks: list[Task] | None = None, - call_context: ServerCallContext | None = None, + self, + request: MessageSendParams | None = None, + task_id: str | None = None, + context_id: str | None = None, + task: Task | None = None, + related_tasks: list[Task] | None = None, + call_context: ServerCallContext | None = None, ): """Initializes the RequestContext.