import logging, os from enum import Enum from common.database.api.Database import Database from common.database.engines.inmemory.InMemoryDatabaseEngine import InMemoryDatabaseEngine from common.database.engines.redis.RedisDatabaseEngine import RedisDatabaseEngine LOGGER = logging.getLogger(__name__) class DatabaseEngineEnum(Enum): INMEMORY = 'inmemory' REDIS = 'redis' #MONGO = 'mongo' #RETHINK = 'rethink' #ETCD = 'etcd' ENGINES = { DatabaseEngineEnum.INMEMORY.value: InMemoryDatabaseEngine, DatabaseEngineEnum.REDIS.value: RedisDatabaseEngine, #DatabaseEngineEnum.MONGO.value: MongoDatabase, #DatabaseEngineEnum.RETHINK.value: RethinkDatabase, #DatabaseEngineEnum.ETCD.value: EtcdDatabase, } DEFAULT_DB_ENGINE = DatabaseEngineEnum.INMEMORY def get_database(engine=None, **settings) -> Database: # return an instance of Database initialized with selected engine. # Engine is selected using following criteria (first that is not None is selected): # 1. user selected by parameter (engine=...) # 2. environment variable DB_ENGINE # 3. default engine: INMEMORY if engine is None: engine = os.environ.get('DB_ENGINE', DEFAULT_DB_ENGINE) if engine is None: raise Exception('Database Engine not specified') if isinstance(engine, DatabaseEngineEnum): engine = engine.value engine_class = ENGINES.get(engine) if engine_class is None: raise Exception('Unsupported DatabaseEngine({})'.format(engine)) LOGGER.info('Selected Database Engine: {}'.format(engine)) return Database(engine_class(**settings))