From 299f307e1e19fda4ef9be0a008379210ca883060 Mon Sep 17 00:00:00 2001 From: Prateek Date: Wed, 1 Oct 2025 14:29:59 +0530 Subject: [PATCH 1/3] Make create session return type pythonic --- python/composio/core/models/tool_router.py | 25 ++++++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/python/composio/core/models/tool_router.py b/python/composio/core/models/tool_router.py index b7047cef641..c630fd83f69 100644 --- a/python/composio/core/models/tool_router.py +++ b/python/composio/core/models/tool_router.py @@ -8,6 +8,7 @@ from __future__ import annotations import typing as t +from types import SimpleNamespace import typing_extensions as te from composio_client.types.tool_router_create_session_params import ConfigToolkit @@ -19,11 +20,19 @@ # Data Types -class ToolRouterSession(te.TypedDict): - """Tool router session response.""" +class ToolRouterSession(SimpleNamespace): + """Tool router session response with both dot notation and dict-style access.""" - session_id: str # Unique session identifier - url: str # Chat session MCP URL + def __init__(self, session_id: str, url: str): + super().__init__(session_id=session_id, url=url) + + def __getitem__(self, key: str) -> str: + """Support dict-style access like session['url']""" + return getattr(self, key) + + def __setitem__(self, key: str, value: str) -> None: + """Support dict-style assignment like session['url'] = 'new_url'""" + setattr(self, key, value) class ToolRouter(Resource): @@ -73,9 +82,11 @@ def create_session( ... manually_manage_connections=False ... ) >>> - >>> # Access session details - >>> print(session['session_id']) - >>> print(session['url']) + >>> # Access session details (both ways work!) + >>> print(session.session_id) # Dot notation (preferred) + >>> print(session['session_id']) # Dict-style access + >>> print(session.url) # Dot notation (preferred) + >>> print(session['url']) # Dict-style access """ try: # Normalize toolkits to the format expected by the API From 8bad54c8a842636a4cbfc2e9843a6e74fe7e0a94 Mon Sep 17 00:00:00 2001 From: Prateek Date: Fri, 3 Oct 2025 13:17:36 +0530 Subject: [PATCH 2/3] Cleanup --- python/composio/core/models/tool_router.py | 1 - 1 file changed, 1 deletion(-) diff --git a/python/composio/core/models/tool_router.py b/python/composio/core/models/tool_router.py index c630fd83f69..586f37bef61 100644 --- a/python/composio/core/models/tool_router.py +++ b/python/composio/core/models/tool_router.py @@ -10,7 +10,6 @@ import typing as t from types import SimpleNamespace -import typing_extensions as te from composio_client.types.tool_router_create_session_params import ConfigToolkit from composio.client import HttpClient From d24a0433db322b6e3517a822d4deabd808b6e363 Mon Sep 17 00:00:00 2001 From: Prateek Date: Fri, 3 Oct 2025 13:21:03 +0530 Subject: [PATCH 3/3] Lint fixes --- python/composio/core/models/tools.py | 2 +- python/composio/core/models/triggers.py | 2 +- python/providers/google_adk/google_adk_demo.py | 10 ++++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/python/composio/core/models/tools.py b/python/composio/core/models/tools.py index 5ad44c6c42f..444955905af 100644 --- a/python/composio/core/models/tools.py +++ b/python/composio/core/models/tools.py @@ -3,8 +3,8 @@ import functools import typing as t -from composio_client import omit import typing_extensions as te +from composio_client import omit from composio.client import HttpClient from composio.client.types import ( diff --git a/python/composio/core/models/triggers.py b/python/composio/core/models/triggers.py index efe9201f7a9..0b8fdb4c3c3 100644 --- a/python/composio/core/models/triggers.py +++ b/python/composio/core/models/triggers.py @@ -8,9 +8,9 @@ import uuid from concurrent.futures import ThreadPoolExecutor from unittest import mock -from composio_client import omit import typing_extensions as te +from composio_client import omit from pysher import Pusher from pysher.channel import Channel as PusherChannel from pysher.connection import Connection as PusherConnection diff --git a/python/providers/google_adk/google_adk_demo.py b/python/providers/google_adk/google_adk_demo.py index 2bcf3dade23..ea31cf1b2db 100644 --- a/python/providers/google_adk/google_adk_demo.py +++ b/python/providers/google_adk/google_adk_demo.py @@ -53,8 +53,10 @@ new_message=content, ) for event in events: - if (event.is_final_response() - and event.content is not None - and event.content.parts - and len(event.content.parts) > 0): + if ( + event.is_final_response() + and event.content is not None + and event.content.parts + and len(event.content.parts) > 0 + ): print("Agent Response: ", event.content.parts[0].text)