From 4086e2323c97b5bd996296c09228bc24f6413a9c Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Tue, 30 Sep 2025 02:32:23 -0600 Subject: [PATCH] fix: repair server lifespan context manager --- mcp_plex/server.py | 19 ++++++++++++------- pyproject.toml | 2 +- tests/test_server.py | 9 +++++++++ uv.lock | 2 +- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/mcp_plex/server.py b/mcp_plex/server.py index e4a0b0e..89e32fe 100644 --- a/mcp_plex/server.py +++ b/mcp_plex/server.py @@ -6,7 +6,6 @@ import inspect import json import os -from contextlib import asynccontextmanager from typing import Annotated, Any, Callable from fastapi import FastAPI @@ -57,12 +56,18 @@ def __init__( https=self.settings.qdrant_https, ) - @asynccontextmanager - async def _lifespan(app: FastMCP): # noqa: ARG001 - try: - yield - finally: - await self.close() + class _ServerLifespan: + def __init__(self, plex_server: "PlexServer") -> None: + self._plex_server = plex_server + + async def __aenter__(self) -> None: # noqa: D401 - matching protocol + return None + + async def __aexit__(self, exc_type, exc, tb) -> None: # noqa: ANN001 + await self._plex_server.close() + + def _lifespan(app: FastMCP) -> _ServerLifespan: # noqa: ARG001 + return _ServerLifespan(self) super().__init__(lifespan=_lifespan) self._reranker: CrossEncoder | None = None diff --git a/pyproject.toml b/pyproject.toml index f66a8e0..5ebcd39 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "mcp-plex" -version = "0.26.29" +version = "0.26.30" description = "Plex-Oriented Model Context Protocol Server" requires-python = ">=3.11,<3.13" diff --git a/tests/test_server.py b/tests/test_server.py index 47ec852..4acc7c8 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -208,8 +208,17 @@ def test_rest_endpoints(monkeypatch): def test_server_lifespan_context(monkeypatch): with _load_server(monkeypatch) as module: + closed = False + + async def fake_close() -> None: + nonlocal closed + closed = True + + monkeypatch.setattr(module.server, "close", fake_close) + async def _lifespan() -> None: async with module.server._mcp_server.lifespan(module.server): pass asyncio.run(_lifespan()) + assert closed is True diff --git a/uv.lock b/uv.lock index e7c7bea..e21d17b 100644 --- a/uv.lock +++ b/uv.lock @@ -690,7 +690,7 @@ wheels = [ [[package]] name = "mcp-plex" -version = "0.26.29" +version = "0.26.30" source = { editable = "." } dependencies = [ { name = "fastapi" },