Files
django-q2/django_q/brokers/ironmq.py
2020-06-10 12:00:55 +02:00

51 lines
1.3 KiB
Python

from requests.exceptions import HTTPError
from django_q.conf import Conf
from django_q.brokers import Broker
from iron_mq import IronMQ
class IronMQBroker(Broker):
def enqueue(self, task):
return self.connection.post(task)['ids'][0]
def dequeue(self):
timeout = Conf.RETRY or None
tasks = self.connection.get(timeout=timeout, wait=1, max=Conf.BULK)['messages']
if tasks:
return [(t['id'], t['body']) for t in tasks]
def ping(self):
return self.connection.name == self.list_key
def info(self):
return 'IronMQ'
def queue_size(self):
return self.connection.size()
def delete_queue(self):
try:
return self.connection.delete_queue()['msg']
except HTTPError:
return False
def purge_queue(self):
return self.connection.clear()
def delete(self, task_id):
try:
return self.connection.delete(task_id)['msg']
except HTTPError:
return False
def fail(self, task_id):
self.delete(task_id)
def acknowledge(self, task_id):
return self.delete(task_id)
@staticmethod
def get_connection(list_key=Conf.PREFIX):
ironmq = IronMQ(name=None, **Conf.IRON_MQ)
return ironmq.queue(queue_name=list_key)