mirror of https://github.com/rq/rq.git
Fixed #731 - Code review issues. Added delete_jobs parameter and pipelining.
This commit is contained in:
parent
160fe99323
commit
c095fe1825
14
rq/queue.py
14
rq/queue.py
|
@ -111,11 +111,15 @@ class Queue(object):
|
||||||
script = self.connection.register_script(script)
|
script = self.connection.register_script(script)
|
||||||
return script(keys=[self.key])
|
return script(keys=[self.key])
|
||||||
|
|
||||||
def delete(self):
|
def delete(self, delete_jobs=True):
|
||||||
"""Deletes the queue and all the associated messages on the queue."""
|
"""Deletes the queue. If delete_jobs is true it removes all the associated messages on the queue first."""
|
||||||
self.empty()
|
if delete_jobs:
|
||||||
self.connection.srem(self.redis_queues_keys, self._key)
|
self.empty()
|
||||||
self.connection.delete(self._key)
|
|
||||||
|
with self.connection._pipeline() as pipeline:
|
||||||
|
pipeline.srem(self.redis_queues_keys, self._key)
|
||||||
|
pipeline.delete(self._key)
|
||||||
|
pipeline.execute()
|
||||||
|
|
||||||
def is_empty(self):
|
def is_empty(self):
|
||||||
"""Returns whether the current queue is empty."""
|
"""Returns whether the current queue is empty."""
|
||||||
|
|
|
@ -75,14 +75,32 @@ class TestQueue(RQTestCase):
|
||||||
def test_queue_delete(self):
|
def test_queue_delete(self):
|
||||||
"""Test queue.delete properly removes queue"""
|
"""Test queue.delete properly removes queue"""
|
||||||
q = Queue('example')
|
q = Queue('example')
|
||||||
self.testconn.rpush('rq:queue:example', 'foo')
|
job = q.enqueue(say_hello)
|
||||||
self.testconn.rpush('rq:queue:example', 'bar')
|
job2 = q.enqueue(say_hello)
|
||||||
|
|
||||||
self.assertEqual(2, len(q.get_job_ids()))
|
self.assertEqual(2, len(q.get_job_ids()))
|
||||||
|
|
||||||
q.delete()
|
q.delete()
|
||||||
|
|
||||||
self.assertEqual(0, len(q.get_job_ids()))
|
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(0, len(self.testconn.smembers(Queue.redis_queues_keys)))
|
||||||
self.assertEqual(False, self.testconn.exists(q.key))
|
self.assertEqual(False, self.testconn.exists(q.key))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue