refactor: use snake case instead of camel case in types (#1894)

This commit is contained in:
Marcelo Trylesinski 2026-01-16 15:51:27 +01:00 • committed by GitHub
commit e94b386a13
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 1063 additions and 1057 deletions

View file

@ -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"

View file

@ -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"

View file

@ -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")

View file

@ -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

View file

@ -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"

View file

@ -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)

View file

@ -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"

View file

@ -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",

View file

@ -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",
)

View file

@ -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"},
),
]