django-defender/defender/connection.py

36 lines
1.3 KiB
Python
Raw Permalink Normal View History

2020-11-22 22:07:36 +00:00
import urllib.parse as urlparse
2015-01-01 17:51:46 +00:00
import redis
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")
INVALID_CACHE_ERROR_MSG = "The cache {} was not found on the django cache" " settings."
2015-01-01 17:51:46 +00:00
def get_redis_connection():
""" Get the redis connection if not using mock """
if config.MOCK_REDIS: # pragma: no cover
import mockredis
return mockredis.mock_strict_redis_client() # pragma: no cover
elif config.DEFENDER_REDIS_NAME: # pragma: no cover
try:
cache = caches[config.DEFENDER_REDIS_NAME]
except InvalidCacheBackendError:
raise KeyError(INVALID_CACHE_ERROR_MSG.format(config.DEFENDER_REDIS_NAME))
# 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)
return cache.client.get_client(True)
else: # pragma: no cover)
return redis.StrictRedis.from_url(config.DEFENDER_REDIS_URL)