@dataclass class ComplexTodo: id: int title: str description: Qwerty # my factory = Factory(schemas={ SimpleTodo: DSchema( name_mapping={ "desc": ("description", "qwerty", 0), } ) }) simple_serializer = factory.serializer(List[SimpleTodo]) complex_serializer = factory.serializer(List[ComplexTodo]) # test simple_todos = [SimpleTodo( id=i, title="title %s" % i, desc="5some long description %s %s %s" % (i, i * 10, i) ) for i in range(10)] complex_todos = [ComplexTodo( id=i, title="title %s" % i, description=Qwerty(["5some long description %s %s %s" % (i, i * 10, i)]) ) for i in range(10)]
class TestSerializer(unittest.TestCase): def setUp(self) -> None: self.factory = Factory() def test_plain(self): serializer = self.factory.serializer(D) d = D(100, "hello") self.assertEqual( serializer(d), { "a": 100, "c": "hello" }, ) def test_list(self): serializer = self.factory.serializer(ListD) d1 = D(100, "hello") d2 = D(200, "hello2") dlist = ListD( [d1, d2], [123, 456, 789], ) data = { "data": [ { "a": 100, "c": "hello" }, { "a": 200, "c": "hello2" }, ], "ints": [123, 456, 789], } self.assertEqual( serializer(dlist), data, ) def test_dict(self): serializer = self.factory.serializer(DictD) d1 = D(100, "hello") d2 = D(200, "hello2") dlist = DictD( { "1": d1, "two": d2 }, { "hello": "world", "foo": "bar" }, ) data = { "data": { "1": { "a": 100, "c": "hello" }, "two": { "a": 200, "c": "hello2" }, }, "strs": { "hello": "world", "foo": "bar" }, } self.assertEqual( serializer(dlist), data, ) def test_optional(self): serializer = self.factory.serializer(Optional[D]) d1 = D(100, "hello") data1 = {"a": 100, "c": "hello"} self.assertEqual( serializer(d1), data1, ) self.assertIs( serializer(None), None, ) def test_any(self): serializer = self.factory.serializer(Any) d1 = D(100, "hello") data1 = {"a": 100, "c": "hello"} self.assertEqual( serializer(d1), data1, ) self.assertIs( serializer(None), None, ) def test_enum(self): self.assertEqual(self.factory.dump(State.one), "1") self.assertEqual(self.factory.dump(State.two, State), "two")
# marshmallow class TodoSchema(Schema): id = fields.Integer() title = fields.Str() description = fields.Str(attribute="desc") todo_schema = TodoSchema(many=True) # my factory = Factory(schemas={ Todo: DSchema( name_mapping={"desc": "description"} ) }) serializer = factory.serializer(List[Todo]) # test todos = [Todo( id=i, title="title %s" % i, desc="5some long description %s %s %s" % (i, i * 10, i) ) for i in range(10)] def do1(): return serializer(todos) def do2(): return todo_schema.dump(todos)[0]