diff --git a/CHANGELOG b/CHANGELOG index f684e667..039ae29b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,5 @@ -## trunk +## 2.14.1 + - new JWT implementation (experimental) - new gluon.contrib.redis_scheduler - BREAKING: changes to gluon.contrib.redis_cache @@ -27,7 +28,7 @@ session.connect(request, response, db = sessiondb) -## 2.13.1-2 +## 2.13.* - fixed a security issue in request_reset_password - added fabfile.py diff --git a/gluon/contrib/redis_cache.py b/gluon/contrib/redis_cache.py index fecc6d66..05d740ae 100644 --- a/gluon/contrib/redis_cache.py +++ b/gluon/contrib/redis_cache.py @@ -15,14 +15,14 @@ import random from gluon import current from gluon.cache import CacheAbstract from gluon.contrib.redis_utils import acquire_lock, release_lock -from gluon.contrib.redis_utils import register_release_lock, RConnectionError +from gluon.contrib.redis_utils import register_release_lock, RConnectionError, RConn logger = logging.getLogger("web2py.cache.redis") locker = thread.allocate_lock() -def RedisCache(*args, **vars): +def RedisCache(redis_conn=None, debug=False, with_lock=False, fail_gracefully=False, db=None): """ Usage example: put in models:: @@ -81,11 +81,18 @@ def RedisCache(*args, **vars): - we scan the keys and then delete them """ + # for backward compatibility + if isinstance(redis_conn, str): + host, port = redis_conn.split(':') + redis_conn = RConn(host=host, port=int(port), db=db) + locker.acquire() try: instance_name = 'redis_instance_' + current.request.application if not hasattr(RedisCache, instance_name): - setattr(RedisCache, instance_name, RedisClient(*args, **vars)) + setattr(RedisCache, instance_name, + RedisClient(redis_conn=redis_conn, debug=debug, + with_lock=with_lock, fail_gracefully=fail_gracefully)) return getattr(RedisCache, instance_name) finally: locker.release() diff --git a/gluon/contrib/redis_session.py b/gluon/contrib/redis_session.py index d87a8260..a26745c5 100644 --- a/gluon/contrib/redis_session.py +++ b/gluon/contrib/redis_session.py @@ -11,7 +11,7 @@ import logging import thread from gluon import current from gluon.storage import Storage -from gluon.contrib.redis_utils import acquire_lock, release_lock +from gluon.contrib.redis_utils import acquire_lock, release_lock, RConn from gluon.contrib.redis_utils import register_release_lock logger = logging.getLogger("web2py.session.redis") @@ -19,7 +19,7 @@ logger = logging.getLogger("web2py.session.redis") locker = thread.allocate_lock() -def RedisSession(*args, **vars): +def RedisSession(redis_conn, session_expiry=False, with_lock=False, db=None): """ Usage example: put in models:: @@ -39,11 +39,17 @@ def RedisSession(*args, **vars): Simple slip-in storage for session """ + # for backward compatibility + if isinstance(redis_conn, str): + host, port = redis_conn.split(':') + redis_conn = RConn(host=host, port=int(port), db=db) + locker.acquire() try: instance_name = 'redis_instance_' + current.request.application if not hasattr(RedisSession, instance_name): - setattr(RedisSession, instance_name, RedisClient(*args, **vars)) + setattr(RedisSession, instance_name, + RedisClient(redis_conn, session_expiry=session_expiry, with_lock=with_lock)) return getattr(RedisSession, instance_name) finally: locker.release()