summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSelwin Ong <selwin.ong@gmail.com>2017-10-24 08:39:50 +0700
committerGitHub <noreply@github.com>2017-10-24 08:39:50 +0700
commit92c88d3f4da0f17b5c2d927a18282819e74e0fa6 (patch)
tree6da06c44674e45afa451cd6747d53539330e7573
parenta4be98dc874c029d9feec6b1c4fd328215be2ca0 (diff)
parentc095fe1825cc10744e6fbbd6acadc375bb70e90a (diff)
downloadrq-92c88d3f4da0f17b5c2d927a18282819e74e0fa6.tar.gz
Merge pull request #878 from theodesp/Issue-731
Fixed #731 - Support for deleting Queues
-rw-r--r--rq/queue.py10
-rw-r--r--tests/test_queue.py32
2 files changed, 42 insertions, 0 deletions
diff --git a/rq/queue.py b/rq/queue.py
index e694e3f..11e6553 100644
--- a/rq/queue.py
+++ b/rq/queue.py
@@ -111,6 +111,16 @@ class Queue(object):
script = self.connection.register_script(script)
return script(keys=[self.key])
+ def delete(self, delete_jobs=True):
+ """Deletes the queue. If delete_jobs is true it removes all the associated messages on the queue first."""
+ if delete_jobs:
+ self.empty()
+
+ with self.connection._pipeline() as pipeline:
+ pipeline.srem(self.redis_queues_keys, self._key)
+ pipeline.delete(self._key)
+ pipeline.execute()
+
def is_empty(self):
"""Returns whether the current queue is empty."""
return self.count == 0
diff --git a/tests/test_queue.py b/tests/test_queue.py
index e19415f..96035c8 100644
--- a/tests/test_queue.py
+++ b/tests/test_queue.py
@@ -72,6 +72,38 @@ class TestQueue(RQTestCase):
self.testconn.rpush('rq:queue:example', 'sentinel message')
self.assertEqual(q.is_empty(), False)
+ def test_queue_delete(self):
+ """Test queue.delete properly removes queue"""
+ q = Queue('example')
+ job = q.enqueue(say_hello)
+ job2 = q.enqueue(say_hello)
+
+ self.assertEqual(2, len(q.get_job_ids()))
+
+ q.delete()
+
+ self.assertEqual(0, len(q.get_job_ids()))
+ self.assertEqual(False, self.testconn.exists(job.key))
+ self.assertEqual(False, self.testconn.exists(job2.key))
+ self.assertEqual(0, len(self.testconn.smembers(Queue.redis_queues_keys)))
+ self.assertEqual(False, self.testconn.exists(q.key))
+
+ def test_queue_delete_but_keep_jobs(self):
+ """Test queue.delete properly removes queue but keeps the job keys in the redis store"""
+ q = Queue('example')
+ job = q.enqueue(say_hello)
+ job2 = q.enqueue(say_hello)
+
+ self.assertEqual(2, len(q.get_job_ids()))
+
+ q.delete(delete_jobs=False)
+
+ self.assertEqual(0, len(q.get_job_ids()))
+ self.assertEqual(True, self.testconn.exists(job.key))
+ self.assertEqual(True, self.testconn.exists(job2.key))
+ self.assertEqual(0, len(self.testconn.smembers(Queue.redis_queues_keys)))
+ self.assertEqual(False, self.testconn.exists(q.key))
+
def test_remove(self):
"""Ensure queue.remove properly removes Job from queue."""
q = Queue('example')