2020-11-22 22:07:36 +00:00
|
|
|
import urllib.parse as urlparse
|
2018-02-20 14:34:14 +00:00
|
|
|
|
2015-01-01 17:51:46 +00:00
|
|
|
import redis
|
2019-11-15 18:22:14 +00:00
|
|
|
|
2020-11-22 22:07:36 +00:00
|
|
|
from django.core.cache import caches
|
|
|
|
|
from django.core.cache.backends.base import InvalidCacheBackendError
|
2015-01-01 17:51:46 +00:00
|
|
|
|
|
|
|
|
from . import config
|
|
|
|
|
|
|
|
|
|
# Register database schemes in URLs.
|
|
|
|
|
urlparse.uses_netloc.append("redis")
|
|
|
|
|
|
2019-11-15 18:22:14 +00:00
|
|
|
INVALID_CACHE_ERROR_MSG = "The cache {} was not found on the django cache" " settings."
|
2015-01-08 20:56:33 +00:00
|
|
|
|
|
|
|
|
|
2015-01-01 17:51:46 +00:00
|
|
|
def get_redis_connection():
|
2015-01-08 20:56:33 +00:00
|
|
|
""" Get the redis connection if not using mock """
|
|
|
|
|
if config.MOCK_REDIS: # pragma: no cover
|
2018-02-20 14:34:14 +00:00
|
|
|
import mockredis
|
2019-11-15 18:22:14 +00:00
|
|
|
|
2018-02-20 14:34:14 +00:00
|
|
|
return mockredis.mock_strict_redis_client() # pragma: no cover
|
2017-06-24 23:17:15 +00:00
|
|
|
elif config.DEFENDER_REDIS_NAME: # pragma: no cover
|
|
|
|
|
try:
|
|
|
|
|
cache = caches[config.DEFENDER_REDIS_NAME]
|
|
|
|
|
except InvalidCacheBackendError:
|
2019-11-15 18:22:14 +00:00
|
|
|
raise KeyError(INVALID_CACHE_ERROR_MSG.format(config.DEFENDER_REDIS_NAME))
|
2017-06-24 23:17:15 +00:00
|
|
|
# every redis backend implement it own way to get the low level client
|
|
|
|
|
try:
|
|
|
|
|
# redis_cache.RedisCache case (django-redis-cache package)
|
|
|
|
|
return cache.get_master_client()
|
|
|
|
|
except AttributeError:
|
|
|
|
|
# django_redis.cache.RedisCache case (django-redis package)
|
2017-10-27 13:38:11 +00:00
|
|
|
return cache.client.get_client(True)
|
2023-10-12 17:20:58 +00:00
|
|
|
else: # pragma: no cover)
|
|
|
|
|
return redis.StrictRedis.from_url(config.DEFENDER_REDIS_URL)
|