Fixed #731 - Code review issues. Added delete_jobs parameter and pipelining.

main
Theo 7 years ago
parent 160fe99323
commit c095fe1825

@ -111,11 +111,15 @@ class Queue(object):
script = self.connection.register_script(script)
return script(keys=[self.key])
def delete(self):
"""Deletes the queue and all the associated messages on the queue."""
self.empty()
self.connection.srem(self.redis_queues_keys, self._key)
self.connection.delete(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."""

@ -75,14 +75,32 @@ class TestQueue(RQTestCase):
def test_queue_delete(self):
"""Test queue.delete properly removes queue"""
q = Queue('example')
self.testconn.rpush('rq:queue:example', 'foo')
self.testconn.rpush('rq:queue:example', 'bar')
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))

Loading…
Cancel
Save