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})
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")
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
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