Skip to main content

A python interface to handle connection to a mongod instance

Project description

Mongo Adapter

Build Status

A python implementation of a mongo adapter.

The idea is to make a base class that handles the connection to a mongod instance. It is nice to handle the connection in the same way for different python projects that involves a mongo database.

The Mongo Adapter takes a client as init argument and then we connect to a database with setup(database), fortunately mongo_adapter can handle the client part as well.

Example:

from mongo_adapter import MongoAdapter, get_client

db_name = 'test'
client = get_client()
adapter = MongoAdapter(client, db_name)

assert adapter.db_name == db_name

Testing

The package can be used for testing as well

Example:

from mongo_adapter import MongoAdapter, get_client
import mongomock

db_name = 'test'
uri = "mongomock://"
client = get_client(uri=uri)
adapter = MongoAdapter(client, db_name)

assert isinsance(client, mongomock.MongoClient)

installation

git:

git clone https://github.com/moonso/mongo_adapter
cd mongo_adapter
pip install --editable .

pip:

pip install mongo_adapter

Intended usage

The intended usage is here illustrated with an example

from mongo_adapter import MongoAdapter, get_client

class LibraryAdapter(MongoAdapter):
    def setup(self, db_name='library'):
        """Overrides the basic setup method"""
        if self.client is None:
            raise SyntaxError("No client is available")
        if self.db is None:
            self.db = self.client[db_name]
            self.db_name = db_name

        self.books_collection = self.db.book
        self.user_collection = self.db.book

    def add_book(self, title, author):
        """Add a book to the books collection"""
        result = self.books_collection.insert_one(
            {
                'title': title,
                'author': author
            }
        )
        return result

if __name__ == '__main__':
    client = get_client()
    adapter = LibraryAdapter(client, database='library')

    adapter.add_book('Moby Dick', 'Herman Melville')

API

Client

def check_connection(client):
    """Check if the mongod process is running

    Args:
        client(MongoClient)

    Returns:
        bool
    """

def get_client(host='localhost', port=27017, username=None, password=None,
              uri=None, mongodb=None, timeout=20):
    """Get a client to the mongo database

    Args:
        host(str): Host of database
        port(int): Port of database
        username(str)
        password(str)
        uri(str)
        timeout(int): How long should the client try to connect

    Returns:
        client(pymongo.MongoClient)

    """

Adapter

class MongoAdapter(object):
    """Adapter for communicating with a mongo database"""
    def __init__(self, client=None, db_name=None):
        """
        Args:
            client(MongoClient)
            db_name(str)
        """
        self.client = client
        self.db = None
        self.db_name = None
        if (db_name and client):
            self.setup(database)

    def init_app(self, app):
        """Setup via Flask"""
        host = app.config.get('MONGO_HOST', 'localhost')
        port = app.config.get('MONGO_PORT', 27017)
        self.db_name = app.config['MONGO_DBNAME']
        self.client = app.extensions['pymongo']['MONGO'][0]
        self.db = app.extensions['pymongo']['MONGO'][1]
        LOG.info("connecting to database: %s:%s/%s", host, port, self.db_name)
		self.setup(self.db_name)

    def setup(self, db_name):
        """Setup connection to a database

        Args:
            db_name(str)
            db(pymongo.Database)
        """
        if self.client is None:
            raise SyntaxError("No client is available")
        if self.db is None:
            self.db = self.client[db_name]
            self.db_name = db_name
        LOG.info("Use database %s", self.db_name)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mongo_adapter-0.3.3.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

mongo_adapter-0.3.3-py3-none-any.whl (6.9 kB view details)

Uploaded Python 3

File details

Details for the file mongo_adapter-0.3.3.tar.gz.

File metadata

  • Download URL: mongo_adapter-0.3.3.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.8

File hashes

Hashes for mongo_adapter-0.3.3.tar.gz
Algorithm Hash digest
SHA256 6f33891881bfce55af9bb2370d7ae143094b936f0e3730cb551f2eaa8c28fe08
MD5 0f390cc4c22242369827ccacbddc3129
BLAKE2b-256 4d520c66cce3f99cddb4a24d45f0ea1b66d9099fcd530f2d7b9774a77d475a0d

See more details on using hashes here.

File details

Details for the file mongo_adapter-0.3.3-py3-none-any.whl.

File metadata

  • Download URL: mongo_adapter-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 6.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.8

File hashes

Hashes for mongo_adapter-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 3bb8009e4f702128a64127086e1c6ebff5cc062b2d97d138a58b05570ded04bc
MD5 670d12a2933c4b3e0ff35f6444f26db2
BLAKE2b-256 e80346b7fa76cd79f06ceef0b73a526dfe6b00534317a9dee029079dc441e7d2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page