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)