#!/usr/bin/env python from dm.common.exceptions.dmException import DmException from dm.common.utility.loggingManager import LoggingManager from dm.common.mongodb.impl.mongoDbManager import MongoDbManager class DmMongoDbApi: """ Base Mongo DB API class. """ def __init__(self): self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__) self.dbClient = MongoDbManager.getInstance().getDbClient() # Decorator for all DB methods @classmethod def executeDbCall(cls, func): def dbCall(*args, **kwargs): try: try: return func(*args, **kwargs) except DmException, ex: raise except Exception, ex: cls.getLogger().exception('%s' % ex) raise DmException(exception=ex) finally: # For now, do nothing pass return dbCall @classmethod def getLogger(cls): logger = LoggingManager.getInstance().getLogger(cls.__name__) return logger @classmethod def listToDmObjects(cls, mongoDbObjectList, dmObjectClass): dmObjectList = [] for o in mongoDbObjectList: dmObjectList.append(cls.toDmObject(o, dmObjectClass)) return dmObjectList @classmethod def toDmObject(cls, mongoDbObject, dmObjectClass): cls.scrubMongoDbObject(mongoDbObject) return dmObjectClass(mongoDbObject) @classmethod def scrubMongoDbObject(cls, mongoDbObject): for key in ['_id']: if mongoDbObject.has_key(key): # Remove leading underscore newKey = key[1:] mongoDbObject[newKey] = str(mongoDbObject[key]) del mongoDbObject[key] ####################################################################### # Testing. if __name__ == '__main__': api = DmMongoDbApi()