diff -r fae3fdfece65 -r f8640c663e3e iro/controller/task.py --- /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