diff options
author | Selwin Ong <selwin.ong@gmail.com> | 2017-10-24 08:39:50 +0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-24 08:39:50 +0700 |
commit | 92c88d3f4da0f17b5c2d927a18282819e74e0fa6 (patch) | |
tree | 6da06c44674e45afa451cd6747d53539330e7573 | |
parent | a4be98dc874c029d9feec6b1c4fd328215be2ca0 (diff) | |
parent | c095fe1825cc10744e6fbbd6acadc375bb70e90a (diff) | |
download | rq-92c88d3f4da0f17b5c2d927a18282819e74e0fa6.tar.gz |
Merge pull request #878 from theodesp/Issue-731
Fixed #731 - Support for deleting Queues
-rw-r--r-- | rq/queue.py | 10 | ||||
-rw-r--r-- | tests/test_queue.py | 32 |
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') |