diff options
-rw-r--r-- | redis/client.py | 13 | ||||
-rw-r--r-- | tests/server_commands.py | 8 |
2 files changed, 19 insertions, 2 deletions
diff --git a/redis/client.py b/redis/client.py index 0cc3243..1274228 100644 --- a/redis/client.py +++ b/redis/client.py @@ -891,8 +891,17 @@ class Redis(threading.local): pieces.append(start) pieces.append(num) if get is not None: - pieces.append('GET') - pieces.append(get) + # If get is a string assume we want to get a single value. + # Otherwise assume it's an interable and we want to get multiple + # values. We can't just iterate blindly because strings are + # iterable. + if isinstance(get, basestring): + pieces.append('GET') + pieces.append(get) + else: + for g in get: + pieces.append('GET') + pieces.append(g) if desc: pieces.append('DESC') if alpha: diff --git a/tests/server_commands.py b/tests/server_commands.py index 9df004a..5455174 100644 --- a/tests/server_commands.py +++ b/tests/server_commands.py @@ -1071,6 +1071,14 @@ class ServerCommandsTestCase(unittest.TestCase): self.assertEquals(self.client.sort('a', get='user:*'), ['u1', 'u2', 'u3']) + def test_sort_get_multi(self): + self.client['user:1'] = 'u1' + self.client['user:2'] = 'u2' + self.client['user:3'] = 'u3' + self.make_list('a', '231') + self.assertEquals(self.client.sort('a', get=('user:*', '#')), + ['u1', '1', 'u2', '2', 'u3', '3']) + def test_sort_desc(self): self.make_list('a', '231') self.assertEquals(self.client.sort('a', desc=True), ['3', '2', '1']) |