mirror of
https://github.com/PrefectHQ/fastmcp.git
synced 2026-08-17 11:09:11 +02:00
178 lines
6.3 KiB
Python
178 lines
6.3 KiB
Python
"""Tests for deprecated functionality."""
|
|
|
|
import warnings
|
|
from unittest.mock import AsyncMock, patch
|
|
|
|
import pytest
|
|
from starlette.applications import Starlette
|
|
|
|
from fastmcp import Client, FastMCP
|
|
|
|
|
|
def test_fastmcp_kwargs_settings_deprecation_warning():
|
|
"""Test that passing settings as kwargs to FastMCP raises a deprecation warning."""
|
|
with pytest.warns(
|
|
DeprecationWarning,
|
|
match="Passing runtime and transport-specific settings as kwargs to the FastMCP constructor is deprecated",
|
|
):
|
|
server = FastMCP("TestServer", host="127.0.0.2", port=8001)
|
|
assert server.settings.host == "127.0.0.2"
|
|
assert server.settings.port == 8001
|
|
|
|
|
|
def test_sse_app_deprecation_warning():
|
|
"""Test that sse_app raises a deprecation warning."""
|
|
server = FastMCP("TestServer")
|
|
|
|
with pytest.warns(DeprecationWarning, match="The sse_app method is deprecated"):
|
|
app = server.sse_app()
|
|
assert isinstance(app, Starlette)
|
|
|
|
|
|
def test_streamable_http_app_deprecation_warning():
|
|
"""Test that streamable_http_app raises a deprecation warning."""
|
|
server = FastMCP("TestServer")
|
|
|
|
with pytest.warns(
|
|
DeprecationWarning, match="The streamable_http_app method is deprecated"
|
|
):
|
|
app = server.streamable_http_app()
|
|
assert isinstance(app, Starlette)
|
|
|
|
|
|
async def test_run_sse_async_deprecation_warning():
|
|
"""Test that run_sse_async raises a deprecation warning."""
|
|
server = FastMCP("TestServer")
|
|
|
|
# Use patch to avoid actually running the server
|
|
with patch.object(server, "run_http_async", new_callable=AsyncMock) as mock_run:
|
|
with pytest.warns(
|
|
DeprecationWarning, match="The run_sse_async method is deprecated"
|
|
):
|
|
await server.run_sse_async()
|
|
|
|
# Verify the mock was called with the right transport
|
|
mock_run.assert_called_once()
|
|
call_kwargs = mock_run.call_args.kwargs
|
|
assert call_kwargs.get("transport") == "sse"
|
|
|
|
|
|
async def test_run_streamable_http_async_deprecation_warning():
|
|
"""Test that run_streamable_http_async raises a deprecation warning."""
|
|
server = FastMCP("TestServer")
|
|
|
|
# Use patch to avoid actually running the server
|
|
with patch.object(server, "run_http_async", new_callable=AsyncMock) as mock_run:
|
|
with pytest.warns(
|
|
DeprecationWarning,
|
|
match="The run_streamable_http_async method is deprecated",
|
|
):
|
|
await server.run_streamable_http_async()
|
|
|
|
# Verify the mock was called with the right transport
|
|
mock_run.assert_called_once()
|
|
call_kwargs = mock_run.call_args.kwargs
|
|
assert call_kwargs.get("transport") == "streamable-http"
|
|
|
|
|
|
def test_http_app_with_sse_transport():
|
|
"""Test that http_app with SSE transport works (no warning)."""
|
|
server = FastMCP("TestServer")
|
|
|
|
# This should not raise a warning since we're using the new API
|
|
with warnings.catch_warnings(record=True) as recorded_warnings:
|
|
app = server.http_app(transport="sse")
|
|
assert isinstance(app, Starlette)
|
|
|
|
# Verify no deprecation warnings were raised for using transport parameter
|
|
deprecation_warnings = [
|
|
w for w in recorded_warnings if issubclass(w.category, DeprecationWarning)
|
|
]
|
|
assert len(deprecation_warnings) == 0
|
|
|
|
|
|
def test_from_client_deprecation_warning():
|
|
"""Test that FastMCP.from_client raises a deprecation warning."""
|
|
server = FastMCP("TestServer")
|
|
with pytest.warns(DeprecationWarning, match="from_client"):
|
|
FastMCP.from_client(Client(server))
|
|
|
|
|
|
def test_mount_tool_separator_deprecation_warning():
|
|
"""Test that using tool_separator in mount() raises a deprecation warning."""
|
|
main_app = FastMCP("MainApp")
|
|
sub_app = FastMCP("SubApp")
|
|
|
|
with pytest.warns(
|
|
DeprecationWarning,
|
|
match="The tool_separator parameter is deprecated and will be removed in a future version",
|
|
):
|
|
main_app.mount("sub", sub_app, tool_separator="-")
|
|
|
|
# Verify the separator is ignored and the default is used
|
|
@sub_app.tool()
|
|
def test_tool():
|
|
return "test"
|
|
|
|
mounted_server = main_app._mounted_servers["sub"]
|
|
assert mounted_server.match_tool("sub_test_tool")
|
|
assert not mounted_server.match_tool("sub-test_tool")
|
|
|
|
|
|
def test_mount_resource_separator_deprecation_warning():
|
|
"""Test that using resource_separator in mount() raises a deprecation warning."""
|
|
main_app = FastMCP("MainApp")
|
|
sub_app = FastMCP("SubApp")
|
|
|
|
with pytest.warns(
|
|
DeprecationWarning,
|
|
match="The resource_separator parameter is deprecated and ignored",
|
|
):
|
|
main_app.mount("sub", sub_app, resource_separator="+")
|
|
|
|
|
|
def test_mount_prompt_separator_deprecation_warning():
|
|
"""Test that using prompt_separator in mount() raises a deprecation warning."""
|
|
main_app = FastMCP("MainApp")
|
|
sub_app = FastMCP("SubApp")
|
|
|
|
with pytest.warns(
|
|
DeprecationWarning,
|
|
match="The prompt_separator parameter is deprecated and will be removed in a future version",
|
|
):
|
|
main_app.mount("sub", sub_app, prompt_separator="-")
|
|
|
|
# Verify the separator is ignored and the default is used
|
|
@sub_app.prompt()
|
|
def test_prompt():
|
|
return "test"
|
|
|
|
mounted_server = main_app._mounted_servers["sub"]
|
|
assert mounted_server.match_prompt("sub_test_prompt")
|
|
assert not mounted_server.match_prompt("sub-test_prompt")
|
|
|
|
|
|
async def test_import_server_separator_deprecation_warnings():
|
|
"""Test that using separators in import_server() raises deprecation warnings."""
|
|
main_app = FastMCP("MainApp")
|
|
sub_app = FastMCP("SubApp")
|
|
|
|
with pytest.warns(
|
|
DeprecationWarning,
|
|
match="The tool_separator parameter is deprecated and will be removed in a future version",
|
|
):
|
|
await main_app.import_server("sub", sub_app, tool_separator="-")
|
|
|
|
main_app = FastMCP("MainApp")
|
|
with pytest.warns(
|
|
DeprecationWarning,
|
|
match="The resource_separator parameter is deprecated and ignored",
|
|
):
|
|
await main_app.import_server("sub", sub_app, resource_separator="+")
|
|
|
|
main_app = FastMCP("MainApp")
|
|
with pytest.warns(
|
|
DeprecationWarning,
|
|
match="The prompt_separator parameter is deprecated and will be removed in a future version",
|
|
):
|
|
await main_app.import_server("sub", sub_app, prompt_separator="-")
|