From 52d43c71e1f623c18d2fedfcea30570cbee788c3 Mon Sep 17 00:00:00 2001 From: Anentropic Date: Sun, 11 Oct 2015 21:01:26 +0100 Subject: [PATCH] allow to specify main redis conenction params in url form --- docs/django.rst | 2 ++ huey/backends/redis_backend.py | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/docs/django.rst b/docs/django.rst index c5d27d49..db3bee98 100644 --- a/docs/django.rst +++ b/docs/django.rst @@ -37,6 +37,8 @@ Using redis 'backend': 'huey.backends.redis_backend', # required. 'name': 'unique name', 'connection': {'host': 'localhost', 'port': 6379}, + # or by url: + # 'connection': {'url': 'redis://localhost/1'} 'always_eager': False, # Defaults to False when running via manage.py run_huey # Options to pass into the consumer when running ``manage.py run_huey`` diff --git a/huey/backends/redis_backend.py b/huey/backends/redis_backend.py index e92ab131..57ed581d 100644 --- a/huey/backends/redis_backend.py +++ b/huey/backends/redis_backend.py @@ -15,6 +15,15 @@ def clean_name(name): return re.sub('[^a-z0-9]', '', name) +def get_connection(**config): + try: + url = config.pop('url') + except KeyError: + return redis.Redis(**config) + else: + return redis.Redis.from_url(url, **config) + + class RedisQueue(BaseQueue): """ A simple Queue that uses the redis to store messages @@ -30,7 +39,7 @@ def __init__(self, name, **connection): super(RedisQueue, self).__init__(name, **connection) self.queue_name = 'huey.redis.%s' % clean_name(name) - self.conn = redis.Redis(**connection) + self.conn = get_connection(**connection) def write(self, data): self.conn.lpush(self.queue_name, data) @@ -95,7 +104,7 @@ def __init__(self, name, **connection): super(RedisSchedule, self).__init__(name, **connection) self.key = 'huey.schedule.%s' % clean_name(name) - self.conn = redis.Redis(**connection) + self.conn = get_connection(**connection) self._pop = self.conn.register_script(SCHEDULE_POP_LUA) def convert_ts(self, ts): @@ -120,7 +129,7 @@ def __init__(self, name, **connection): super(RedisDataStore, self).__init__(name, **connection) self.storage_name = 'huey.results.%s' % clean_name(name) - self.conn = redis.Redis(**connection) + self.conn = get_connection(**connection) def put(self, key, value): self.conn.hset(self.storage_name, key, value) @@ -143,7 +152,7 @@ def flush(self): class RedisEventEmitter(BaseEventEmitter): def __init__(self, channel, **connection): super(RedisEventEmitter, self).__init__(channel, **connection) - self.conn = redis.Redis(**connection) + self.conn = get_connection(**connection) def emit(self, message): self.conn.publish(self.channel, message)