summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoey Prat <roey.prat@redislabs.com>2018-10-28 09:31:48 +0200
committerRoey Prat <roey.prat@redislabs.com>2018-10-28 14:13:42 +0200
commit9984fa9cbaea7d6380df090dfdc036042948dad1 (patch)
tree0ea6abebc37788559c33f59258b5bf43a13200c7
parent3d24b463dc44d74dec30cffc4c5a23c566975cea (diff)
downloadredis-py-9984fa9cbaea7d6380df090dfdc036042948dad1.tar.gz
XADD key/value pairs of the entry should be specified as a single dict arg rather than kwargs
-rwxr-xr-xredis/client.py8
-rw-r--r--tests/test_commands.py28
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