Start new testing of redis_session and save redis session table information so we can recover data from redis in the native format.
This commit is contained in:
@@ -65,13 +65,13 @@ class RedisClient(object):
|
|||||||
|
|
||||||
def Field(self, fieldname, type='string', length=None, default=None,
|
def Field(self, fieldname, type='string', length=None, default=None,
|
||||||
required=False, requires=None):
|
required=False, requires=None):
|
||||||
return None
|
return fieldname, type
|
||||||
|
|
||||||
def define_table(self, tablename, *fields, **args):
|
def define_table(self, tablename, *fields, **args):
|
||||||
if not self.tablename:
|
if not self.tablename:
|
||||||
self.tablename = MockTable(
|
self.tablename = MockTable(
|
||||||
self, self.r_server, tablename, self.session_expiry,
|
self, self.r_server, tablename, self.session_expiry,
|
||||||
self.with_lock)
|
self.with_lock, fields=fields)
|
||||||
return self.tablename
|
return self.tablename
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
@@ -88,7 +88,7 @@ class RedisClient(object):
|
|||||||
|
|
||||||
class MockTable(object):
|
class MockTable(object):
|
||||||
|
|
||||||
def __init__(self, db, r_server, tablename, session_expiry, with_lock=False):
|
def __init__(self, db, r_server, tablename, session_expiry, with_lock=False, fields=None):
|
||||||
# here self.db is the RedisClient instance
|
# here self.db is the RedisClient instance
|
||||||
self.db = db
|
self.db = db
|
||||||
self.tablename = tablename
|
self.tablename = tablename
|
||||||
@@ -101,6 +101,7 @@ class MockTable(object):
|
|||||||
# remember the session_expiry setting
|
# remember the session_expiry setting
|
||||||
self.session_expiry = session_expiry
|
self.session_expiry = session_expiry
|
||||||
self.with_lock = with_lock
|
self.with_lock = with_lock
|
||||||
|
self.fields = fields if fields is not None else []
|
||||||
|
|
||||||
def __call__(self, record_id, unique_key=None):
|
def __call__(self, record_id, unique_key=None):
|
||||||
# Support DAL shortcut query: table(record_id)
|
# Support DAL shortcut query: table(record_id)
|
||||||
@@ -182,7 +183,7 @@ class MockQuery(object):
|
|||||||
key = self.keyprefix + ':' + str(self.value)
|
key = self.keyprefix + ':' + str(self.value)
|
||||||
if self.with_lock:
|
if self.with_lock:
|
||||||
acquire_lock(self.db.r_server, key + ':lock', self.value, 2)
|
acquire_lock(self.db.r_server, key + ':lock', self.value, 2)
|
||||||
rtn = {to_native(k.decode): v for k, v in self.db.r_server.hgetall(key).items()}
|
rtn = {to_native(k): v for k, v in self.db.r_server.hgetall(key).items()}
|
||||||
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
|
||||||
|
|||||||
@@ -52,27 +52,17 @@ class TestRedis(unittest.TestCase):
|
|||||||
rconn = RConn(host='redis')
|
rconn = RConn(host='redis')
|
||||||
db = RedisSession(redis_conn=rconn, session_expiry=False)
|
db = RedisSession(redis_conn=rconn, session_expiry=False)
|
||||||
tname = 'testtablename'
|
tname = 'testtablename'
|
||||||
Field = db.Field
|
db.define_table(tname)
|
||||||
db.define_table(
|
|
||||||
tname,
|
|
||||||
Field('locked', 'boolean', default=False),
|
|
||||||
Field('client_ip', length=64),
|
|
||||||
Field('created_datetime', 'datetime',
|
|
||||||
default=datetime.now),
|
|
||||||
Field('modified_datetime', 'datetime'),
|
|
||||||
Field('unique_key', length=64),
|
|
||||||
Field('session_data', 'blob'),
|
|
||||||
)
|
|
||||||
table = db[tname]
|
table = db[tname]
|
||||||
unique_key = web2py_uuid()
|
unique_key = web2py_uuid()
|
||||||
dd = dict(
|
dd = dict(
|
||||||
locked=0,
|
locked=0,
|
||||||
client_ip=response.session_client,
|
client_ip=response.session_client,
|
||||||
modified_datetime=datetime.now,
|
modified_datetime=datetime.now().isoformat(),
|
||||||
unique_key=unique_key
|
unique_key=unique_key
|
||||||
)
|
)
|
||||||
record_id = table.insert(**dd)
|
record_id = table.insert(**dd)
|
||||||
data_from_db = db(table.id == record_id).select()
|
data_from_db = db(table.id == record_id).select()[0]
|
||||||
#print('data_from_db=', data_from_db)
|
print('data_from_db=', data_from_db)
|
||||||
self.assertDictEqual(dd, data_from_db)
|
self.assertDictEqual(Storage(dd), data_from_db)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user