def test_unsupported_url_scheme(self):
     with self.assertRaisesRegexp(
             ValueError, r'Unsupported redis URL scheme: redis\+something'):
         connect('redis+something://hostname:7001/myslave/3?slave=true',
                 client_class=FakeRedis,
                 sentinel_class=FakeSentinel,
                 client_options={'decode_responses': True})
Example #2
0
    def connect_redis(self):
        self.logger.debug("Connecting to redis...")

        redis_url = self.app.config["REDIS_URL"]
        self.logger.info("Configuring Redis...", redis_url=redis_url)
        sentinel, client = redis_sentinel_url.connect(redis_url)
        self.app.sentinel = sentinel
        self.app.redis = client
        self.logger.info("Connection to redis successful")
Example #3
0
 def _connect(self):
     try:
         return self.local.connection
     except AttributeError:
         conn = redis_sentinel_url.connect(
             self.url,
             sentinel_class=self.sentinel_class, sentinel_options=self.sentinel_options,
             client_class=self.client_class, client_options=self.client_options)
         self.local.connection = conn
         return conn
Example #4
0
def init_redis():
    logger.debug("Creating Redis connection (%s)", config.REDIS_URL)
    max_connections = config.REDIS_POOL_SIZE
    client_options = {
        "retry_on_timeout": True,
        "decode_responses": True,
        "socket_keepalive": True,
        "max_connections": max_connections
    }

    sentinel, client = redis_sentinel_url.connect(
        config.REDIS_URL, client_options=client_options)
    return client
    def test_default_client_sentinel_url_master(self):
        sentinel, client = connect('redis+sentinel://hostname:7001/mymaster/3',
                                   client_class=FakeRedis,
                                   sentinel_class=FakeSentinel,
                                   client_options={'decode_responses': True},
                                   sentinel_options={'connect_timeout': 0.3})

        self.assertIsNotNone(sentinel)
        self.assertEquals(sentinel.sentinel_kwargs['connect_timeout'], 0.3)

        self.assertEqual(client.kwargs['is_master'], True)
        self.assertEqual(client.kwargs['service_name'], 'mymaster')
        self.assertEqual(client.kwargs['connection_kwargs']['db'], 3)
        self.assertEqual(
            client.kwargs['connection_kwargs']['decode_responses'], True)
    def init_app(self, app, config_prefix=None, client_class=None, sentinel_class=None):
        if _EXTENSION_KEY not in app.extensions:
            app.extensions[_EXTENSION_KEY] = {}

        extensions = app.extensions[_EXTENSION_KEY]

        if config_prefix is None:
            config_prefix = 'REDIS'

        if config_prefix in extensions:
            raise ValueError('Config prefix {} already registered'.format(config_prefix))

        self.config_prefix = config_prefix

        config = _PrefixedDict(app.config, config_prefix)
        url = config.get('URL')

        client_class = self._resolve_class(config, 'CLASS', client_class, 'client_class',
                                           default=redis.StrictRedis)
        sentinel_class = self._resolve_class(config, 'SENTINEL_CLASS', sentinel_class, 'sentinel_class',
                                             default=redis.sentinel.Sentinel)

        data = _ExtensionData(client_class)

        if url:
            connection_options = self._config_from_variables(config, client_class)
            sentinel_options = self._config_from_variables(_PrefixedDict(config, 'SENTINEL'), client_class)

            connection_options.pop('host', None)
            connection_options.pop('port', None)
            connection_options.pop('db', None)

            result = redis_sentinel_url.connect(url, sentinel_class=sentinel_class,
                                                sentinel_options=sentinel_options,
                                                client_class=client_class,
                                                client_options=connection_options)
            data.sentinel, data.default_connection = result
        else:
            # Stay compatible with Flask-And-Redis for a while
            warnings.warn('Setting redis connection via separate variables is deprecated. Please use REDIS_URL.',
                          DeprecationWarning)
            kwargs = self._config_from_variables(config, client_class)
            data.default_connection = client_class(**kwargs)

        extensions[config_prefix] = data
 def test_default_client_redis_url(self):
     sentinel, client = connect('redis://hostname:7001/3',
                                client_class=FakeRedis)
     self.assertEqual(client.kwargs['url'], 'redis://hostname:7001/3')
    def init_app(self,
                 app,
                 config_prefix=None,
                 client_class=None,
                 sentinel_class=None):
        if _EXTENSION_KEY not in app.extensions:
            app.extensions[_EXTENSION_KEY] = {}

        extensions = app.extensions[_EXTENSION_KEY]

        if config_prefix is None:
            config_prefix = 'REDIS'

        if config_prefix in extensions:
            raise ValueError(
                'Config prefix {} already registered'.format(config_prefix))

        self.config_prefix = config_prefix

        config = _PrefixedDict(app.config, config_prefix)
        url = config.get('URL')

        client_class = self._resolve_class(config,
                                           'CLASS',
                                           client_class,
                                           'client_class',
                                           default=redis.StrictRedis)
        sentinel_class = self._resolve_class(config,
                                             'SENTINEL_CLASS',
                                             sentinel_class,
                                             'sentinel_class',
                                             default=redis.sentinel.Sentinel)

        data = _ExtensionData(client_class)

        if url:
            connection_options = self._config_from_variables(
                config, client_class)
            sentinel_options = self._config_from_variables(
                _PrefixedDict(config, 'SENTINEL'), client_class)

            connection_options.pop('host', None)
            connection_options.pop('port', None)
            connection_options.pop('db', None)

            result = redis_sentinel_url.connect(
                url,
                sentinel_class=sentinel_class,
                sentinel_options=sentinel_options,
                client_class=client_class,
                client_options=connection_options)
            data.sentinel, data.default_connection = result
        else:
            # Stay compatible with Flask-And-Redis for a while
            warnings.warn(
                'Setting redis connection via separate variables is deprecated. Please use REDIS_URL.',
                DeprecationWarning)
            kwargs = self._config_from_variables(config, client_class)
            data.default_connection = client_class(**kwargs)

        extensions[config_prefix] = data