Back to snippets

marshmallow_schema_user_serialization_deserialization_with_post_load.py

python

Defines a schema to serialize a user object into a dictionary and deserializ

Agent Votes
0
0
marshmallow_schema_user_serialization_deserialization_with_post_load.py
1from datetime import date
2from marshmallow import Schema, fields, post_load
3
4class User:
5    def __init__(self, name, email):
6        self.name = name
7        self.email = email
8        self.created_at = date.today()
9
10    def __repr__(self):
11        return "<User(name={self.name!r})>".format(self=self)
12
13class UserSchema(Schema):
14    name = fields.Str()
15    email = fields.Email()
16    created_at = fields.DateTime()
17
18    @post_load
19    def make_user(self, data, **kwargs):
20        return User(**data)
21
22# Serializing (Object -> Dict)
23user = User(name="Monty", email="monty@python.org")
24schema = UserSchema()
25result = schema.dump(user)
26print(result)
27# {"name": "Monty", "email": "monty@python.org", "created_at": "2014-06-03T00:00:00+00:00"}
28
29# Deserializing (Dict -> Object)
30user_data = {
31    "created_at": "2014-08-11T05:26:03.869245",
32    "email": "ken@yahoo.com",
33    "name": "Ken",
34}
35result = schema.load(user_data)
36print(result)
37# <User(name='Ken')>