refactor: remove unused mcp.shared.progress module (#2080)
This commit is contained in:
parent
fc57c2c4c5
commit
e82203bfc4
1 changed files with 32 additions and 171 deletions
|
|
@ -10,9 +10,7 @@ from mcp.server import Server, ServerRequestContext
|
|||
from mcp.server.lowlevel import NotificationOptions
|
||||
from mcp.server.models import InitializationOptions
|
||||
from mcp.server.session import ServerSession
|
||||
from mcp.shared._context import RequestContext
|
||||
from mcp.shared.message import SessionMessage
|
||||
from mcp.shared.progress import progress
|
||||
from mcp.shared.session import RequestResponder
|
||||
|
||||
|
||||
|
|
@ -198,117 +196,6 @@ async def test_bidirectional_progress_notifications():
|
|||
assert server_progress_updates[2]["progress"] == 1.0
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_progress_context_manager():
|
||||
"""Test client using progress context manager for sending progress notifications."""
|
||||
# Create memory streams for client/server
|
||||
server_to_client_send, server_to_client_receive = anyio.create_memory_object_stream[SessionMessage](5)
|
||||
client_to_server_send, client_to_server_receive = anyio.create_memory_object_stream[SessionMessage](5)
|
||||
|
||||
# Track progress updates
|
||||
server_progress_updates: list[dict[str, Any]] = []
|
||||
|
||||
progress_token = None
|
||||
|
||||
# Register progress handler
|
||||
async def handle_progress(ctx: ServerRequestContext, params: types.ProgressNotificationParams) -> None:
|
||||
server_progress_updates.append(
|
||||
{
|
||||
"token": params.progress_token,
|
||||
"progress": params.progress,
|
||||
"total": params.total,
|
||||
"message": params.message,
|
||||
}
|
||||
)
|
||||
|
||||
server = Server(name="ProgressContextTestServer", on_progress=handle_progress)
|
||||
|
||||
# Run server session to receive progress updates
|
||||
async def run_server():
|
||||
# Create a server session
|
||||
async with ServerSession(
|
||||
client_to_server_receive,
|
||||
server_to_client_send,
|
||||
InitializationOptions(
|
||||
server_name="ProgressContextTestServer",
|
||||
server_version="0.1.0",
|
||||
capabilities=server.get_capabilities(NotificationOptions(), {}),
|
||||
),
|
||||
) as server_session:
|
||||
async for message in server_session.incoming_messages:
|
||||
try:
|
||||
await server._handle_message(message, server_session, {})
|
||||
except Exception as e: # pragma: no cover
|
||||
raise e
|
||||
|
||||
# Client message handler
|
||||
async def handle_client_message(
|
||||
message: RequestResponder[types.ServerRequest, types.ClientResult] | types.ServerNotification | Exception,
|
||||
) -> None:
|
||||
if isinstance(message, Exception): # pragma: no cover
|
||||
raise message
|
||||
|
||||
# run client session
|
||||
async with (
|
||||
ClientSession(
|
||||
server_to_client_receive,
|
||||
client_to_server_send,
|
||||
message_handler=handle_client_message,
|
||||
) as client_session,
|
||||
anyio.create_task_group() as tg,
|
||||
):
|
||||
tg.start_soon(run_server)
|
||||
|
||||
await client_session.initialize()
|
||||
|
||||
progress_token = "client_token_456"
|
||||
|
||||
# Create request context
|
||||
request_context = RequestContext(
|
||||
request_id="test-request",
|
||||
session=client_session,
|
||||
meta={"progress_token": progress_token},
|
||||
)
|
||||
|
||||
# Utilize progress context manager
|
||||
with progress(request_context, total=100) as p:
|
||||
await p.progress(10, message="Loading configuration...")
|
||||
await p.progress(30, message="Connecting to database...")
|
||||
await p.progress(40, message="Fetching data...")
|
||||
await p.progress(20, message="Processing results...")
|
||||
|
||||
# Wait for all messages to be processed
|
||||
await anyio.sleep(0.5)
|
||||
tg.cancel_scope.cancel()
|
||||
|
||||
# Verify progress updates were received by server
|
||||
assert len(server_progress_updates) == 4
|
||||
|
||||
# first update
|
||||
assert server_progress_updates[0]["token"] == progress_token
|
||||
assert server_progress_updates[0]["progress"] == 10
|
||||
assert server_progress_updates[0]["total"] == 100
|
||||
assert server_progress_updates[0]["message"] == "Loading configuration..."
|
||||
|
||||
# second update
|
||||
assert server_progress_updates[1]["token"] == progress_token
|
||||
assert server_progress_updates[1]["progress"] == 40
|
||||
assert server_progress_updates[1]["total"] == 100
|
||||
assert server_progress_updates[1]["message"] == "Connecting to database..."
|
||||
|
||||
# third update
|
||||
assert server_progress_updates[2]["token"] == progress_token
|
||||
assert server_progress_updates[2]["progress"] == 80
|
||||
assert server_progress_updates[2]["total"] == 100
|
||||
assert server_progress_updates[2]["message"] == "Fetching data..."
|
||||
|
||||
# final update
|
||||
assert server_progress_updates[3]["token"] == progress_token
|
||||
assert server_progress_updates[3]["progress"] == 100
|
||||
assert server_progress_updates[3]["total"] == 100
|
||||
assert server_progress_updates[3]["message"] == "Processing results..."
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_progress_callback_exception_logging():
|
||||
"""Test that exceptions in progress callbacks are logged and \
|
||||
|
|
|
|||
Loading…
Reference in a new issue