iro/tests/stopableServer.py
changeset 61 04dfd43dfecc
child 63 3df3da063cff
equal deleted inserted replaced
60:5ca3aa8d75e1 61:04dfd43dfecc
       
     1 import ConfigParser
       
     2 
       
     3 import threading
       
     4 
       
     5 from multiprocessing import Queue
       
     6 from multiprocessing.managers import BaseManager
       
     7 
       
     8 from iro import xmlrpc,anbieter
       
     9 from iro.user import User, Admin
       
    10 from iro.iro import MySMTP,MySmstrade,MyUserDB
       
    11 from iro.job import SMSJob, FAXJob, MailJob
       
    12 from iro.joblist import Joblist
       
    13 from iro.providerlist import Providerlist
       
    14 
       
    15 class StoppableXMLRPCServer(xmlrpc.SecureUserDBXMLRPCServer, threading.Thread):
       
    16     running=False
       
    17     def __init__(self, *args, **kwargs):
       
    18         xmlrpc.SecureUserDBXMLRPCServer.__init__(self, *args, **kwargs)
       
    19         threading.Thread.__init__(self)
       
    20         self.timeout=.5
       
    21    
       
    22     def start(self):
       
    23         self.running=True
       
    24         threading.Thread.start(self)
       
    25  
       
    26    
       
    27     def run(self):
       
    28         # *serve_forever* muss in einem eigenen Thread laufen, damit man es
       
    29         # unterbrochen werden kann!
       
    30         while (self.running):
       
    31             try:
       
    32                 self.handle_request()
       
    33             except :
       
    34                 break
       
    35    
       
    36     def stop(self):
       
    37         if (self.running):
       
    38             self.running=False
       
    39             self.server_close()
       
    40             self.join()
       
    41 
       
    42     def __del__(self):
       
    43         self.stop()
       
    44  
       
    45     def __enter__(self):
       
    46         self.start()
       
    47         return self
       
    48 
       
    49     def __exit__(self,type,value,traceback):
       
    50         self.stop()
       
    51 
       
    52 
       
    53 
       
    54 def init_server():
       
    55     userlist=[{"name":"test","password":"test",  "class":User},
       
    56               {"name":"test2","password":"test2", "class": User},
       
    57               {"name":"admin","password":"admin", "class": Admin}]
       
    58 
       
    59 
       
    60     
       
    61     class MyManager(BaseManager):
       
    62         pass
       
    63     
       
    64     MyManager.register('SMSJob', SMSJob) 
       
    65     MyManager.register('FAXob', FAXJob) 
       
    66     MyManager.register('MailJob',MailJob) 
       
    67     MyManager.register('Providerlist',Providerlist) 
       
    68     manager = MyManager()
       
    69     manager.start()
       
    70     
       
    71     
       
    72     #anbieter erzeugen und konfigurieren
       
    73     sip=anbieter.sipgate()
       
    74     sip.read_basic_config("iro.conf")
       
    75     
       
    76     localhost=MySMTP()
       
    77     localhost.read_basic_config("iro.conf")
       
    78 
       
    79     smstrade=MySmstrade()
       
    80     smstrade.read_basic_config("iro.conf")
       
    81 
       
    82     #Benutzerdatenbank erstellen
       
    83     queue = Queue()
       
    84     provider=Providerlist()
       
    85     provider.add("sipgate", sip, ["sms", "fax", ])
       
    86     provider.add("smstrade", smstrade, ["sms", ])
       
    87     provider.add("geonet", None, ["sms", "fax", ])
       
    88     provider.add("fax.de", None, ["sms", "fax", ])
       
    89     provider.add("localhost", localhost, ["mail", ])
       
    90     provider.setDefault("sms","smstrade")
       
    91     provider.setDefault("fax","sipgate")
       
    92     provider.setDefault("mail","localhost")
       
    93     jobqueue=Joblist(manager,  queue, provider)
       
    94     userdb=MyUserDB(userlist,jobqueue)
       
    95 
       
    96 
       
    97     #Server starten
       
    98     cp = ConfigParser.ConfigParser()
       
    99     cp.read(["iro.conf"])
       
   100     cert=cp.get('server', 'cert')
       
   101     key=cp.get('server', 'key')
       
   102     serv = StoppableXMLRPCServer(addr=("localhost", 8000), 
       
   103                                       userdb=userdb,
       
   104                                       certificate=cert,privatekey=key,
       
   105                                       logRequests=False)
       
   106     serv.relam="xmlrpc"
       
   107     return serv
       
   108