diff options
author | Roey Prat <roey.prat@redislabs.com> | 2018-10-28 09:31:48 +0200 |
---|---|---|
committer | Roey Prat <roey.prat@redislabs.com> | 2018-10-28 14:13:42 +0200 |
commit | 9984fa9cbaea7d6380df090dfdc036042948dad1 (patch) | |
tree | 0ea6abebc37788559c33f59258b5bf43a13200c7 | |
parent | 3d24b463dc44d74dec30cffc4c5a23c566975cea (diff) | |
download | redis-py-9984fa9cbaea7d6380df090dfdc036042948dad1.tar.gz |
XADD key/value pairs of the entry should be specified as a single dict arg rather than kwargs
-rwxr-xr-x | redis/client.py | 8 | ||||
-rw-r--r-- | tests/test_commands.py | 28 |
2 files changed, 19 insertions, 17 deletions
diff --git a/redis/client.py b/redis/client.py index a69b847..5ee99fa 100755 --- a/redis/client.py +++ b/redis/client.py @@ -1750,15 +1750,15 @@ class StrictRedis(object): return self.execute_command('SUNIONSTORE', dest, *args) # STREAMS COMMANDS - def xadd(self, _name, id='*', maxlen=None, approximate=True, **kwargs): + def xadd(self, _name, fields, id='*', maxlen=None, approximate=True): """ Add to a stream. _name: name of the stream (not using 'name' as this would prevent 'name' used in the kwargs + fields: dict of field/value pairs to insert into the stream id: Location to insert this record. By default it is appended. maxlen: truncate old stream members beyond this size approximate: actual stream length may be slightly more than maxlen - **kwargs: key/value pairs to insert into the stream """ pieces = [] @@ -1770,7 +1770,9 @@ class StrictRedis(object): pieces.append('~') pieces.append(str(maxlen)) pieces.append(id) - for pair in iteritems(kwargs): + if not isinstance(fields, dict) or len(fields) == 0: + raise RedisError('XADD fields must be a non-empty dict') + for pair in iteritems(fields): pieces.append(pair[0]) pieces.append(pair[1]) return self.execute_command('XADD', _name, *pieces) diff --git a/tests/test_commands.py b/tests/test_commands.py index 4964e78..70dcbfa 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -1608,18 +1608,18 @@ class TestStrictCommands(object): varname = 'xrange_test' sr.delete(varname) assert sr.xlen(varname) == 0 - stamp1 = sr.xadd(varname, name="bar", other="rab", maxlen=4) + stamp1 = sr.xadd(varname, {"name": "bar", "other": "rab"}, maxlen=4) assert sr.xlen(varname) == 1 - stamp2 = sr.xadd(varname, name="baz", other="zab") + stamp2 = sr.xadd(varname, {"name": "baz", "other": "zab"}) assert sr.xlen(varname) == 2 assert stamp1 != stamp2 milli, offset = stamp2.decode('utf-8').split('-') new_id = "{0}-0".format(int(milli) + 10000).encode('utf-8') - stamp3 = sr.xadd(varname, id=new_id, foo="bar") + stamp3 = sr.xadd(varname, {"foo": "bar"}, id=new_id) assert sr.xlen(varname) == 3 assert stamp3 == new_id - stamp4 = sr.xadd(varname, foo="baz") + stamp4 = sr.xadd(varname, {"foo": "baz"}) assert sr.xlen(varname) == 4 def get_ids(results): @@ -1655,15 +1655,15 @@ class TestStrictCommands(object): def test_strict_xread(self, sr): varname = 'xread_test' sr.delete(varname) - stamp1 = sr.xadd(varname, name="bar", other="rab", maxlen=4) - stamp2 = sr.xadd(varname, name="baz", other="zab") + stamp1 = sr.xadd(varname, {"name": "bar", "other": "rab"}, maxlen=4) + stamp2 = sr.xadd(varname, {"name": "baz", "other": "zab"}) assert stamp1 != stamp2 results = sr.xread(varname='$', count=10, block=10) assert results is None results = sr.xread(count=3, block=0, **{varname: stamp1}) - assert results[varname][0][0] == stamp2 + assert results[0][1][0][0] == stamp2 @skip_if_server_version_lt('5.0.0') def test_strict_xgroup(self, sr): @@ -1673,7 +1673,7 @@ class TestStrictCommands(object): message = {'name': 'boaty', 'other': 'mcboatface'} b_message = {b('name'): b('boaty'), b('other'): b('mcboatface')} - stamp1 = sr.xadd(stream_name, **message) + stamp1 = sr.xadd(stream_name, message) assert stamp1 in sr.xinfo_stream(name=stream_name)[b('first-entry')] assert sr.xinfo_groups(name=stream_name) == [] @@ -1719,10 +1719,10 @@ class TestStrictCommands(object): assert sr.xdel(stream_name, 1) == 0 - sr.xadd(stream_name, id=1, foo='bar') + sr.xadd(stream_name, {"foo": "bar"}, id=1) assert sr.xdel(stream_name, 1) == 1 - stamp = sr.xadd(stream_name, baz='qaz') + stamp = sr.xadd(stream_name, {"baz": "qaz"}) assert sr.xdel(stream_name, 1, stamp) == 1 assert sr.xdel(stream_name, 1, stamp, 42) == 0 @@ -1734,7 +1734,7 @@ class TestStrictCommands(object): assert sr.xtrim(stream_name, 1000) == 0 for i in range(300): - sr.xadd(stream_name, index=i) + sr.xadd(stream_name, {"index": i}) assert sr.xtrim(stream_name, 1000, approximate=False) == 0 assert sr.xtrim(stream_name, 300) == 0 @@ -1759,10 +1759,10 @@ class TestStrictCommands(object): assert sr.xdel(stream_name, 1) == 0 - sr.xadd(stream_name, id=1, foo='bar') + sr.xadd(stream_name, {"foo": "bar"}, id=1) assert sr.xdel(stream_name, 1) == 1 - stamp = sr.xadd(stream_name, baz='qaz') + stamp = sr.xadd(stream_name, {"baz": "qaz"}) assert sr.xdel(stream_name, 1, stamp) == 1 assert sr.xdel(stream_name, 1, stamp, 42) == 0 @@ -1774,7 +1774,7 @@ class TestStrictCommands(object): assert sr.xtrim(stream_name, 1000) == 0 for i in range(300): - sr.xadd(stream_name, index=i) + sr.xadd(stream_name, {"index": i}) assert sr.xtrim(stream_name, 1000, approximate=False) == 0 assert sr.xtrim(stream_name, 300) == 0 |