fix: handle strings containing numbers correctly

Fixes #62.
This commit is contained in:
Ben Sully 2024-12-05 15:39:57 +00:00
commit 07fc1042b5
No known key found for this signature in database
2 changed files with 16 additions and 1 deletions

View file

@ -91,7 +91,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.

View file

@ -174,6 +174,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"""