Select Git revision

Lluis Gifre Renom authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Factory.py 1.51 KiB
import logging, os
from enum import Enum
from .api.Database import Database
from .engines.inmemory.InMemoryDatabaseEngine import InMemoryDatabaseEngine
from .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))