diff --git a/jsonschema_pydantic/types/array_type_parser.py b/jsonschema_pydantic/types/array_type_parser.py index 3733ba2..ca19828 100644 --- a/jsonschema_pydantic/types/array_type_parser.py +++ b/jsonschema_pydantic/types/array_type_parser.py @@ -12,10 +12,8 @@ class ArrayTypeParser(GenericTypeParser): @classmethod def from_properties(cls, name, properties): - _item_type = properties["items"]["type"] - if _item_type == "object": - _item_type = type - else: - _item_type = GenericTypeParser.get_impl(_item_type).mapped_type + _item_type, _item_args = GenericTypeParser.get_impl( + properties["items"]["type"] + ).from_properties(name, properties["items"]) return list[_item_type], {} diff --git a/tests/test_type_parser.py b/tests/test_type_parser.py index 9898346..e19c0be 100644 --- a/tests/test_type_parser.py +++ b/tests/test_type_parser.py @@ -8,6 +8,7 @@ from jsonschema_pydantic.types import ( ) import unittest +from typing import get_args class TestTypeParser(unittest.TestCase): @@ -38,11 +39,23 @@ class TestTypeParser(unittest.TestCase): def test_object_parser(self): parser = ObjectTypeParser() - expected_definition = (object, {}) - self.assertEqual(parser.from_properties("placeholder", {}), expected_definition) + properties = { + "type": "object", + "properties": { + "name": {"type": "string"}, + "age": {"type": "integer"}, + }, + } - def test_array_parser(self): + Model, _args = parser.from_properties("placeholder", properties) + + obj = Model(name="name", age=10) + + self.assertEqual(obj.name, "name") + self.assertEqual(obj.age, 10) + + def test_array_of_string_parser(self): parser = ArrayTypeParser() expected_definition = (list[str], {}) @@ -51,3 +64,24 @@ class TestTypeParser(unittest.TestCase): self.assertEqual( parser.from_properties("placeholder", properties), expected_definition ) + + def test_array_of_object_parser(self): + parser = ArrayTypeParser() + + properties = { + "items": { + "type": "object", + "properties": { + "name": {"type": "string"}, + "age": {"type": "integer"}, + }, + } + } + + _type, _args = parser.from_properties("placeholder", properties) + + Model = get_args(_type)[0] + obj = Model(name="name", age=10) + + self.assertEqual(obj.name, "name") + self.assertEqual(obj.age, 10)