Fixes Behavior of Pydantic None Type and Adds More Tests

This commit is contained in:
2025-08-18 23:33:16 -03:00
parent e9d61a1268
commit 00d88388f8
3 changed files with 28 additions and 29 deletions

View File

@@ -5,21 +5,14 @@ from typing_extensions import Unpack
class NullTypeParser(GenericTypeParser):
mapped_type = None
mapped_type = type(None)
json_schema_type = "type:null"
type_mappings = {
"default": "default",
}
def from_properties_impl(
self, name, properties, **kwargs: Unpack[TypeParserOptions]
):
mapped_properties = self.mappings_properties_builder(properties, **kwargs)
mapped_properties["default"] = None
default_value = properties.get("default")
if default_value is not None:
raise ValueError(f"Default value for {name} must be None.")
return None, mapped_properties
return self.mapped_type, mapped_properties

View File

@@ -13,31 +13,17 @@ class TestNullTypeParser(TestCase):
"placeholder", properties
)
self.assertEqual(type_parsing, None)
self.assertEqual(type_parsing, type(None))
self.assertEqual(type_validator, {"default": None})
def test_null_parser_with_default(self):
def test_null_parser_with_invalid_default(self):
parser = NullTypeParser()
properties = {
"type": "null",
"default": None,
}
properties = {"type": "null", "default": "invalid"}
type_parsing, type_validator = parser.from_properties_impl(
"placeholder", properties
)
self.assertEqual(type_parsing, None)
self.assertEqual(type_validator["default"], None)
def test_null_parser_with_invalid_default(self):
parser = NullTypeParser()
properties = {
"type": "null",
"default": "invalid",
}
with self.assertRaises(ValueError):
parser.from_properties_impl("placeholder", properties)
self.assertEqual(type_parsing, type(None))
self.assertEqual(type_validator, {"default": None})

View File

@@ -657,3 +657,23 @@ class TestSchemaConverter(TestCase):
with self.assertRaises(ValueError):
Model(name="Canada")
def test_null_type_parser(self):
schema = {
"title": "Test",
"type": "object",
"properties": {
"a_thing": {"type": "null"},
},
}
Model = SchemaConverter.build(schema)
obj = Model()
self.assertIsNone(obj.a_thing)
obj = Model(a_thing=None)
self.assertIsNone(obj.a_thing)
with self.assertRaises(ValueError):
Model(a_thing="not none")