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