max-k/flask-multi-redis

View on GitHub
flask_multi_redis/redis_node.py

Summary

Maintainability
A
35 mins
Test Coverage
# -*- coding: utf-8 -*-

"""flask-multi-redis redis_node module."""


class RedisNode(object):

    """Define a Redis node and its configuration."""

    def __init__(self, provider_class, config, **kwargs):
        """Initialize RedisNode."""
        self.config = {}
        self._ssl = None
        self.provider_class = provider_class
        self._parse_conf(config)
        self._parse_ssl_conf(config)
        self.config.update(kwargs)
        self._redis_client = self.provider_class(**self.config)

    def _parse_conf(self, config):
        assert 'host' in config['node']

        self.config['host'] = config['node']['host']
        for element in ['port', 'db', 'password', 'socket_timeout']:
            self.config[element] = config['default'][element]

            if element in config['node']:
                self.config[element] = config['node'][element]

    def _parse_ssl_conf(self, config):
        self.config['ssl'] = False

        if 'ssl' in config['default']:
            self.config['ssl'] = True
            self._ssl = config['default']['ssl']
        if 'ssl' in config['node']:
            if not self._ssl:
                self._ssl = {}
            for key in config['node']['ssl']:
                self._ssl[key] = config['node']['ssl'][key]
        if self._ssl:
            self.config.update(self._ssl)

    def __getattr__(self, name):
        return getattr(self._redis_client, name)