refactor: use snake case instead of camel case in types (#1894)
This commit is contained in:
parent
7080fcf1e6
commit
e94b386a13
10 changed files with 1063 additions and 1057 deletions
|
|
@ -89,7 +89,7 @@ async def test_lifespan_cleanup_executed():
|
|||
async with ClientSession(read, write) as session:
|
||||
# Initialize the session
|
||||
result = await session.initialize()
|
||||
assert result.protocolVersion in ["2024-11-05", "2025-06-18", "2025-11-25"]
|
||||
assert result.protocol_version in ["2024-11-05", "2025-06-18", "2025-11-25"]
|
||||
|
||||
# Verify startup marker was created
|
||||
assert Path(startup_marker).exists(), "Server startup marker not created"
|
||||
|
|
|
|||
|
|
@ -27,16 +27,16 @@ async def test_resource_templates():
|
|||
types.ListResourceTemplatesRequest(params=None)
|
||||
)
|
||||
assert isinstance(result.root, types.ListResourceTemplatesResult)
|
||||
templates = result.root.resourceTemplates
|
||||
templates = result.root.resource_templates
|
||||
|
||||
# Verify we get both templates back
|
||||
assert len(templates) == 2
|
||||
|
||||
# Verify template details
|
||||
greeting_template = next(t for t in templates if t.name == "get_greeting") # pragma: no cover
|
||||
assert greeting_template.uriTemplate == "greeting://{name}"
|
||||
assert greeting_template.uri_template == "greeting://{name}"
|
||||
assert greeting_template.description == "Get a personalized greeting"
|
||||
|
||||
profile_template = next(t for t in templates if t.name == "get_user_profile") # pragma: no cover
|
||||
assert profile_template.uriTemplate == "users://{user_id}/profile"
|
||||
assert profile_template.uri_template == "users://{user_id}/profile"
|
||||
assert profile_template.description == "Dynamic user data"
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ async def test_icons_and_website_url():
|
|||
# Create test icon
|
||||
test_icon = Icon(
|
||||
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==",
|
||||
mimeType="image/png",
|
||||
mime_type="image/png",
|
||||
sizes=["1x1"],
|
||||
)
|
||||
|
||||
|
|
@ -51,7 +51,7 @@ async def test_icons_and_website_url():
|
|||
assert mcp.icons is not None
|
||||
assert len(mcp.icons) == 1
|
||||
assert mcp.icons[0].src == test_icon.src
|
||||
assert mcp.icons[0].mimeType == test_icon.mimeType
|
||||
assert mcp.icons[0].mime_type == test_icon.mime_type
|
||||
assert mcp.icons[0].sizes == test_icon.sizes
|
||||
|
||||
# Test tool includes icon
|
||||
|
|
@ -86,7 +86,7 @@ async def test_icons_and_website_url():
|
|||
assert len(templates) == 1
|
||||
template = templates[0]
|
||||
assert template.name == "test_resource_template"
|
||||
assert template.uriTemplate == "test://weather/{city}"
|
||||
assert template.uri_template == "test://weather/{city}"
|
||||
assert template.icons is not None
|
||||
assert len(template.icons) == 1
|
||||
assert template.icons[0].src == test_icon.src
|
||||
|
|
@ -96,9 +96,9 @@ async def test_multiple_icons():
|
|||
"""Test that multiple icons can be added to tools, resources, and prompts."""
|
||||
|
||||
# Create multiple test icons
|
||||
icon1 = Icon(src="data:image/png;base64,icon1", mimeType="image/png", sizes=["16x16"])
|
||||
icon2 = Icon(src="data:image/png;base64,icon2", mimeType="image/png", sizes=["32x32"])
|
||||
icon3 = Icon(src="data:image/png;base64,icon3", mimeType="image/png", sizes=["64x64"])
|
||||
icon1 = Icon(src="data:image/png;base64,icon1", mime_type="image/png", sizes=["16x16"])
|
||||
icon2 = Icon(src="data:image/png;base64,icon2", mime_type="image/png", sizes=["32x32"])
|
||||
icon3 = Icon(src="data:image/png;base64,icon3", mime_type="image/png", sizes=["64x64"])
|
||||
|
||||
mcp = FastMCP("MultiIconServer")
|
||||
|
||||
|
|
|
|||
|
|
@ -85,10 +85,10 @@ async def test_resource_template_client_interaction():
|
|||
# List available resources
|
||||
resources = await session.list_resource_templates()
|
||||
assert isinstance(resources, ListResourceTemplatesResult)
|
||||
assert len(resources.resourceTemplates) == 2
|
||||
assert len(resources.resource_templates) == 2
|
||||
|
||||
# Verify resource templates are listed correctly
|
||||
templates = [r.uriTemplate for r in resources.resourceTemplates]
|
||||
templates = [r.uri_template for r in resources.resource_templates]
|
||||
assert "resource://users/{user_id}/posts/{post_id}" in templates
|
||||
assert "resource://users/{user_id}/profile" in templates
|
||||
|
||||
|
|
@ -97,14 +97,14 @@ async def test_resource_template_client_interaction():
|
|||
contents = result.contents[0]
|
||||
assert isinstance(contents, TextResourceContents)
|
||||
assert contents.text == "Post 456 by user 123"
|
||||
assert contents.mimeType == "text/plain"
|
||||
assert contents.mime_type == "text/plain"
|
||||
|
||||
# Read another resource with valid parameters
|
||||
result = await session.read_resource(AnyUrl("resource://users/789/profile"))
|
||||
contents = result.contents[0]
|
||||
assert isinstance(contents, TextResourceContents)
|
||||
assert contents.text == "Profile for user 789"
|
||||
assert contents.mimeType == "text/plain"
|
||||
assert contents.mime_type == "text/plain"
|
||||
|
||||
# Verify invalid resource URIs raise appropriate errors
|
||||
with pytest.raises(Exception): # Specific exception type may vary
|
||||
|
|
|
|||
|
|
@ -45,19 +45,19 @@ async def test_fastmcp_resource_mime_type():
|
|||
bytes_resource = mapping["test://image_bytes"]
|
||||
|
||||
# Verify mime types
|
||||
assert string_resource.mimeType == "image/png", "String resource mime type not respected"
|
||||
assert bytes_resource.mimeType == "image/png", "Bytes resource mime type not respected"
|
||||
assert string_resource.mime_type == "image/png", "String resource mime type not respected"
|
||||
assert bytes_resource.mime_type == "image/png", "Bytes resource mime type not respected"
|
||||
|
||||
# Also verify the content can be read correctly
|
||||
string_result = await client.read_resource(AnyUrl("test://image"))
|
||||
assert len(string_result.contents) == 1
|
||||
assert getattr(string_result.contents[0], "text") == base64_string, "Base64 string mismatch"
|
||||
assert string_result.contents[0].mimeType == "image/png", "String content mime type not preserved"
|
||||
assert string_result.contents[0].mime_type == "image/png", "String content mime type not preserved"
|
||||
|
||||
bytes_result = await client.read_resource(AnyUrl("test://image_bytes"))
|
||||
assert len(bytes_result.contents) == 1
|
||||
assert base64.b64decode(getattr(bytes_result.contents[0], "blob")) == image_bytes, "Bytes mismatch"
|
||||
assert bytes_result.contents[0].mimeType == "image/png", "Bytes content mime type not preserved"
|
||||
assert bytes_result.contents[0].mime_type == "image/png", "Bytes content mime type not preserved"
|
||||
|
||||
|
||||
async def test_lowlevel_resource_mime_type():
|
||||
|
|
@ -70,11 +70,11 @@ async def test_lowlevel_resource_mime_type():
|
|||
|
||||
# Create test resources with specific mime types
|
||||
test_resources = [
|
||||
types.Resource(uri="test://image", name="test image", mimeType="image/png"),
|
||||
types.Resource(uri="test://image", name="test image", mime_type="image/png"),
|
||||
types.Resource(
|
||||
uri="test://image_bytes",
|
||||
name="test image bytes",
|
||||
mimeType="image/png",
|
||||
mime_type="image/png",
|
||||
),
|
||||
]
|
||||
|
||||
|
|
@ -103,16 +103,16 @@ async def test_lowlevel_resource_mime_type():
|
|||
bytes_resource = mapping["test://image_bytes"]
|
||||
|
||||
# Verify mime types
|
||||
assert string_resource.mimeType == "image/png", "String resource mime type not respected"
|
||||
assert bytes_resource.mimeType == "image/png", "Bytes resource mime type not respected"
|
||||
assert string_resource.mime_type == "image/png", "String resource mime type not respected"
|
||||
assert bytes_resource.mime_type == "image/png", "Bytes resource mime type not respected"
|
||||
|
||||
# Also verify the content can be read correctly
|
||||
string_result = await client.read_resource(AnyUrl("test://image"))
|
||||
assert len(string_result.contents) == 1
|
||||
assert getattr(string_result.contents[0], "text") == base64_string, "Base64 string mismatch"
|
||||
assert string_result.contents[0].mimeType == "image/png", "String content mime type not preserved"
|
||||
assert string_result.contents[0].mime_type == "image/png", "String content mime type not preserved"
|
||||
|
||||
bytes_result = await client.read_resource(AnyUrl("test://image_bytes"))
|
||||
assert len(bytes_result.contents) == 1
|
||||
assert base64.b64decode(getattr(bytes_result.contents[0], "blob")) == image_bytes, "Bytes mismatch"
|
||||
assert bytes_result.contents[0].mimeType == "image/png", "Bytes content mime type not preserved"
|
||||
assert bytes_result.contents[0].mime_type == "image/png", "Bytes content mime type not preserved"
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ def test_resource_contents_uri_json_roundtrip():
|
|||
contents = types.TextResourceContents(
|
||||
uri=uri_str,
|
||||
text="data",
|
||||
mimeType="text/plain",
|
||||
mime_type="text/plain",
|
||||
)
|
||||
json_data = contents.model_dump(mode="json")
|
||||
restored = types.TextResourceContents.model_validate(json_data)
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ async def test_mime_type_with_parameters():
|
|||
|
||||
resources = await mcp.list_resources()
|
||||
assert len(resources) == 1
|
||||
assert resources[0].mimeType == "text/html;profile=mcp-app"
|
||||
assert resources[0].mime_type == "text/html;profile=mcp-app"
|
||||
|
||||
|
||||
async def test_mime_type_with_parameters_and_space():
|
||||
|
|
@ -39,7 +39,7 @@ async def test_mime_type_with_parameters_and_space():
|
|||
|
||||
resources = await mcp.list_resources()
|
||||
assert len(resources) == 1
|
||||
assert resources[0].mimeType == "application/json; charset=utf-8"
|
||||
assert resources[0].mime_type == "application/json; charset=utf-8"
|
||||
|
||||
|
||||
async def test_mime_type_with_multiple_parameters():
|
||||
|
|
@ -52,7 +52,7 @@ async def test_mime_type_with_multiple_parameters():
|
|||
|
||||
resources = await mcp.list_resources()
|
||||
assert len(resources) == 1
|
||||
assert resources[0].mimeType == "text/plain; charset=utf-8; format=fixed"
|
||||
assert resources[0].mime_type == "text/plain; charset=utf-8; format=fixed"
|
||||
|
||||
|
||||
async def test_mime_type_preserved_in_read_resource():
|
||||
|
|
@ -67,4 +67,4 @@ async def test_mime_type_preserved_in_read_resource():
|
|||
# Read the resource
|
||||
result = await client.read_resource(AnyUrl("ui://my-widget"))
|
||||
assert len(result.contents) == 1
|
||||
assert result.contents[0].mimeType == "text/html;profile=mcp-app"
|
||||
assert result.contents[0].mime_type == "text/html;profile=mcp-app"
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ async def test_progress_token_zero_first_call():
|
|||
|
||||
# Create request context with progress token 0
|
||||
mock_meta = MagicMock()
|
||||
mock_meta.progressToken = 0 # This is the key test case - token is 0
|
||||
mock_meta.progress_token = 0 # This is the key test case - token is 0
|
||||
|
||||
request_context = RequestContext(
|
||||
request_id="test-request",
|
||||
|
|
|
|||
|
|
@ -59,9 +59,9 @@ async def test_request_id_match() -> None:
|
|||
id="init-1",
|
||||
method="initialize",
|
||||
params=InitializeRequestParams(
|
||||
protocolVersion=LATEST_PROTOCOL_VERSION,
|
||||
protocol_version=LATEST_PROTOCOL_VERSION,
|
||||
capabilities=ClientCapabilities(),
|
||||
clientInfo=Implementation(name="test-client", version="1.0.0"),
|
||||
client_info=Implementation(name="test-client", version="1.0.0"),
|
||||
).model_dump(by_alias=True, exclude_none=True),
|
||||
jsonrpc="2.0",
|
||||
)
|
||||
|
|
|
|||
|
|
@ -42,12 +42,12 @@ async def test_notification_validation_error(tmp_path: Path):
|
|||
types.Tool(
|
||||
name="slow",
|
||||
description="A slow tool",
|
||||
inputSchema={"type": "object"},
|
||||
input_schema={"type": "object"},
|
||||
),
|
||||
types.Tool(
|
||||
name="fast",
|
||||
description="A fast tool",
|
||||
inputSchema={"type": "object"},
|
||||
input_schema={"type": "object"},
|
||||
),
|
||||
]
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue