source file: /opt/devel/celery/celery/messaging.py
file stats: 28 lines, 27 executed: 96.4% 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