--- 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:
--- 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'''
--- 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")}
--- /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")
--- 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: