summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandy <andy@whiskeymedia.com>2012-08-14 14:34:23 -0700
committerandy <andy@whiskeymedia.com>2012-08-14 14:34:23 -0700
commitcdebbd48771f49a7cdf68823dcfc487ea15141cf (patch)
tree9a1bf424b9fa662c922b1050d708a75dd0455337
parent937f8e4dfecc838afcc208a86c5d5139b33626fd (diff)
parenta378cdb91fbf3909b67748bc18a12f0dbbcaacf5 (diff)
downloadredis-py-cdebbd48771f49a7cdf68823dcfc487ea15141cf.tar.gz
Merge remote-tracking branch 'jparise/cls-from_url'
Conflicts: redis/client.py redis/utils.py
-rw-r--r--redis/client.py33
-rw-r--r--redis/utils.py26
2 files changed, 33 insertions, 26 deletions
diff --git a/redis/client.py b/redis/client.py
index db8213f..83a8bd3 100644
--- a/redis/client.py
+++ b/redis/client.py
@@ -3,9 +3,8 @@ from itertools import starmap
import datetime
import time
import warnings
-
from redis._compat import (b, izip, imap, iteritems, dictkeys, dictvalues,
- basestring, long, nativestr)
+ basestring, long, nativestr, urlparse)
from redis.connection import ConnectionPool, UnixDomainSocketConnection
from redis.exceptions import (
ConnectionError,
@@ -205,6 +204,36 @@ class StrictRedis(object):
}
)
+ @classmethod
+ def from_url(cls, url, db=None, **kwargs):
+ """
+ Return a Redis client object configured from the given URL.
+
+ For example::
+
+ redis://username:password@localhost:6379/0
+
+ If ``db`` is None, this method will attempt to extract the database ID
+ from the URL path component.
+
+ Any additional keyword arguments will be passed along to the Redis
+ class's initializer.
+ """
+ url = urlparse(url)
+
+ # We only support redis:// schemes.
+ assert url.scheme == 'redis' or not url.scheme
+
+ # Extract the database ID from the path component if hasn't been given.
+ if db is None:
+ try:
+ db = int(url.path.replace('/', ''))
+ except (AttributeError, ValueError):
+ db = 0
+
+ return cls(host=url.hostname, port=url.port, db=db,
+ password=url.password, **kwargs)
+
def __init__(self, host='localhost', port=6379,
db=0, password=None, socket_timeout=None,
connection_pool=None, charset='utf-8',
diff --git a/redis/utils.py b/redis/utils.py
index a9fe83b..20cef6c 100644
--- a/redis/utils.py
+++ b/redis/utils.py
@@ -1,31 +1,9 @@
from redis.client import Redis
-from redis._compat import urlparse
-DEFAULT_DATABASE_ID = 0
-
-
-def from_url(url, db=None):
+def from_url(url, db=None, **kwargs):
"""Returns an active Redis client generated from the given database URL.
Will attempt to extract the database id from the path url fragment, if
none is provided.
"""
-
- url = urlparse(url)
-
- # Make sure it's a redis database.
- if url.scheme:
- assert url.scheme == 'redis'
-
- # Attempt to resolve database id.
- if db is None:
- try:
- db = int(url.path.replace('/', ''))
- except (AttributeError, ValueError):
- db = DEFAULT_DATABASE_ID
-
- return Redis(
- host=url.hostname,
- port=url.port,
- db=db,
- password=url.password)
+ return Redis.from_url(url, db, **kwargs)