fix(fastmcp): handle strings containing numbers correctly
This is a port of https://github.com/jlowin/fastmcp/pull/63 to this repo - I guess the transition was made before this PR was merged into fastmcp, so it wasn't included here. See https://github.com/jlowin/fastmcp/issues/62 for the initial bug report.
This commit is contained in:
parent
4770bcd0b1
commit
5abe811337
2 changed files with 16 additions and 1 deletions
|
|
@ -88,7 +88,7 @@ class FuncMetadata(BaseModel):
|
|||
pre_parsed = json.loads(data[field_name])
|
||||
except json.JSONDecodeError:
|
||||
continue # Not JSON - skip
|
||||
if isinstance(pre_parsed, str):
|
||||
if isinstance(pre_parsed, (str, int, float)):
|
||||
# This is likely that the raw value is e.g. `"hello"` which we
|
||||
# Should really be parsed as '"hello"' in Python - but if we parse
|
||||
# it as JSON it'll turn into just 'hello'. So we skip it.
|
||||
|
|
|
|||
|
|
@ -176,6 +176,21 @@ def test_str_vs_list_str():
|
|||
assert result["str_or_list"] == ["hello", "world"]
|
||||
|
||||
|
||||
def test_str_vs_int():
|
||||
"""
|
||||
Test that string values are kept as strings even when they contain numbers,
|
||||
while numbers are parsed correctly.
|
||||
"""
|
||||
|
||||
def func_with_str_and_int(a: str, b: int):
|
||||
return a
|
||||
|
||||
meta = func_metadata(func_with_str_and_int)
|
||||
result = meta.pre_parse_json({"a": "123", "b": 123})
|
||||
assert result["a"] == "123"
|
||||
assert result["b"] == 123
|
||||
|
||||
|
||||
def test_skip_names():
|
||||
"""Test that skipped parameters are not included in the model"""
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue