diff --git a/dargs/json_schema.py b/dargs/json_schema.py index 221dd3b..cb1e864 100644 --- a/dargs/json_schema.py +++ b/dargs/json_schema.py @@ -147,7 +147,9 @@ def _convert_types(T: type | Any | None) -> str: return "null" elif T is str: return "string" - elif T in (int, float): + elif T is int: + return "integer" + elif T is float: return "number" elif T is bool: return "boolean" diff --git a/tests/test_json_schema.py b/tests/test_json_schema.py index 2da52e8..b86ab87 100644 --- a/tests/test_json_schema.py +++ b/tests/test_json_schema.py @@ -3,8 +3,9 @@ import json import unittest -from jsonschema import validate +from jsonschema import ValidationError, validate +from dargs import Argument from dargs.json_schema import _convert_types, generate_json_schema from .dpmdargs import example_json_str, gen_args @@ -18,7 +19,7 @@ def test_json_schema(self) -> None: validate(data, schema) def test_convert_types(self) -> None: - self.assertEqual(_convert_types(int), "number") + self.assertEqual(_convert_types(int), "integer") self.assertEqual(_convert_types(str), "string") self.assertEqual(_convert_types(float), "number") self.assertEqual(_convert_types(bool), "boolean") @@ -28,3 +29,10 @@ def test_convert_types(self) -> None: self.assertEqual(_convert_types(dict), "object") with self.assertRaises(ValueError): _convert_types(set) + + def test_integer_argument_rejects_fractional_numbers(self) -> None: + """Generated integer schemas match dargs' runtime int validation.""" + schema = generate_json_schema(Argument("count", int)) + validate(1, schema) + with self.assertRaises(ValidationError): + validate(1.5, schema)