source file: /opt/devel/celery/celery/messaging.py
file stats: 29 lines, 29 executed: 100.0% covered
   1. from carrot.messaging import Publisher, Consumer
   2. from celery import conf
   3. import uuid
   4. 
   5. 
   6. class NoProcessConsumer(Consumer):
   7. 
   8.     def receive(self, message_data, message):
   9.         raise NotImplementedError(
  10.                 "Don't use process_next() or wait() with the TaskConsumer!")
  11. 
  12. 
  13. class TaskPublisher(Publisher):
  14.     exchange = conf.AMQP_EXCHANGE
  15.     routing_key = conf.AMQP_ROUTING_KEY
  16. 
  17.     def delay_task(self, task_name, **task_kwargs):
  18.         return self._delay_task(task_name=task_name, extra_data=task_kwargs)
  19. 
  20.     def delay_task_in_set(self, task_name, taskset_id, task_kwargs):
  21.         return self._delay_task(task_name=task_name, part_of_set=taskset_id,
  22.                                 extra_data=task_kwargs)
  23. 
  24.     def _delay_task(self, task_name, part_of_set=None, extra_data=None):
  25.         extra_data = extra_data or {}
  26.         task_id = str(uuid.uuid4())
  27.         message_data = dict(extra_data)
  28.         message_data["celeryTASK"] = task_name
  29.         message_data["celeryID"] = task_id
  30.         if part_of_set:
  31.             message_data["celeryTASKSET"] = part_of_set
  32.         self.send(message_data)
  33.         return task_id
  34. 
  35. 
  36. class TaskConsumer(NoProcessConsumer):
  37.     queue = conf.AMQP_CONSUMER_QUEUE
  38.     exchange = conf.AMQP_EXCHANGE
  39.     routing_key = conf.AMQP_ROUTING_KEY