/nameko-mongoengine

MongoEngine dependency provider for Nameko microservice framework

Primary LanguagePythonApache License 2.0Apache-2.0

nameko-mongoengine

Build Status codecov.io Apache 2.0 licensed

MongoEngine dependency provider for Nameko microservice framework.

Installation

pip install nameko-mongoengine

Usage

The basic usage of the dependency provider is shown:

from mongoengine import Document, fields
from nameko_mongoengine import MongoEngine
from nameko.rpc import rpc


class MyModel(Document):
    """
        My document model
    """
    info = fields.StringField(required=True)


class MockService:
    name = "mock_service"
    engine = MongoEngine()

    @rpc
    def write(self, info):
        model = MyModel()
        model.info = info
        model.save()
        return model

    @rpc
    def read(self, _id):
        return MyModel.objects.get(id=_id)

The dependency engine exposes standard pymongo interface to database connections. The default connection can be accessed by the db property:

class MockService:
    name = "mock_service"
    engine = MongoEngine()

    @rpc
    def get(self, _id):
        return self.engine.db.your_collection.find_one({'_id': _id})

Other database connections defined by MongoEngine aliases can be accessed by:

@rpc
def get(self, _id):
    db = self.engine.with_alias("your_alias").db
    return db.your_collection.find_one({'_id': _id})

See full example for more details.

Configurations

The dependency configurations can be set in nameko config.yaml file, or by environment variables.

Config File

MONGODB_URI: mongodb://localhost:27017/dbname?replicaSet=replset

# or
# ---- with aliases
MONGODB_URI:
  default: mongodb://localhost:27017/dbname?replicaSet=replset
  "<alias>": "<uri>"

Environment Variables

MONGODB_URI='mongodb://localhost:27017/dbname?replicaSet=replset'

# or
# ---- with aliases
MONGODB_URI='{"default": "mongodb://localhost:27017/dbname?replicaSet=replset", "<alias>": "<uri>"}'

Developers

To perform development tasks and run tests run:

$ pip install -e .[dev]			# to install all dependencies
$ docker run -d --restart=always --name some-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3-management   # Run rabbitmq-management server
$ docker run --rm -d -p 27017:27017 mongo			# Run mongodb server on docker
$ pytest --cov=nameko_mongoengine tests/			# to get coverage report
$ pylint nameko_mongoengine			# to check code quality with PyLint

Optionally you can use make.

Contributions

Pull requests always welcomed. Thanks!