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,
|
||||
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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user