fix redis sessions and redis for python3

This commit is contained in:
Radu Ioan Fericean
2018-04-14 14:33:37 +03:00
parent 90288a0134
commit 086bfb5851
4 changed files with 15 additions and 11 deletions
+2 -2
View File
@@ -10,7 +10,7 @@ except:
import time import time
import re import re
import logging import logging
import thread from threading import Lock
import random import random
from gluon import current from gluon import current
from gluon.cache import CacheAbstract from gluon.cache import CacheAbstract
@@ -19,7 +19,7 @@ from gluon.contrib.redis_utils import register_release_lock, RConnectionError
logger = logging.getLogger("web2py.cache.redis") logger = logging.getLogger("web2py.cache.redis")
locker = thread.allocate_lock() locker = Lock()
def RedisCache(redis_conn=None, debug=False, with_lock=False, fail_gracefully=False, db=None): def RedisCache(redis_conn=None, debug=False, with_lock=False, fail_gracefully=False, db=None):
+7 -5
View File
@@ -8,7 +8,7 @@ Redis-backed sessions
""" """
import logging import logging
import thread from threading import Lock
from gluon import current from gluon import current
from gluon.storage import Storage 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
@@ -16,7 +16,7 @@ from gluon.contrib.redis_utils import register_release_lock
logger = logging.getLogger("web2py.session.redis") logger = logging.getLogger("web2py.session.redis")
locker = thread.allocate_lock() locker = Lock()
def RedisSession(redis_conn, session_expiry=False, with_lock=False, db=None): def RedisSession(redis_conn, session_expiry=False, with_lock=False, db=None):
@@ -43,7 +43,7 @@ def RedisSession(redis_conn, session_expiry=False, with_lock=False, db=None):
try: try:
instance_name = 'redis_instance_' + current.request.application instance_name = 'redis_instance_' + current.request.application
if not hasattr(RedisSession, instance_name): if not hasattr(RedisSession, instance_name):
setattr(RedisSession, instance_name, setattr(RedisSession, instance_name,
RedisClient(redis_conn, session_expiry=session_expiry, with_lock=with_lock)) RedisClient(redis_conn, session_expiry=session_expiry, with_lock=with_lock))
return getattr(RedisSession, instance_name) return getattr(RedisSession, instance_name)
finally: finally:
@@ -185,8 +185,10 @@ class MockQuery(object):
if rtn: if rtn:
if self.unique_key: if self.unique_key:
# make sure the id and unique_key are correct # make sure the id and unique_key are correct
if rtn['unique_key'] == self.unique_key: if not isinstance(self.unique_key, bytes):
rtn['update_record'] = self.update # update record support self.unique_key = bytes(self.unique_key, 'utf8')
if rtn[b'unique_key'] == self.unique_key:
rtn[b'update_record'] = self.update # update record support
else: else:
rtn = None rtn = None
return [Storage(rtn)] if rtn else [] return [Storage(rtn)] if rtn else []
+2 -2
View File
@@ -11,7 +11,7 @@ to ensure compatibility with another - similar - library
""" """
import logging import logging
import thread from threading import Lock
import time import time
from gluon import current from gluon import current
@@ -26,7 +26,7 @@ except ImportError:
raise RuntimeError('Needs redis library to work') raise RuntimeError('Needs redis library to work')
locker = thread.allocate_lock() locker = Lock()
def RConn(*args, **vars): def RConn(*args, **vars):
+4 -2
View File
@@ -967,7 +967,7 @@ class Session(Storage):
if row: if row:
# rows[0].update_record(locked=True) # rows[0].update_record(locked=True)
# Unpickle the data # Unpickle the data
session_data = pickle.loads(row.session_data) session_data = pickle.loads(row[b'session_data'])
self.update(session_data) self.update(session_data)
response.session_new = False response.session_new = False
else: else:
@@ -1049,7 +1049,9 @@ class Session(Storage):
if record_id.isdigit() and long(record_id) > 0: if record_id.isdigit() and long(record_id) > 0:
new_unique_key = web2py_uuid() new_unique_key = web2py_uuid()
row = table(record_id) row = table(record_id)
if row and row.unique_key == unique_key: if not isinstance(unique_key, bytes):
unique_key = bytes(unique_key, 'utf8')
if row and row[b'unique_key'] == unique_key:
table._db(table.id == record_id).update(unique_key=new_unique_key) table._db(table.id == record_id).update(unique_key=new_unique_key)
else: else:
record_id = None record_id = None