diff --git a/src/common/database/Factory.py b/src/common/database/Factory.py new file mode 100644 index 0000000000000000000000000000000000000000..9edd9ac251c69bf0efa28c52a888372443a32c25 --- /dev/null +++ b/src/common/database/Factory.py @@ -0,0 +1,31 @@ +import logging, os +from enum import Enum +from .inmemory.InMemoryDatabase import InMemoryDatabase +from .redis.RedisDatabase import RedisDatabase + +LOGGER = logging.getLogger(__name__) + +class DatabaseEngineEnum(Enum): + INMEMORY = 'inmemory' + REDIS = 'redis' + #MONGO = 'mongo' + #RETHINK = 'rethink' + #ETCD = 'etcd' + +ENGINES = { + DatabaseEngineEnum.INMEMORY.value: InMemoryDatabase, + DatabaseEngineEnum.REDIS.value: RedisDatabase, + #DatabaseEngineEnum.MONGO.value: MongoDatabase, + #DatabaseEngineEnum.RETHINK.value: RethinkDatabase, + #DatabaseEngineEnum.ETCD.value: EtcdDatabase, +} + +DEFAULT_DB_ENGINE = DatabaseEngineEnum.INMEMORY + +def get_database(engine=None, **parameters): + if engine is None: engine = os.environ.get('DB_ENGINE', DEFAULT_DB_ENGINE) + if(isinstance(engine, DatabaseEngineEnum)): engine = engine.value + LOGGER.info('Selected Database Engine: {}'.format(engine)) + engine_class = ENGINES.get(engine) + if engine_class is None: raise Exception('Unsupported Engine({})'.format(engine)) + return engine_class(**parameters)