task._run umbau zu inlineCallbacks devel
authorSandro Knauß <knauss@netzguerilla.net>
Fri, 10 Feb 2012 20:47:57 +0100
branchdevel
changeset 142 7d0c1fa97123
parent 141 90c95fdd1e33
child 143 0b265608b6ce
task._run umbau zu inlineCallbacks
iro/controller/task.py
iro/model/job.py
iro/model/offer.py
iro/offer/__init__.py
iro/offer/offer.py
tests/job.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:
--- 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: