diff --git a/gluon/contrib/redis_session.py b/gluon/contrib/redis_session.py index 4ea11442..3c73bcf3 100644 --- a/gluon/contrib/redis_session.py +++ b/gluon/contrib/redis_session.py @@ -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 diff --git a/gluon/tests/test_redis.py b/gluon/tests/test_redis.py index 41f76441..7b6b65f8 100644 --- a/gluon/tests/test_redis.py +++ b/gluon/tests/test_redis.py @@ -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)