MongoDescriptors

Some really basic descriptor-based utils for interacting with Mongo.


License
Other
Install
pip install MongoDescriptors==0.2.2

Documentation

Mongo Descriptors

Some really basic descriptor-based utils for interacting with Mongo. Specifically, It's made for model classes, that represent documents or types of documents.

Example:

import bson
from mongo_descriptors import MongoI, Db

class Doc(object):
    db=Db("test")                                   # Sorry for the confusion, but when I say Db, I 
                                                    # really mean Collection. The actuall db can be 
                                                    # referenced like this.
    db=Db("test", root="local")
                                                    # Root defaults to local.

    some_prop=MongoI("some_prop")                   # Note that if you try to get this before assigning 
                                                    # to it, you'll get an error. (Unless of course the 
                                                    # document already exists in the database)

    an_int_prop=MongoI("an_int_prop", typ=int)      # Applies int() before returning and submitting.

    another_prop=MongoI("another_prop", default=0)  # If the property isn't in the database, it returns
                                                    # value provided by default. This doesn't affect 
                                                    # the value stored in the database in any way.

    oi=bson.ObjectId()                              # The instance is required to have a attribute oi 
                                                    # which stores the _id of the document reffered to.

    raw=MongoI()                                    # This gets and stores a raw dict that represents
                                                    # the object. You can't overwrite the _id like this.

                                                    # I mentioned earlier that it returned a dict. 
                                                    # This isn't strictly true. It actually returns a 
                                                    # CatDict, which supports concatination.
                                                    # This leads itself to examples like the following.

x=Doc()
x.raw+={"foo":"bar"}                                # Note that foo does not actually get added as a
                                                    # property to the object. Just to the database.