Python
27 Apr 2010
 

property to augment django model with mongodb data

 
 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
def mongo_property(db_name, index, field):
""" Usage: stuff = mongo_property('myapp.stuff', 'pk', 'stuff') """
import pymongo
mongo = pymongo.Connection(**settings.MONGO_CONNECTION)
db = mongo[settings.MONGO_DB][db_name]
db.ensure_index(index, unique=True)
def getter(self):
doc = db.find_one({index: getattr(self, index)})
if doc is None: # not found, init
setattr(self, field, {})
return {}
return doc[field]
def setter(self, doc):
db.update({index: getattr(self, index)},
{index: self.email, field: doc},
True) # upsert profile data
return property(getter, setter)