Fixes incorrect casting into int for numbers in string format (#384)
This commit is contained in:
parent
6d66ab8be0
commit
4e3c196941
2 changed files with 16 additions and 1 deletions
|
|
@ -88,7 +88,7 @@ class FuncMetadata(BaseModel):
|
||||||
pre_parsed = json.loads(data[field_name])
|
pre_parsed = json.loads(data[field_name])
|
||||||
except json.JSONDecodeError:
|
except json.JSONDecodeError:
|
||||||
continue # Not JSON - skip
|
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
|
# 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
|
# 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.
|
# it as JSON it'll turn into just 'hello'. So we skip it.
|
||||||
|
|
|
||||||
|
|
@ -399,3 +399,18 @@ def test_complex_function_json_schema():
|
||||||
"title": "complex_arguments_fnArguments",
|
"title": "complex_arguments_fnArguments",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue