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:
2019-12-05 19:53:20 +00:00
parent 517f88891f
commit bad0d0b26b
2 changed files with 10 additions and 19 deletions
+5 -4
View File
@@ -65,13 +65,13 @@ class RedisClient(object):
def Field(self, fieldname, type='string', length=None, default=None,
required=False, requires=None):
return None
return fieldname, type
def define_table(self, tablename, *fields, **args):
if not self.tablename:
self.tablename = MockTable(
self, self.r_server, tablename, self.session_expiry,
self.with_lock)
self.with_lock, fields=fields)
return self.tablename
def __getitem__(self, key):
@@ -88,7 +88,7 @@ class RedisClient(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
self.db = db
self.tablename = tablename
@@ -101,6 +101,7 @@ class MockTable(object):
# remember the session_expiry setting
self.session_expiry = session_expiry
self.with_lock = with_lock
self.fields = fields if fields is not None else []
def __call__(self, record_id, unique_key=None):
# Support DAL shortcut query: table(record_id)
@@ -182,7 +183,7 @@ class MockQuery(object):
key = self.keyprefix + ':' + str(self.value)
if self.with_lock:
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 self.unique_key:
# make sure the id and unique_key are correct
+5 -15
View File
@@ -52,27 +52,17 @@ class TestRedis(unittest.TestCase):
rconn = RConn(host='redis')
db = RedisSession(redis_conn=rconn, session_expiry=False)
tname = 'testtablename'
Field = db.Field
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'),
)
db.define_table(tname)
table = db[tname]
unique_key = web2py_uuid()
dd = dict(
locked=0,
client_ip=response.session_client,
modified_datetime=datetime.now,
modified_datetime=datetime.now().isoformat(),
unique_key=unique_key
)
record_id = table.insert(**dd)
data_from_db = db(table.id == record_id).select()
#print('data_from_db=', data_from_db)
self.assertDictEqual(dd, data_from_db)
data_from_db = db(table.id == record_id).select()[0]
print('data_from_db=', data_from_db)
self.assertDictEqual(Storage(dd), data_from_db)