Skip to content

Commit 37b7c8b

Browse files
committed
Two warnings pending
Signed-off-by: Madhav Kandukuri <[email protected]>
1 parent 79faa3e commit 37b7c8b

File tree

13 files changed

+49
-20
lines changed

13 files changed

+49
-20
lines changed

mcpgateway/admin.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,7 @@ async def admin_ui(
444444
roots = [root.model_dump(by_alias=True) for root in await root_service.list_roots()]
445445
root_path = settings.app_root_path
446446
response = request.app.state.templates.TemplateResponse(
447+
request,
447448
"admin.html",
448449
{
449450
"request": request,

mcpgateway/cache/session_registry.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ def __init__(
9595

9696
self._redis = Redis.from_url(redis_url)
9797
self._pubsub = self._redis.pubsub()
98-
self._pubsub.subscribe("mcp_session_events")
9998

10099
elif self._backend == "database":
101100
if not SQLALCHEMY_AVAILABLE:
@@ -152,6 +151,9 @@ async def initialize(self) -> None:
152151
self._cleanup_task = asyncio.create_task(self._db_cleanup_task())
153152
logger.info("Database cleanup task started")
154153

154+
elif self._backend == "redis":
155+
await self._pubsub.subscribe("mcp_session_events")
156+
155157
elif self._backend == "none":
156158
# Nothing to initialize for none backend
157159
pass
@@ -179,8 +181,8 @@ async def shutdown(self) -> None:
179181
# Close Redis connections
180182
if self._backend == "redis":
181183
try:
182-
self._pubsub.close()
183-
self._redis.close()
184+
await self._pubsub.aclose()
185+
await self._redis.aclose()
184186
except Exception as e:
185187
logger.error(f"Error closing Redis connection: {e}")
186188

mcpgateway/federation/discovery.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ async def _get_gateway_info(self, url: str) -> ServerCapabilities:
363363
if result.get("protocol_version") != PROTOCOL_VERSION:
364364
raise ValueError(f"Unsupported protocol version: {result.get('protocol_version')}")
365365

366-
return ServerCapabilities.parse_obj(result["capabilities"])
366+
return ServerCapabilities.model_validate(result["capabilities"])
367367

368368
async def _exchange_peers(self) -> None:
369369
"""Exchange peer lists with known gateways."""

mcpgateway/federation/manager.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ async def get_gateway_tools(self, db: Session, gateway_id: str) -> List[Tool]:
234234
try:
235235
# Get tool list
236236
tools = await self.forward_request(gateway, "tools/list")
237-
return [Tool.parse_obj(t) for t in tools]
237+
return [Tool.model_validate(t) for t in tools]
238238

239239
except Exception as e:
240240
raise FederationError(f"Failed to get tools from {gateway.name}: {str(e)}")
@@ -259,7 +259,7 @@ async def get_gateway_resources(self, db: Session, gateway_id: str) -> List[Reso
259259
try:
260260
# Get resource list
261261
resources = await self.forward_request(gateway, "resources/list")
262-
return [Resource.parse_obj(r) for r in resources]
262+
return [Resource.model_validate(r) for r in resources]
263263

264264
except Exception as e:
265265
raise FederationError(f"Failed to get resources from {gateway.name}: {str(e)}")
@@ -284,7 +284,7 @@ async def get_gateway_prompts(self, db: Session, gateway_id: str) -> List[Prompt
284284
try:
285285
# Get prompt list
286286
prompts = await self.forward_request(gateway, "prompts/list")
287-
return [Prompt.parse_obj(p) for p in prompts]
287+
return [Prompt.model_validate(p) for p in prompts]
288288

289289
except Exception as e:
290290
raise FederationError(f"Failed to get prompts from {gateway.name}: {str(e)}")
@@ -422,7 +422,7 @@ async def _initialize_gateway(self, url: str) -> ServerCapabilities:
422422
headers=self._get_auth_headers(),
423423
)
424424
response.raise_for_status()
425-
result = InitializeResult.parse_obj(response.json())
425+
result = InitializeResult.model_validate(response.json())
426426

427427
# Verify protocol version
428428
if result.protocol_version != PROTOCOL_VERSION:

mcpgateway/handlers/sampling.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ async def create_message(self, db: Session, request: Dict[str, Any]) -> CreateMe
7171
# Extract request parameters
7272
messages = request.get("messages", [])
7373
max_tokens = request.get("maxTokens")
74-
model_prefs = ModelPreferences.parse_obj(request.get("modelPreferences", {}))
74+
model_prefs = ModelPreferences.model_validate(request.get("modelPreferences", {}))
7575
include_context = request.get("includeContext", "none")
7676
request.get("metadata", {})
7777

mcpgateway/services/tool_service.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ async def invoke_tool(self, db: Session, name: str, arguments: Dict[str, Any]) -
434434
response = await self._http_client.get(final_url, params=payload, headers=headers)
435435
else:
436436
response = await self._http_client.request(method, final_url, json=payload, headers=headers)
437-
response.raise_for_status()
437+
await response.raise_for_status()
438438

439439
# Handle 204 No Content responses that have no body
440440
if response.status_code == 204:

mcpgateway/translate.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,11 @@ async def pump_sse_to_stdio():
382382

383383
await asyncio.gather(read_stdout(), pump_sse_to_stdio())
384384

385+
def start_stdio(cmd, port, log_level, cors):
386+
return asyncio.run(_run_stdio_to_sse(cmd, port, log_level, cors))
387+
388+
def start_sse(url, bearer, log_level):
389+
return asyncio.run(_run_sse_to_stdio(url, bearer, log_level))
385390

386391
def main(argv: Optional[Sequence[str]] | None = None) -> None: # entry-point
387392
args = _parse_args(argv or sys.argv[1:])
@@ -391,9 +396,9 @@ def main(argv: Optional[Sequence[str]] | None = None) -> None: # entry-point
391396
)
392397
try:
393398
if args.stdio:
394-
asyncio.run(_run_stdio_to_sse(args.stdio, args.port, args.logLevel, args.cors))
399+
return start_stdio(args.stdio, args.port, args.logLevel, args.cors)
395400
elif args.sse:
396-
asyncio.run(_run_sse_to_stdio(args.sse, args.oauth2Bearer, args.logLevel))
401+
return start_sse(args.sse, args.oauth2Bearer, args.logLevel)
397402
except KeyboardInterrupt:
398403
print("") # restore shell prompt
399404
sys.exit(0)

mcpgateway/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ async def version_endpoint(
402402
if partial:
403403
# Return partial HTML fragment for HTMX embedding
404404
templates = Jinja2Templates(directory=str(settings.templates_dir))
405-
return templates.TemplateResponse("version_info_partial.html", {"request": request, "payload": payload})
405+
return templates.TemplateResponse(request, "version_info_partial.html", {"request": request, "payload": payload})
406406
wants_html = fmt == "html" or "text/html" in request.headers.get("accept", "")
407407
if wants_html:
408408
return HTMLResponse(_render_html(payload))

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ addopts = "-ra -q --cov=mcpgateway"
312312
testpaths = [ "tests",]
313313
asyncio_mode = "auto"
314314
filterwarnings = [
315-
"ignore:Passing 'msg' argument to .*\\.cancel\\(\\) is deprecated:DeprecationWarning",
315+
"ignore:Passing 'msg' argument to .*\\.cancel\\(\\) is deprecated:DeprecationWarning", # From 3rd party libraries
316316
]
317317

318318
# ── fawltydeps ─────────────────────────────────────────────────────

tests/conftest.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import pytest
2121
from sqlalchemy import create_engine
2222
from sqlalchemy.orm import sessionmaker
23+
from mcpgateway import translate
2324

2425

2526
@pytest.fixture(scope="session")
@@ -96,3 +97,13 @@ def mock_websocket():
9697
mock.receive_json = AsyncMock()
9798
mock.close = AsyncMock()
9899
return mock
100+
101+
# @pytest.fixture(scope="session", autouse=True)
102+
# def _patch_stdio_first():
103+
# """
104+
# Runs once, *before* the test session collects other modules,
105+
# so no rogue coroutine can be created.
106+
# """
107+
# import mcpgateway.translate as translate
108+
# translate._run_stdio_to_sse = AsyncMock(return_value=None)
109+
# translate._run_sse_to_stdio = AsyncMock(return_value=None)

0 commit comments

Comments
 (0)