# HG changeset patch # User Sandro Knauß # Date 1328903277 -3600 # Node ID 7d0c1fa97123f4f1f54d780d42040db9c8f256d1 # Parent 90c95fdd1e3326e6c64fef8f32e78c9250380151 task._run umbau zu inlineCallbacks diff -r 90c95fdd1e33 -r 7d0c1fa97123 iro/controller/task.py --- a/iro/controller/task.py Thu Feb 09 18:27:58 2012 +0100 +++ b/iro/controller/task.py Fri Feb 10 20:47:57 2012 +0100 @@ -1,10 +1,10 @@ from functools import partial - from twisted.internet import defer +from twisted.internet.defer import inlineCallbacks, returnValue from ..error import NoRoute, RejectRecipient -from ..model.offer import getPossibleOffers +from ..model.offer import offers from ..model.job import exJobs from .pool import taskPool @@ -23,10 +23,12 @@ self.d.addErrback(partial(self.job.setError,self)) return self.d + @inlineCallbacks def _run(self): - for offer in getPossibleOffers(self.recipient,self.job.offers): + for offer in self.job.offers: try: - return offer.send(self.recipient,self.job.message) + ret = yield (offers[offer].send(self.recipient,self.job.message)) + returnValue(ret) except RejectRecipient: continue else: diff -r 90c95fdd1e33 -r 7d0c1fa97123 iro/model/job.py --- a/iro/model/job.py Thu Feb 09 18:27:58 2012 +0100 +++ b/iro/model/job.py Fri Feb 10 20:47:57 2012 +0100 @@ -8,11 +8,11 @@ todo = 1 good = 2 error = 3 - def __init__(self, job): - self.status = Status.todo - self.job = job - self.offer = None #the offer over that this job was done - self.errtext = None #the error text + + def __init__(self, offer, status, errtext=None): + self.status = status + self.offer = offer #the offer over that this job was done + self.errtext = errtext #the error text class ExJob: '''One Job is a class that handles one job has multiple tasks''' diff -r 90c95fdd1e33 -r 7d0c1fa97123 iro/model/offer.py --- a/iro/model/offer.py Thu Feb 09 18:27:58 2012 +0100 +++ b/iro/model/offer.py Fri Feb 10 20:47:57 2012 +0100 @@ -1,2 +1,9 @@ -def getPossibleOffers(recipient, offers): - pass +from iro.offer import offer + +def getPossibleOffers(recipient, os): + ret = [] + for offer in os: + ret.append(offers[offer]) + return ret + +offers={"test":offer.Offer("test")} diff -r 90c95fdd1e33 -r 7d0c1fa97123 iro/offer/__init__.py diff -r 90c95fdd1e33 -r 7d0c1fa97123 iro/offer/offer.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iro/offer/offer.py Fri Feb 10 20:47:57 2012 +0100 @@ -0,0 +1,8 @@ +from ..model.job import Status + +class Offer(): + def __init__(self,name): + self.name = name + + def send(self, recipient, message): + return Status(self.name, Status.error, errtext="Error: Test") diff -r 90c95fdd1e33 -r 7d0c1fa97123 tests/job.py --- a/tests/job.py Thu Feb 09 18:27:58 2012 +0100 +++ b/tests/job.py Fri Feb 10 20:47:57 2012 +0100 @@ -1,11 +1,12 @@ from twisted.internet import reactor +from twisted.internet.defer import inlineCallbacks from Queue import deque from iro.controller.task import createJob, Task from iro.controller.pool import taskPool, dbPool -from iro.model.job import exJobs, ExJob +from iro.model.job import exJobs, ExJob, Status from iro.model.pool import data @@ -14,6 +15,7 @@ from iro.telnumber import Telnumber from iro.validate import vInteger +from iro.error import NoRoute from .dbtestcase import DBTestCase @@ -84,7 +86,7 @@ def testUnknownExJob(self): self.assertRaises(KeyError,exJobs.__getitem__,'a1234567890') -class JobTest(DBTestCase): +class TestTasks(DBTestCase): def setUp(self): DBTestCase.setUp(self) @@ -107,10 +109,18 @@ self.assertEqual(taskPool.pool.q.qsize(),1) return result d.addCallback(poolsize) + def keys(result): self.assertEqual(result.tasks.keys(),[Telnumber('0123325456')]) return result d.addCallback(keys) + return d + @inlineCallbacks + def testRun(self): + with self.session() as session: + u = User(name='test',apikey='abcdef123456789') + session.add(u) + def tasktest(result): self.assertIsInstance(result.tasks[Telnumber('0123325456')], Task) return result @@ -118,7 +128,27 @@ - return d + exjob = yield exJobs.create(u, [Telnumber('123456789')], SMS('test'), ['test']) + + task=Task(Telnumber('123456789'), exjob) + ret = yield task._run() + self.assertIsInstance(ret, Status) + self.assertEqual(ret.offer,"test") + self.assertEqual(ret.status, Status.error) + self.assertEqual(ret.errtext,"Error: Test") + + @inlineCallbacks + def testNoRoute(self): + with self.session() as session: + u = User(name='test',apikey='abcdef123456789') + session.add(u) + + exjob = yield exJobs.create(u, [Telnumber('123456789')], SMS('test'), []) + + task=Task(Telnumber('123456789'), exjob) + d = task._run() + self.assertFailure(d, NoRoute) + #def testCreateFax(self): # with self.session() as session: