Really simple pymongo-based ODM for MongoDB. The only requirements are Bunch and, obviously, pymongo.
-
0.4.9 Solved bug overwriting False/None values with the default value.
-
0.4.7 Better explaining errors at index resolution stage.
-
0.4.6 Index resolution is not mandatory anymore.
-
0.4.4 Fixed manipulator to avoid errors if
None
is returned by a query. -
0.4.3 Added missing support to sparse indexes.
-
0.4.2 Added MongoDB>=3.0 with WiredTiger support.
-
0.4.1 Added pymongo>=3.0 support. Documentation improved.
-
0.4.0 General refactoring. Moved everything from
__init__.py
. Changed.commit()
to.save()
. -
0.3.4 Overwritten default
find_and_modify
behavior, settingmanipulate=True
so that it returns an instance of the mapped class instead of a dictionary. -
0.3.3 Cleaner mapping for returned documents. No need to monkeypatch the Cursor class anymore.
-
0.3.0 Added
__defaults__
property inMongoObject
, used to declare default values for documents. The fields in__defaults__
can also be callable. The callable will be called the first time the document is retrieved through the library.
from pymorm import MongoObject, MongoObjectMeta
from pymongo import MongoClient
db = MongoClient("mongodb://localhost:27017/pymorm").get_default_database()
class Test(MongoObject):
__metaclass__ = MongoObjectMeta
__collection__ = db.tests
__defaults__ = {"username": "Test",
"happiness": lambda: "poor"}
def test_method(self, test):
return test
@property
def test_property(self):
return "test"
@classmethod
def test_classmethod(cls):
return cls.__name__
user = Test.add({})
user2 = Test.add({"username": "Walter"})
user2.happiness = "a lot!"
print user
print user2
user.save()
> User(_id=ObjectId('5519e5eb5dde7310f04d9bbe'), happiness=u'poor', username=u'Test')
> User(_id=ObjectId('5519e5eb5dde7310f04d9bbe'), happiness=u'a lot!', username=u'Walter')