@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)]
Example #2
0
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")
Example #3
0
# 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]