Better Tests and Array Implementation
This commit is contained in:
@@ -12,10 +12,8 @@ class ArrayTypeParser(GenericTypeParser):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_properties(cls, name, properties):
|
def from_properties(cls, name, properties):
|
||||||
_item_type = properties["items"]["type"]
|
_item_type, _item_args = GenericTypeParser.get_impl(
|
||||||
if _item_type == "object":
|
properties["items"]["type"]
|
||||||
_item_type = type
|
).from_properties(name, properties["items"])
|
||||||
else:
|
|
||||||
_item_type = GenericTypeParser.get_impl(_item_type).mapped_type
|
|
||||||
|
|
||||||
return list[_item_type], {}
|
return list[_item_type], {}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ from jsonschema_pydantic.types import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
|
from typing import get_args
|
||||||
|
|
||||||
|
|
||||||
class TestTypeParser(unittest.TestCase):
|
class TestTypeParser(unittest.TestCase):
|
||||||
@@ -38,11 +39,23 @@ class TestTypeParser(unittest.TestCase):
|
|||||||
|
|
||||||
def test_object_parser(self):
|
def test_object_parser(self):
|
||||||
parser = ObjectTypeParser()
|
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()
|
parser = ArrayTypeParser()
|
||||||
expected_definition = (list[str], {})
|
expected_definition = (list[str], {})
|
||||||
|
|
||||||
@@ -51,3 +64,24 @@ class TestTypeParser(unittest.TestCase):
|
|||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
parser.from_properties("placeholder", properties), expected_definition
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user