Source code for scrapy_redis.connection
from scrapy.utils.misc import load_object
from . import defaults
# Shortcut maps 'setting name' -> 'parmater name'.
SETTINGS_PARAMS_MAP = {
"REDIS_URL": "url",
"REDIS_HOST": "host",
"REDIS_PORT": "port",
"REDIS_DB": "db",
"REDIS_ENCODING": "encoding",
}
SETTINGS_PARAMS_MAP["REDIS_DECODE_RESPONSES"] = "decode_responses"
[docs]
def get_redis_from_settings(settings):
"""Returns a redis client instance from given Scrapy settings object.
This function uses ``get_client`` to instantiate the client and uses
``defaults.REDIS_PARAMS`` global as defaults values for the parameters. You
can override them using the ``REDIS_PARAMS`` setting.
Parameters
----------
settings : Settings
A scrapy settings object. See the supported settings below.
Returns
-------
server
Redis client instance.
Other Parameters
----------------
REDIS_URL : str, optional
Server connection URL.
REDIS_HOST : str, optional
Server host.
REDIS_PORT : str, optional
Server port.
REDIS_DB : int, optional
Server database
REDIS_ENCODING : str, optional
Data encoding.
REDIS_PARAMS : dict, optional
Additional client parameters.
Python 3 Only
----------------
REDIS_DECODE_RESPONSES : bool, optional
Sets the `decode_responses` kwarg in Redis cls ctor
"""
params = defaults.REDIS_PARAMS.copy()
params.update(settings.getdict("REDIS_PARAMS"))
# XXX: Deprecate REDIS_* settings.
for source, dest in SETTINGS_PARAMS_MAP.items():
val = settings.get(source)
if val:
params[dest] = val
# Allow ``redis_cls`` to be a path to a class.
if isinstance(params.get("redis_cls"), str):
params["redis_cls"] = load_object(params["redis_cls"])
return get_redis(**params)
# Backwards compatible alias.
from_settings = get_redis_from_settings
[docs]
def get_redis(**kwargs):
"""Returns a redis client instance.
Parameters
----------
redis_cls : class, optional
Defaults to ``redis.StrictRedis``.
url : str, optional
If given, ``redis_cls.from_url`` is used to instantiate the class.
**kwargs
Extra parameters to be passed to the ``redis_cls`` class.
Returns
-------
server
Redis client instance.
"""
redis_cls = kwargs.pop("redis_cls", defaults.REDIS_CLS)
url = kwargs.pop("url", None)
if url:
return redis_cls.from_url(url, **kwargs)
else:
return redis_cls(**kwargs)