diff options
author | Chayim <chayim@users.noreply.github.com> | 2021-09-01 17:09:41 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-01 17:09:41 +0300 |
commit | febede19423c95515a7548cd73aa1a90c639ba1f (patch) | |
tree | 969d634fc1416bab3e08d38c7dddf74597e793fc | |
parent | b6ecd0d6b7e6848dd085c3644ed31598fb1c9f83 (diff) | |
download | redis-py-febede19423c95515a7548cd73aa1a90c639ba1f.tar.gz |
Pipeline DISCARD support (#1565)
closes #1539
Part of #1546
-rwxr-xr-x | redis/client.py | 6 | ||||
-rw-r--r-- | tests/test_pipeline.py | 28 |
2 files changed, 33 insertions, 1 deletions
diff --git a/redis/client.py b/redis/client.py index 8979280..7a022a0 100755 --- a/redis/client.py +++ b/redis/client.py @@ -1810,6 +1810,12 @@ class Pipeline(Redis): finally: self.reset() + def discard(self): + """Flushes all previously queued commands + See: https://redis.io/commands/DISCARD + """ + self.execute_command("DISCARD") + def watch(self, *names): "Watches the values at keys ``names``" if self.explicit_transaction: diff --git a/tests/test_pipeline.py b/tests/test_pipeline.py index 9bc4a9f..08bd40b 100644 --- a/tests/test_pipeline.py +++ b/tests/test_pipeline.py @@ -1,7 +1,7 @@ import pytest import redis -from .conftest import wait_for_command +from .conftest import wait_for_command, skip_if_server_version_lt class TestPipeline: @@ -353,3 +353,29 @@ class TestPipeline: assert pipe == pipe2 assert response == [True, [0, 0, 15, 15, 14], b'1'] + + @skip_if_server_version_lt('2.0.0') + def test_pipeline_discard(self, r): + + # empty pipeline should raise an error + with r.pipeline() as pipe: + pipe.set('key', 'someval') + pipe.discard() + with pytest.raises(redis.exceptions.ResponseError): + pipe.execute() + + # setting a pipeline and discarding should do the same + with r.pipeline() as pipe: + pipe.set('key', 'someval') + pipe.set('someotherkey', 'val') + response = pipe.execute() + pipe.set('key', 'another value!') + pipe.discard() + pipe.set('key', 'another vae!') + with pytest.raises(redis.exceptions.ResponseError): + pipe.execute() + + pipe.set('foo', 'bar') + response = pipe.execute() + assert response[0] + assert r.get('foo') == b'bar' |