mirror of https://github.com/rq/rq.git
Merge pull request #878 from theodesp/Issue-731
Fixed #731 - Support for deleting Queues
This commit is contained in:
commit
92c88d3f4d
10
rq/queue.py
10
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
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue