provider auswahl hinzugefügt
authorSandro Knauß <knauss@netzguerilla.net>
Wed, 28 Oct 2009 02:35:01 +0100
changeset 7 07dd2663ac90
parent 6 c5672760138b
child 8 cec27aeb7e69
provider auswahl hinzugefügt
iro/.eric4project/iro.e4q
iro/.eric4project/iro.e4t
iro/iro.api
iro/iro.e4p
iro/iro.py
iro/job.py
iro/joblist.py
iro/providerlist.py
iro/test.py
iro/user.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/.eric4project/iro.e4q	Wed Oct 28 02:35:01 2009 +0100
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE UserProject SYSTEM "UserProject-4.0.dtd">
+<!-- eric4 user project file for project iro -->
+<!-- Saved: 2009-10-23, 01:39:27 -->
+<!-- Copyright (C) 2009 Sandro Knauß, bugs@sandroknauss.de -->
+<UserProject version="4.0">
+</UserProject>
\ No newline at end of file
--- a/iro/.eric4project/iro.e4t	Fri Oct 23 01:37:44 2009 +0200
+++ b/iro/.eric4project/iro.e4t	Wed Oct 28 02:35:01 2009 +0100
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE Tasks SYSTEM "Tasks-4.2.dtd">
 <!-- eric4 tasks file for project iro -->
-<!-- Saved: 2009-10-16, 01:34:46 -->
+<!-- Saved: 2009-10-23, 01:39:27 -->
 <Tasks version="4.2">
 </Tasks>
\ No newline at end of file
--- a/iro/iro.api	Fri Oct 23 01:37:44 2009 +0200
+++ b/iro/iro.api	Wed Oct 28 02:35:01 2009 +0100
@@ -14,7 +14,6 @@
 iro.anbieter.geonet.geonet.max_recipients?7
 iro.anbieter.geonet.geonet.section?7
 iro.anbieter.geonet.geonet.sendFAX?4(fax, recipients)
-iro.anbieter.geonet.geonet.sendMail?4(mail, recipients)
 iro.anbieter.geonet.geonet.sendSMS?4(sms, recipients)
 iro.anbieter.geonet.geonet?1()
 iro.anbieter.sipgate.sipgate.BalanceGet?4()
@@ -31,11 +30,21 @@
 iro.anbieter.sipgate.sipgate.updateStatus?4(arranged=None, failed=None)
 iro.anbieter.sipgate.sipgate.url?7
 iro.anbieter.sipgate.sipgate?1(user="", password="")
+iro.anbieter.smstrade.InternetConnectionError.__str__?6()
+iro.anbieter.smstrade.InternetConnectionError?1(url)
+iro.anbieter.smstrade.__send?6(self, key, route, to, message, from_=None, timestamp=None)
+iro.anbieter.smstrade.sendSMS?4(self, sms, recipients)
+iro.anbieter.smstrade.smstrade.read_basic_config?4(filename)
+iro.anbieter.smstrade.smstrade.section?7
+iro.anbieter.smstrade.smstrade.url?7
+iro.anbieter.smstrade.smstrade?1()
+iro.anbieter.smstrade.updateStatus?4(self, arranged=None, failed=None)
 iro.anbieter.smtp.SMTP.prepareSMTP?4()
-iro.anbieter.smtp.SMTP.read_basic_config?4()
+iro.anbieter.smtp.SMTP.read_basic_config?4(config_filename=None)
 iro.anbieter.smtp.SMTP.sendMail?4(mail, recipients)
 iro.anbieter.smtp.SMTP.shutdownSMTP?4()
-iro.anbieter.smtp.SMTP?1(config_filename, section)
+iro.anbieter.smtp.SMTP.updateStatus?4(arranged=None, failed=None)
+iro.anbieter.smtp.SMTP?1(config_filename=None, section="smtp")
 iro.anbieter.smtp.anbieter.default_conf?7
 iro.anbieter.telnumber.NotATelNumber.__str__?6()
 iro.anbieter.telnumber.NotATelNumber?1(number)
@@ -55,61 +64,73 @@
 iro.anbieter.test.anbieter.default_conf?7
 iro.content.FAX.sendto?4(anbieter, recipients)
 iro.content.FAX?1(header, cont, attachments)
+iro.content.Mail.as_string?4()
+iro.content.Mail.sendto?4(anbieter, recipients)
+iro.content.Mail?1(subject, body)
 iro.content.SMS.sendto?4(anbieter, recipients)
 iro.content.SMS?1(cont)
 iro.content.content.sendto?4(anbieter, recipients)
 iro.content.content?1(content)
-iro.iro.Job.addFailed?4(failed)
-iro.iro.Job.addGood?4(good)
-iro.iro.Job.getName?4()
-iro.iro.Job.getProvider?4()
-iro.iro.Job.getStatus?4(detailed)
-iro.iro.Job.start?4()
-iro.iro.Job.stop?4()
-iro.iro.Job?1(provider, name)
-iro.iro.Jobs.__getitem__?6(key)
-iro.iro.Jobs.__registerJob__?6(job)
-iro.iro.Jobs._createID?5()
-iro.iro.Jobs.newFAX?4(subject, fax, recipients)
-iro.iro.Jobs.newMail?4(subject, body, recipients)
-iro.iro.Jobs.newSMS?4(message, recipients)
-iro.iro.Jobs?1(manager, queue, provider)
-iro.iro.MessageJob.getMessage?4()
-iro.iro.MessageJob.getRecipients?4()
-iro.iro.MessageJob.start?4()
-iro.iro.MessageJob.stop?4()
-iro.iro.MessageJob?1(provider, message, recipients)
 iro.iro.MyManager.certificate?7
 iro.iro.MyManager.userdb?7
+iro.iro.MySMTP.setJob?4(job)
+iro.iro.MySMTP.updateStatus?4(arranged=None, failed=None)
+iro.iro.MySMTP?1(config_filename=None, section="smtp")
 iro.iro.MySipgate.setJob?4(job)
 iro.iro.MySipgate.updateStatus?4(arranged=None, failed=None)
 iro.iro.MySipgate?1(user="", password="")
+iro.iro.MySmstrade.setJob?4(job)
+iro.iro.MySmstrade.updateStatus?4(arranged=None, failed=None)
+iro.iro.MySmstrade?1()
 iro.iro.MyUserDB.createUser?4(user)
 iro.iro.MyUserDB?1(userlist, jobqueue)
 iro.iro.start?4(userlist)
+iro.job.Job.addFailed?4(failed)
+iro.job.Job.addGood?4(good)
+iro.job.Job.getName?4()
+iro.job.Job.getProvider?4()
+iro.job.Job.getStatus?4(detailed)
+iro.job.Job.start?4()
+iro.job.Job.stop?4()
+iro.job.Job?1(provider, name)
+iro.job.MessageJob.getMessage?4()
+iro.job.MessageJob.getRecipients?4()
+iro.job.MessageJob.start?4()
+iro.job.MessageJob.stop?4()
+iro.job.MessageJob?1(provider, name, message, recipients)
+iro.joblist.Joblist.__getitem__?6(key)
+iro.joblist.Joblist.__registerJob__?6(job)
+iro.joblist.Joblist._createID?5()
+iro.joblist.Joblist.newFAX?4(subject, fax, recipients)
+iro.joblist.Joblist.newMail?4(subject, body, recipients)
+iro.joblist.Joblist.newSMS?4(message, recipients)
+iro.joblist.Joblist?1(manager, queue, providerlist)
+iro.providerlist.Providerlist.add?4(name, provider, typeslist)
+iro.providerlist.Providerlist.getDefault?4(stype)
+iro.providerlist.Providerlist.getProvider?4(stype, name="default")
+iro.providerlist.Providerlist.getProviderlist?4(stype)
+iro.providerlist.Providerlist.setDefault?4(stype, name)
+iro.providerlist.Providerlist?1()
 iro.test.MyManager.certificate?7
 iro.test.MyManager.userdb?7
 iro.test.StoppableXMLRPCServer.run?4()
 iro.test.StoppableXMLRPCServer.running?7
 iro.test.StoppableXMLRPCServer.stop?4()
 iro.test.StoppableXMLRPCServer?1(*args, **kwargs)
-iro.test.TestServer.admin?7
-iro.test.TestServer.client1?7
-iro.test.TestServer.client2?7
-iro.test.TestServer.client?7
-iro.test.TestServer.id1?7
-iro.test.TestServer.id2?7
-iro.test.TestServer.id?7
-iro.test.TestServer.servstr?7
 iro.test.TestServer.setUp?4()
 iro.test.TestServer.tearDown?4()
+iro.test.TestServer.testGetDefault?4()
+iro.test.TestServer.testGetProvider?4()
 iro.test.TestServer.testLogin?4()
 iro.test.TestServer.testTwoUser?4()
 iro.test.TestServer.testsendSMS?4()
-iro.test.TestServer.u1?7
-iro.test.TestServer.u2?7
 iro.test.init_server?4()
 iro.user.Admin?1(jobqueue)
+iro.user.NotSupportedFeature.__str__?6()
+iro.user.NotSupportedFeature?1(name)
+iro.user.User.getDefaultProvider?4(name)
+iro.user.User.getProvider?4(name)
+iro.user.User.startFAX?4()
 iro.user.User.startMail?4(subject, body, recipients)
 iro.user.User.startSMS?4(message, recipients)
 iro.user.User.status?4(id=None, detailed=False)
@@ -139,24 +160,4 @@
 iro.xmlrpc.SecureXMLRPCServer.SecureTCPServer?1(server_address, RequestHandlerClass, certificate, privatekey)
 iro.xmlrpc.SecureXMLRPCServer.SecureXMLRPCRequestHandler.setup?4()
 iro.xmlrpc.SecureXMLRPCServer.SecureXMLRPCServer?1(addr, requestHandler=SecureXMLRPCRequestHandler, certificate="server.cert", privatekey="server.pem", logRequests=1)
-iro.xmlrpc.SecureXMLRPCServer.test?4()
-iro.xmlserver_test.Job.start?4()
-iro.xmlserver_test.Job.stop?4()
-iro.xmlserver_test.Job?1(provider, name)
-iro.xmlserver_test.Jobs.__getitem__?6(key)
-iro.xmlserver_test.Jobs._createID?5()
-iro.xmlserver_test.Jobs.newSMS?4(message, recipients)
-iro.xmlserver_test.Jobs?1(queue, provider)
-iro.xmlserver_test.SMSJob?1(provider, message, recipients)
-iro.xmlserver_test.SecureAuthentificateXMLRPCRequestHandler2.testUser?4(username, password)
-iro.xmlserver_test.SecureUserDBXMLRPCServer.activateUser?4(username, password)
-iro.xmlserver_test.SecureUserDBXMLRPCServer?1(addr, userdb, requestHandler=SecureAuthentificateXMLRPCRequestHandler2, certificate="server.cert", privatekey="server.pem", logRequests=1)
-iro.xmlserver_test.User.startSMS?4(message, recipients)
-iro.xmlserver_test.User.status?4(id=None)
-iro.xmlserver_test.User.stop?4(id)
-iro.xmlserver_test.User?1(jobqueue)
-iro.xmlserver_test.UserDB.__getitem__?6(key)
-iro.xmlserver_test.UserDB.createHash?4(username, password)
-iro.xmlserver_test.UserDB.createUser?4(user)
-iro.xmlserver_test.UserDB?1(userlist, jobqueue)
-iro.xmlserver_test.test?4()
\ No newline at end of file
+iro.xmlrpc.SecureXMLRPCServer.test?4()
\ No newline at end of file
--- a/iro/iro.e4p	Fri Oct 23 01:37:44 2009 +0200
+++ b/iro/iro.e4p	Wed Oct 28 02:35:01 2009 +0100
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE Project SYSTEM "Project-4.6.dtd">
 <!-- eric4 project file for project iro -->
-<!-- Saved: 2009-10-16, 01:34:46 -->
+<!-- Saved: 2009-10-23, 01:39:27 -->
 <!-- Copyright (C) 2009 Sandro Knauß, bugs@sandroknauss.de -->
 <Project version="4.6">
   <Language></Language>
@@ -19,7 +19,6 @@
     <Source>xmlrpc/__init__.py</Source>
     <Source>xmlrpc/SecureAuthentificateXMLRPCServer.py</Source>
     <Source>xmlrpc/AuthentificateXMLRPCServer.py</Source>
-    <Source>xmlserver_test.py</Source>
     <Source>anbieter/smtp.py</Source>
     <Source>anbieter/geonet.py</Source>
     <Source>anbieter/__init__.py</Source>
@@ -46,7 +45,7 @@
   </Others>
   <MainScript>iro.py</MainScript>
   <Vcs>
-    <VcsType>Subversion</VcsType>
+    <VcsType>None</VcsType>
     <VcsOptions>
       <dict>
         <key>
--- a/iro/iro.py	Fri Oct 23 01:37:44 2009 +0200
+++ b/iro/iro.py	Wed Oct 28 02:35:01 2009 +0100
@@ -14,9 +14,8 @@
 # Server code
 
 from xmlrpc import SecureUserDBXMLRPCServer,UserDB
-import time, os, md5
+
 from user import User, Admin, NotSupportedFeature
-import content
 import anbieter
 import ConfigParser
 
@@ -27,68 +26,7 @@
     def createUser(self, user):
         self.userlist[self.createHash(user)]=user["class"](self.jobqueue)
 
-class Job(object):
-    '''
-    Basic class for all jobs
-    '''   
-    def __init__(self,provider,name):
-        self.provider=provider
-        self.name=name
-        self.status = "init"
-        self.dStatus={"good":[], "failed":[]}
 
-    def start(self):
-        self.status = "started"
-        
-    def stop(self):
-        self.status = "stopped"
-        
-    def getStatus(self,detailed):
-        if detailed and self.status == "started" or self.status == "sended":
-            return self.status, self.dStatus
-        return self.status, {}
-    
-    def getName(self):
-        return self.name
-        
-    def getProvider(self):
-        return self.provider
-        
-    def addGood(self, good):
-        if type(good) == list:
-            self.dStatus['good']=self.dStatus['good']+good
-        else:
-            self.dStatus['good'].append(good)
-    
-    def addFailed(self, failed):
-        if type(failed) == list:
-            self.dStatus['failed']=self.dStatus['failed']+failed
-        else:
-            self.dStatus['failed'].append(failed)
-
-class MessageJob(Job):
-    '''
-    A specialized class for smsjobs
-    '''
-    def __init__(self,provider,name, message,recipients):
-        self.message=message
-        self.recipients=recipients
-        Job.__init__(self,provider, name)
-        
-    def stop(self):
-        pass
-        
-    def start(self):
-        Job.start(self)
-        self.provider.setJob(self)
-        self.message.sendto(self.provider, self.recipients)
-        self.status="sended"
-
-    def getMessage(self):
-        return self.message
-        
-    def getRecipients(self):
-        return self.recipients
  
 
 class MySipgate(anbieter.sipgate):
@@ -135,60 +73,8 @@
         
         if failed:
             self.job.addFailed(failed)
-						
-class Jobs:
-    '''
-    Providing an list of jobs; each new job gets a hash id
-    '''
-    def __init__(self,manager, queue,provider):
-        self.jobs={}
-        self.manager=manager
-        self.queue=queue
-        self.provider=provider
-        
-
-    def __getitem__(self,key):
-        return self.jobs[key]
-
-    def __registerJob__(self, job):
-        id = self._createID()
-        self.jobs[id]=job
-        self.queue.put(job)
-        return id
 
-    def newSMS(self,message,recipients):
-        '''
-        creates a new SMS
-        '''
-        job=self.manager.MessageJob(self.provider["sms"],message, content.SMS(message),recipients)
-        return self.__registerJob__(job)
 
-    def newFAX(self,subject, fax,recipients):
-        '''
-        creates a new Fax
-        '''
-        job=self.manager.MessageJob(self.provider["fax"],subject, content.FAX(subject, fax),recipients)
-        return self.__registerJob__(job)
-
-    def newMail(self,subject, body,recipients):
-        '''
-        creates a new Mail
-        '''
-        job=self.manager.MessageJob(self.provider["mail"],subject, content.Mail(subject, body),recipients)
-        return self.__registerJob__(job) 
-
-    def _createID(self):
-        '''
-        creats a random hash id
-        '''
-        while True:
-            m = md5.new()
-            m.update(str(time.time()))
-            m.update(os.urandom(10))
-            if not self.jobs.has_key(m.hexdigest):
-                self.jobs[m.hexdigest()]=None
-                break
-        return m.hexdigest()
 
 def start(userlist):
     from multiprocessing import Queue
@@ -215,7 +101,10 @@
     
     #Benutzerdatenbank erstellen
     queue = Queue()
-    provider={"sms":sip, "fax":sip, "mail":localhost}
+    provider={"sms":{"sipgate":sip, "smstrade":smstrade, "default":sip, }, 
+                    "fax":{"sipgate":sip, "default":sip, }, 
+                    "mail":{"localhost":localhost, "default":localhost, }, }
+    
     jobqueue=Jobs(manager,  queue, provider)
     userdb=MyUserDB(userlist,jobqueue)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/job.py	Wed Oct 28 02:35:01 2009 +0100
@@ -0,0 +1,79 @@
+# -*- coding: utf-8 -*-
+#Copyright (C) 2009  Sandro Knauß <bugs@sandroknauss.de>
+
+#This program is free software; you can redistribute it and/or modify it under the terms
+#of the GNU General Public License as published by the Free Software Foundation;
+#either version 3 of the License, or any later version.
+#This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+#without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#See the GNU General Public License for more details.
+
+#You should have received a copy of the GNU General Public License
+#along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+
+class Job(object):
+    '''
+    Basic class for all jobs
+    '''   
+    def __init__(self,provider,name):
+        self.provider=provider
+        self.name=name
+        self.status = "init"
+        self.dStatus={"good":[], "failed":[]}
+
+    def start(self):
+        self.status = "started"
+        
+    def stop(self):
+        self.status = "stopped"
+        
+    def getStatus(self,detailed):
+        if detailed and self.status == "started" or self.status == "sended":
+            return self.status, self.dStatus
+        return self.status, {}
+    
+    def getName(self):
+        return self.name
+        
+    def getProvider(self):
+        return self.provider
+        
+    def addGood(self, good):
+        if type(good) == list:
+            self.dStatus['good']=self.dStatus['good']+good
+        else:
+            self.dStatus['good'].append(good)
+    
+    def addFailed(self, failed):
+        if type(failed) == list:
+            self.dStatus['failed']=self.dStatus['failed']+failed
+        else:
+            self.dStatus['failed'].append(failed)
+
+class MessageJob(Job):
+    '''
+    A specialized class for smsjobs
+    '''
+    def __init__(self,provider,name, message,recipients):
+        self.message=message
+        self.recipients=recipients
+        Job.__init__(self,provider, name)
+        
+    def stop(self):
+        pass
+        
+    def start(self):
+        Job.start(self)
+        self.provider.setJob(self)
+        self.message.sendto(self.provider, self.recipients)
+        self.status="sended"
+
+    def getMessage(self):
+        return self.message
+        
+    def getRecipients(self):
+        return self.recipients
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/joblist.py	Wed Oct 28 02:35:01 2009 +0100
@@ -0,0 +1,70 @@
+# -*- coding: utf-8 -*-
+#Copyright (C) 2009  Sandro Knauß <bugs@sandroknauss.de>
+
+#This program is free software; you can redistribute it and/or modify it under the terms
+#of the GNU General Public License as published by the Free Software Foundation;
+#either version 3 of the License, or any later version.
+#This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+#without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#See the GNU General Public License for more details.
+
+#You should have received a copy of the GNU General Public License
+#along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+import content
+import md5, os,  time
+
+
+class Joblist:
+    '''
+    Providing an list of jobs; each new job gets a hash id
+    '''
+    def __init__(self,manager, queue,providerlist):
+        self.jobs={}
+        self.manager=manager
+        self.queue=queue
+        self.providerlist=providerlist
+        
+
+    def __getitem__(self,key):
+        return self.jobs[key]
+
+    def __registerJob__(self, job):
+        id = self._createID()
+        self.jobs[id]=job
+        self.queue.put(job)
+        return id
+
+    def newSMS(self,message,recipients):
+        '''
+        creates a new SMS
+        '''
+        job=self.manager.MessageJob(self.providerlist.getProvider("sms"),message, content.SMS(message),recipients)
+        return self.__registerJob__(job)
+
+    def newFAX(self,subject, fax,recipients):
+        '''
+        creates a new Fax
+        '''
+        job=self.manager.MessageJob(self.providerlist.getProvider("fax"),subject, content.FAX(subject, fax),recipients)
+        return self.__registerJob__(job)
+
+    def newMail(self,subject, body,recipients):
+        '''
+        creates a new Mail
+        '''
+        job=self.manager.MessageJob(self.providerlist.getProvider("mail"),subject, content.Mail(subject, body),recipients)
+        return self.__registerJob__(job) 
+
+    def _createID(self):
+        '''
+        creats a random hash id
+        '''
+        while True:
+            m = md5.new()
+            m.update(str(time.time()))
+            m.update(os.urandom(10))
+            if not self.jobs.has_key(m.hexdigest):
+                self.jobs[m.hexdigest()]=None
+                break
+        return m.hexdigest()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/providerlist.py	Wed Oct 28 02:35:01 2009 +0100
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+#Copyright (C) 2009  Sandro Knauß <bugs@sandroknauss.de>
+
+#This program is free software; you can redistribute it and/or modify it under the terms
+#of the GNU General Public License as published by the Free Software Foundation;
+#either version 3 of the License, or any later version.
+#This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+#without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#See the GNU General Public License for more details.
+
+#You should have received a copy of the GNU General Public License
+#along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+class Providerlist:
+    def __init__(self):
+        self.provider={}
+        self.types={}
+        self.defaults={}
+        
+    def add(self, name, provider, typeslist):
+        self.provider[name]={"name":name, "class":provider, "types":typeslist}
+        for stype in typeslist:
+            try:
+                self.types[stype].append(self.provider[name])
+            except KeyError:
+                self.types[stype]=[self.provider[name]]
+            
+    
+    def setDefault(self, stype, name):
+        self.defaults[stype]=self.provider[name]
+    
+    def getDefault(self, stype):
+        return self.defaults[stype]
+    
+    def getProviderlist(self, stype):
+        llist=[ provider["name"] for provider in self.types[stype] ]
+        llist.sort()
+        return llist
+
+    def getProvider(self, stype,  name="default"):
+        if name=="default":
+            return self.getDefault(stype)["class"]
+        
+        if not stype in self.provider[name] ["types"]:
+            raise "argh"
+        
+        return self.provider[name]["class"]
--- a/iro/test.py	Fri Oct 23 01:37:44 2009 +0200
+++ b/iro/test.py	Wed Oct 28 02:35:01 2009 +0100
@@ -2,6 +2,9 @@
 
 import unittest, ConfigParser
 import iro
+from job import MessageJob
+from joblist import Joblist
+from providerlist import Providerlist
 import threading, xmlrpclib
 from multiprocessing import Queue
 from multiprocessing.managers import BaseManager
@@ -35,7 +38,7 @@
     class MyManager(BaseManager):
         pass
     
-    MyManager.register('MessageJob', iro.MessageJob) 
+    MyManager.register('MessageJob', MessageJob) 
     manager = MyManager()
     manager.start()
     
@@ -53,8 +56,16 @@
 
     #Benutzerdatenbank erstellen
     queue = Queue()
-    provider={"sms":sip, "fax":sip, "mail":localhost}
-    jobqueue=iro.Jobs(manager,  queue, provider)
+    provider=Providerlist()
+    provider.add("sipgate", sip, ["sms", "fax", ])
+    provider.add("smstrade", smstrade, ["sms", ])
+    provider.add("geonet", None, ["sms", "fax", ])
+    provider.add("fax.de", None, ["sms", "fax", ])
+    provider.add("localhost", localhost, ["mail", ])
+    provider.setDefault("sms","smstrade")
+    provider.setDefault("fax","sipgate")
+    provider.setDefault("mail","localhost")
+    jobqueue=Joblist(manager,  queue, provider)
     userdb=iro.MyUserDB(userlist,jobqueue)
 
 
@@ -89,7 +100,7 @@
     def testsendSMS(self):
         servstr="https://test:test@localhost:8000"
         client=xmlrpclib.Server(servstr)
-        id=client.startSMS("test",["01234"] )
+        id=client.startSMS("test",["01234", ] )
         self.assertEqual(client.status(id),{id: {'status': ['init',{}], 'name':  'test'}} )
         
     def testTwoUser(self):
@@ -116,9 +127,19 @@
         servstr="https://test:test@localhost:8000"
         client=xmlrpclib.Server(servstr)       
         self.assertEqual(client.getProvider("sms"), ["fax.de","geonet", "sipgate", "smstrade"])
-        self.assertEqual(client.getProvider("fax").sort(), ["fax.de","geonet", "sipgate"])
-        self.assertEqual(client.getProvider("mail").sort(), ["localhost"])
-        self.assertRaises(iro.NotSupportedFeature, client.getProvider("temp"))
+        self.assertEqual(client.getProvider("fax"), ["fax.de","geonet", "sipgate"])
+        self.assertEqual(client.getProvider("mail"), ["localhost"])
+        
+        self.assertRaises(xmlrpclib.Fault,client.getProvider, "temp")
+    
+    def testGetDefault(self):
+        servstr="https://test:test@localhost:8000"
+        client=xmlrpclib.Server(servstr)       
+        self.assertEqual(client.getDefaultProvider("sms"), "smstrade")
+        self.assertEqual(client.getDefaultProvider("fax"),"sipgate")
+        self.assertEqual(client.getDefaultProvider("mail"), "localhost")       
+        
+        self.assertRaises(xmlrpclib.Fault,client.getDefaultProvider, "temp")        
 
     
 if __name__ == "__main__":
--- a/iro/user.py	Fri Oct 23 01:37:44 2009 +0200
+++ b/iro/user.py	Wed Oct 28 02:35:01 2009 +0100
@@ -87,6 +87,14 @@
     def getProvider(self, name):
         if not name in self.features:
             raise NotSupportedFeature(name)
+       
+        return self.jobqueue.providerlist.getProviderlist(name)
+        
+    def getDefaultProvider(self, name):
+        if not name in self.features:
+            raise NotSupportedFeature(name)
+       
+        return self.jobqueue.providerlist.getDefault(name)["name"]
         
 class Admin(User):
     def __init__(self,jobqueue):