Mongothin is a small wrapper around pymongo. It allows you to do this:
result = UserResource.find_one('XXXX')
Instead of:
client = MongoClient()
result = client['database']['users'].find_one(ObjectId('XXXX'))
Mongothin also handles retries and exponential backoff.
Mongothin handles clients configuration the way MongoEngine does. Actually the code is taken from MongoEngine.
A resource wraps metadata such as client alias, collection, number of retries and proxies pymonogo collection methods to pymongo itself.
This is how we define a resource:
class UserResource(Resource):
# The connection alias registered via :function:clients.register_connection.
_alias = 'user'
# The _id field type. Whatever is your doc_id input it will be coerced to this type.
# Default is ObjectId. This callable must accept a single argument to whatever is used in the method
# calls.
_id_type = ObjectId
# Number of retries
_retries = 2
# Exponential backoff base
_delay = 0.01
# Collection. If not specified the name of the class is used.
_collection = 'user'
# Shard. Make sure the shard info is in the specs
_shard = (shard_function, shard_key,)
A Resource is heavily oriented to work with _id fields.
Mongothin does not do data mapping. pymongo's input and output are dictionaries, so are Mongothin's. If you need input validation you can use another library such as: