#!/usr/bin/env python import threading import os.path import sqlalchemy from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import mapper from sqlalchemy.orm import relationship from dm.common.exceptions.commandFailed import CommandFailed from dm.common.exceptions.configurationError import ConfigurationError from dm.common.utility.loggingManager import LoggingManager from dm.common.utility.configurationManager import ConfigurationManager from dmMongoClient import DmMongoClient class MongoDbManager: """ Singleton class for mongo db management. """ CONFIG_SECTION_NAME = 'MongoDbManager' MONGO_DB_NAME_KEY = 'mongoDbName' MONGO_DB_USER_KEY = 'mongoDbUser' MONGO_DB_URI_KEY = 'mongoDbUri' MONGO_DB_PASSWORD_FILE_KEY = 'mongoDbPasswordFile' CONFIG_OPTION_NAME_LIST = [ 'dbName', 'dbUser', 'dbPasswordFile' ] # Singleton. __lock = threading.RLock() __instance = None @classmethod def getInstance(cls): from dm.common.mongodb.impl.mongoDbManager import MongoDbManager try: mgr = MongoDbManager() except MongoDbManager, ex: mgr = ex return mgr def __init__(self): MongoDbManager.__lock.acquire() try: if MongoDbManager.__instance is not None: raise MongoDbManager.__instance MongoDbManager.__instance = self self.lock = threading.RLock() self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__) cm = ConfigurationManager.getInstance() self.dbName = cm.getConfigOption(MongoDbManager.CONFIG_SECTION_NAME, MongoDbManager.MONGO_DB_NAME_KEY) self.logger.debug('Mongo DB name: %s' % self.dbName) self.dbUri = cm.getConfigOption(MongoDbManager.CONFIG_SECTION_NAME, MongoDbManager.MONGO_DB_URI_KEY) self.logger.debug('Mongo DB URI: %s' % self.dbUri) self.dbUser = cm.getConfigOption(MongoDbManager.CONFIG_SECTION_NAME, MongoDbManager.MONGO_DB_USER_KEY) self.logger.debug('Mongo DB user: %s' % self.dbUser) self.dbPasswordFile = cm.getConfigOption(MongoDbManager.CONFIG_SECTION_NAME, MongoDbManager.MONGO_DB_PASSWORD_FILE_KEY) self.logger.debug('Mongo DB password file: %s' % self.dbPasswordFile) #dbPassword = open(dbPasswordFile, 'r').readline().strip() finally: MongoDbManager.__lock.release() def getLogger(self): return self.logger def getDbClient(self): return DmMongoClient(self.dbName, self.dbUri) ####################################################################### # Testing. if __name__ == '__main__': ConfigurationManager.getInstance().setConsoleLogLevel('debug') mgr = MongoDbManager.getInstance()