Skip to content

ketgo/nameko-mongoengine

Repository files navigation

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!

About

MongoEngine dependency provider for Nameko microservice framework

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published