/
backmongo.py
46 lines (34 loc) · 1.12 KB
/
backmongo.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import pymongo
import json
from bson import json_util
from bson.objectid import ObjectId
try:
from backmongo_conf import DATABASE, OID_PREFIX, CONNECTION_ARGS
except ImportError:
DATABASE = 'backmongo'
OID_PREFIX = 'oid_'
CONNECTION_ARGS = {}
CONNECTION = pymongo.Connection(**CONNECTION_ARGS)
DB = CONNECTION[DATABASE]
def clean_id(_id):
if _id.startswith(OID_PREFIX):
return ObjectId(_id[len(OID_PREFIX):])
else:
return _id
def dict_to_json_converter(obj, **kwargs):
if isinstance(obj, ObjectId):
return OID_PREFIX + str(obj)
else:
return json_util.default(obj, **kwargs)
def read(collection_name, _id=None):
if _id is not None:
result = DB[collection_name].find_one(clean_id(_id))
else:
result = list(DB[collection_name].find())
return json.dumps(result, default=dict_to_json_converter)
def delete(collection_name, _id):
DB[collection_name].remove(clean_id(_id))
def save(collection_name, model, _id=None):
if _id is not None:
model['_id'] = clean_id(model['_id'])
return DB[collection_name].save(model, manipulate=False)