diff --git a/rq/queue.py b/rq/queue.py index dc961b84..e966de2d 100644 --- a/rq/queue.py +++ b/rq/queue.py @@ -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.""" diff --git a/tests/test_queue.py b/tests/test_queue.py index 5a6aa204..5020a130 100644 --- a/tests/test_queue.py +++ b/tests/test_queue.py @@ -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))