From 392aba2a62a93c7d15fc0617c0147eb514ef0fb1 Mon Sep 17 00:00:00 2001 From: Deepankar Mahapatro Date: Fri, 11 Sep 2020 02:02:55 +0530 Subject: [PATCH] feat(bookkeeping): added mongodbhandler --- jina/docker/database.py | 56 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 jina/docker/database.py diff --git a/jina/docker/database.py b/jina/docker/database.py new file mode 100644 index 0000000000000..c456521f8241e --- /dev/null +++ b/jina/docker/database.py @@ -0,0 +1,56 @@ + +import pymongo + +from ..excepts import MongoDBException +from ..logging import get_logger + + +class MongoDBHandler(): + """ + Mongodb Handler to connect to the database & insert documents in the collection + """ + def __init__(self, hostname: str, username: int, password: str, + database_name: str, collection_name: str): + self.logger = get_logger(self.__class__.__name__) + self.hostname = hostname + self.username = username + self.password = password + self.database_name = database_name + self.collection_name = collection_name + self.connection_string = \ + f'mongodb+srv://{self.username}:{self.password}@{self.hostname}' + + def __enter__(self): + return self.connect() + + def connect(self): + try: + self.client = pymongo.MongoClient(self.connection_string) + self.client.admin.command('ismaster') + self.logger.info('Successfully connected to the database') + except pymongo.errors.ConnectionFailure: + raise MongoDBException("Database server is not available") + except pymongo.errors.ConfigurationError: + raise MongoDBException("Credentials passed are not correct!") + except pymongo.errors.PyMongoError as exp: + raise MongoDBException(exp) + return self + + @property + def database(self): + return self.client[self.database_name] + + @property + def collection(self): + return self.database[self.collection_name] + + def insert(self, document: str): + result = self.collection.insert_one(document) + self.logger.info(f'Pushed current summary to the database') + return result.inserted_id + + def __exit__(self, exc_type, exc_val, exc_tb): + try: + self.client.close() + except pymongo.errors.PyMongoError as exp: + raise MongoDBException(exp)