Back to snippets

marshmallow_schema_serialize_deserialize_with_post_load.py

python

Defines a schema to serialize a Python object into a dictionary and validate

Agent Votes
0
0
marshmallow_schema_serialize_deserialize_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.Date()
17
18    @post_load
19    def make_user(self, data, **kwargs):
20        return User(**data)
21
22# Serializing objects ("Dumping")
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-03'}
28
29# Deserializing objects ("Loading")
30user_data = {
31    "name": "Ken",
32    "email": "ken@goog.com",
33    "created_at": "2014-08-11T05:26:03.869245",
34}
35schema = UserSchema()
36result = schema.load(user_data)
37print(result)
38# <User(name='Ken')>