sending part now in provoder class devel
authorSandro Knauß <knauss@netzguerilla.net>
Tue, 14 Feb 2012 16:23:27 +0100
branchdevel
changeset 161 072ee139eb67
parent 160 f4e4f4ba25fb
child 162 497d6b9b6914
sending part now in provoder class
iro/controller/task.py
iro/model/status.py
iro/offer/offer.py
iro/offer/provider.py
tests/job.py
--- a/iro/controller/task.py	Tue Feb 14 15:47:42 2012 +0100
+++ b/iro/controller/task.py	Tue Feb 14 16:23:27 2012 +0100
@@ -27,7 +27,7 @@
     def _run(self):
         for offer in self.job.offers:
             try:
-                ret = yield offers[offer].send(self.recipient,self.job.message)
+                ret = yield offers[offer](self.recipient,self.job.message)
                 returnValue(ret)
             except RejectRecipient:
                 continue
--- a/iro/model/status.py	Tue Feb 14 15:47:42 2012 +0100
+++ b/iro/model/status.py	Tue Feb 14 16:23:27 2012 +0100
@@ -1,11 +1,15 @@
 class Status:
     '''status for one recipient'''
-    todo = 1
-    good = 2
-    error = 3
+    GOOD = 1
+    ERROR = 99
     
-    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
+    def __init__(self, provider, route, error=None):
+        if error:
+            self.status = Status.ERROR
+        else:
+            self.status = Status.GOOD
+        
+        self.provider = provider
+        self.route = route
+        self.error = error
 
--- a/iro/offer/offer.py	Tue Feb 14 15:47:42 2012 +0100
+++ b/iro/offer/offer.py	Tue Feb 14 16:23:27 2012 +0100
@@ -1,14 +1,13 @@
-from  ..model.status import Status
-
 class Offer():
     def __init__(self, name, provider, route, typ):
         self.name = name
         self.route = route
         self.provider = provider
         self.typ = typ
+        self.sendfunc = provider.getSendFunc(typ, route)
 
-    def send(self, recipient, message):
-        return Status(self.name, Status.error, errtext="Error: Test")
+    def __call__(self, recipient, message):
+        return self.sendfunc(recipient, message)
 
     def __eq__(self,o):
         return (self.name == o.name) and (self.route == o.route) and (self.provider == o.provider) and (self.typ == o.typ)
--- a/iro/offer/provider.py	Tue Feb 14 15:47:42 2012 +0100
+++ b/iro/offer/provider.py	Tue Feb 14 16:23:27 2012 +0100
@@ -1,3 +1,5 @@
+from functools import partial
+
 class Provider():
     def __init__(self, name, config, routes=[]):
         self.name = name
@@ -9,3 +11,10 @@
         for (n, v) in self.config:
             if n == "typ":
                 self.typ = v
+
+    def send(self, typ, route, recipient, message):
+        pass
+
+    def getSendFunc(self, typ, route):
+        return partial(self.send, typ, route)
+
--- a/tests/job.py	Tue Feb 14 15:47:42 2012 +0100
+++ b/tests/job.py	Tue Feb 14 16:23:27 2012 +0100
@@ -16,7 +16,7 @@
 from iro.telnumber import Telnumber
 
 
-from iro.offer.offer import Offer
+from iro.offer import Offer, Provider
 from iro.validate import vInteger
 from iro.error import NoRoute
 
@@ -133,16 +133,21 @@
             o=DBOffer(name="test", provider="bla", route="basic", typ="sms")
             u.rights.append(Userright(o)) 
         
-        offers["test"] = Offer("test",provider=None, route=None, typ="sms")
+        p=Provider(name="p", config={}, routes=["test"])
+        def send(typ,route,recipient,message):
+            return Status(provider=p, route=route, error="Error: Test")
+        p.send=send
+        offers["test"] = Offer("test",provider=p, route="test", typ="sms")
 
         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")
+        self.assertEqual(ret.provider, p)
+        self.assertEqual(ret.route, "test")
+        self.assertEqual(ret.status, Status.ERROR)
+        self.assertEqual(ret.error, "Error: Test")
 
     @inlineCallbacks
     def testNoRoute(self):