Skip to content

Commit 2964d05

Browse files
krassermclaude
andcommitted
Fix FutureWarning from datamodel-code-generator by setting explicit formatters
Pass BLACK and ISORT formatters explicitly to JsonSchemaParser to avoid the FutureWarning about default formatters changing in a future version. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 09fee7b commit 2964d05

2 files changed

Lines changed: 28 additions & 1 deletion

File tree

mcpygen/apigen.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88

99
import aiofiles
1010
import aiofiles.os
11-
from datamodel_code_generator import DataModelType, PythonVersion
11+
from datamodel_code_generator import DataModelType, Formatter, PythonVersion
1212
from datamodel_code_generator.model import get_data_model_types
1313
from datamodel_code_generator.model.base import ALL_MODEL
1414
from datamodel_code_generator.parser.jsonschema import JsonSchemaParser
1515

1616
from mcpygen.client import MCPClient
1717

18+
_DEFAULT_FORMATTERS: list[Formatter] = [Formatter.BLACK, Formatter.ISORT]
19+
1820

1921
def generate_init_definition(server_name: str, server_params: dict[str, Any]) -> str:
2022
return f"""\
@@ -76,6 +78,7 @@ def generate_output_model_code(schema: dict[str, Any]) -> str:
7678

7779

7880
def _generate_model_code(schema: dict[str, Any], class_name: str) -> str:
81+
"""Generate a Pydantic model from JSON schema."""
7982
data_model_types = get_data_model_types(
8083
data_model_type=DataModelType.PydanticV2BaseModel,
8184
target_python_version=PythonVersion.PY_311,
@@ -95,6 +98,7 @@ def _generate_model_code(schema: dict[str, Any], class_name: str) -> str:
9598
use_field_description=True,
9699
use_double_quotes=True,
97100
extra_template_data=extra_template_data,
101+
formatters=_DEFAULT_FORMATTERS,
98102
)
99103
return parser.parse()
100104

tests/unit/test_apigen.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import ast
2+
import warnings
23

34
from mcpygen.apigen import (
5+
_generate_model_code,
46
generate_function_definition,
57
generate_init_definition,
68
sanitize_name,
@@ -198,3 +200,24 @@ def test_dots_replaced(self):
198200

199201
def test_already_valid(self):
200202
assert sanitize_name("my_tool_123") == "my_tool_123"
203+
204+
205+
class TestGenerateModelCode:
206+
def test_explicit_formatters_avoid_futurewarning(self) -> None:
207+
schema = {
208+
"type": "object",
209+
"properties": {
210+
"q": {"type": "string"},
211+
},
212+
"required": ["q"],
213+
}
214+
215+
with warnings.catch_warnings(record=True) as caught:
216+
warnings.simplefilter("always")
217+
code = _generate_model_code(schema, "Params")
218+
219+
assert "class Params" in code
220+
assert not any(
221+
warning.category is FutureWarning and "default formatters" in str(warning.message).lower()
222+
for warning in caught
223+
)

0 commit comments

Comments
 (0)