--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/controller/task.py Tue Feb 07 01:56:59 2012 +0100
@@ -0,0 +1,41 @@
+from functools import partial
+
+from ..error import NoRoute, RejectRecipient
+
+from ..model.offer import getPossibleOffers
+from ..model.job import jobs
+
+from .pool import taskPool
+
+class Task:
+ '''one single part of a job.
+ a task is one message to one recipient
+ '''
+ def __init__(self, recipient, job):
+ self.recipient = recipient
+ self.job = job
+
+ def start(self):
+ self.d = taskPool.run(self._run)
+ self.d.addCallback(partial(self.job.setStatus,self))
+ self.d.addErrback(partial(self.job.setError,self))
+ return self.d
+
+ def _run(self):
+ for offer in getPossibleOffers(self.recipient,self.job.offers):
+ try:
+ return offer.send(self.recipient,self.job.message)
+ except RejectRecipient:
+ continue
+ else:
+ raise NoRoute()
+
+
+def createJob(recipients, msg, offers):
+ job = jobs.create(recipients, msg, offers)
+ for r in recipients:
+ task = Task(r,job)
+ job.addTask(task)
+ task.start()
+
+ return job