Skip to content

Commit 719a0ad

Browse files
author
wcdolphin
committed
Adds json module providing a JSONEnocder
1 parent abbb9c2 commit 719a0ad

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

flask_mongoengine/json.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from flask.json import JSONEncoder
2+
from bson import json_util
3+
from mongoengine.base import BaseDocument
4+
from mongoengine.queryset.base import BaseQuerySet
5+
6+
class MongoEngineJSONEncoder(JSONEncoder):
7+
'''
8+
A JSONEncoder which provides serialization of MongoEngine
9+
documents and querysets.
10+
'''
11+
def default(self,obj):
12+
if isinstance(obj,BaseDocument):
13+
return json_util._json_convert(obj.to_mongo())
14+
elif isinstance(obj,BaseQuerySet):
15+
return json_util._json_convert(obj.as_pymongo())
16+
return JSONEncoder.default(self, obj)
17+
18+
19+
def overide_json_encoder(app):
20+
'''
21+
A function to dynamically create a new MongoEngineJSONEncoder class
22+
based upon a custom base class.
23+
This function allows us to combine MongoEngine serialization with
24+
any changes to Flask's JSONEncoder which a user may have made
25+
prior to calling init_app.
26+
27+
NOTE: This does not cover situations where users override
28+
an instance's json_encoder after calling init_app.
29+
'''
30+
class MongoEngineJSONEncoder(app.json_encoder):
31+
def default(self,obj):
32+
if isinstance(obj,BaseDocument):
33+
return json_util._json_convert(obj.to_mongo())
34+
elif isinstance(obj,BaseQuerySet):
35+
return json_util._json_convert(obj.as_pymongo())
36+
return app.json_encoder.default(self, obj)
37+
app.json_encoder = MongoEngineJSONEncoder

0 commit comments

Comments
 (0)