From 2aa8439ae29c1607c636c58979cb4fe77d249a84 Mon Sep 17 00:00:00 2001 From: nimrod Date: Mon, 20 Aug 2018 12:34:26 +0300 Subject: [PATCH 1/3] During eval operation, results of redis operations returning dictionaries are now passed as lua tables instead of python lists --- fakeredis.py | 3 ++- test_fakeredis.py | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/fakeredis.py b/fakeredis.py index 901e19f..f1091da 100644 --- a/fakeredis.py +++ b/fakeredis.py @@ -856,11 +856,12 @@ def eval(self, script, numkeys, *keys_and_args): def _convert_redis_result(self, lua_runtime, result): if isinstance(result, dict): - return [ + converted = [ i for item in result.items() for i in item ] + return lua_runtime.table_from(converted) elif isinstance(result, set): converted = sorted( self._convert_redis_result(lua_runtime, item) diff --git a/test_fakeredis.py b/test_fakeredis.py index c99a876..0b8bc38 100644 --- a/test_fakeredis.py +++ b/test_fakeredis.py @@ -3337,6 +3337,22 @@ def test_eval_hgetall(self): [[b'k1', b'bar'], [b'k2', b'baz']] ) + def test_eval_hgetall_iterate(self): + self.redis.hset('foo', 'k1', 'bar') + self.redis.hset('foo', 'k2', 'baz') + lua = """ + local result = redis.call("hgetall", "foo") + for i, v in ipairs(result) do + end + return result + """ + val = self.redis.eval(lua, 0) + sorted_val = sorted([val[:2], val[2:]]) + self.assertEqual( + sorted_val, + [[b'k1', b'bar'], [b'k2', b'baz']] + ) + def test_eval_list_with_nil(self): self.redis.lpush('foo', 'bar') self.redis.lpush('foo', None) From 8be639fb8a2ca2db0f851b7f6141778c131926a8 Mon Sep 17 00:00:00 2001 From: nimrod Date: Mon, 20 Aug 2018 12:53:05 +0300 Subject: [PATCH 2/3] added key as argument to eval function in test_eval_hgetall_iterate to keep consistency with other tests --- test_fakeredis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_fakeredis.py b/test_fakeredis.py index 0b8bc38..2e7a47c 100644 --- a/test_fakeredis.py +++ b/test_fakeredis.py @@ -3346,7 +3346,7 @@ def test_eval_hgetall_iterate(self): end return result """ - val = self.redis.eval(lua, 0) + val = self.redis.eval(lua, 0, 'foo') sorted_val = sorted([val[:2], val[2:]]) self.assertEqual( sorted_val, From b46153467b5c500ff0a12f5f2804d7505aa63ab7 Mon Sep 17 00:00:00 2001 From: NimrodParasol Date: Tue, 21 Aug 2018 15:01:23 +0300 Subject: [PATCH 3/3] changed number of keys from 0 to 1 in the eval command in "test_eval_hgetall_iterate" --- test_fakeredis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_fakeredis.py b/test_fakeredis.py index 2e7a47c..8fb4ff5 100644 --- a/test_fakeredis.py +++ b/test_fakeredis.py @@ -3346,7 +3346,7 @@ def test_eval_hgetall_iterate(self): end return result """ - val = self.redis.eval(lua, 0, 'foo') + val = self.redis.eval(lua, 1, 'foo') sorted_val = sorted([val[:2], val[2:]]) self.assertEqual( sorted_val,