iro/tests/stopableServer.py
author Sandro Knauß <knauss@netzguerilla.net>
Sun, 18 Dec 2011 11:49:46 +0100
branchdevel
changeset 77 7dce6c0f06fb
parent 63 3df3da063cff
permissions -rw-r--r--
adding database schema to documentation.
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
63
3df3da063cff testJob - prüft, ob SMS, Fax und MailJobs richtig in der Queue landen
Sandro Knauß <knauss@netzguerilla.net>
parents: 61
diff changeset
    53
class Internal:
3df3da063cff testJob - prüft, ob SMS, Fax und MailJobs richtig in der Queue landen
Sandro Knauß <knauss@netzguerilla.net>
parents: 61
diff changeset
    54
    pass
61
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    55
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    56
def init_server():
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    57
    userlist=[{"name":"test","password":"test",  "class":User},
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    58
              {"name":"test2","password":"test2", "class": User},
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    59
              {"name":"admin","password":"admin", "class": Admin}]
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
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    62
    
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    63
    class MyManager(BaseManager):
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    64
        pass
63
3df3da063cff testJob - prüft, ob SMS, Fax und MailJobs richtig in der Queue landen
Sandro Knauß <knauss@netzguerilla.net>
parents: 61
diff changeset
    65
3df3da063cff testJob - prüft, ob SMS, Fax und MailJobs richtig in der Queue landen
Sandro Knauß <knauss@netzguerilla.net>
parents: 61
diff changeset
    66
    internal=Internal()
61
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    67
    
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    68
    MyManager.register('SMSJob', SMSJob) 
63
3df3da063cff testJob - prüft, ob SMS, Fax und MailJobs richtig in der Queue landen
Sandro Knauß <knauss@netzguerilla.net>
parents: 61
diff changeset
    69
    MyManager.register('FaxJob', FAXJob) 
61
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    70
    MyManager.register('MailJob',MailJob) 
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    71
    MyManager.register('Providerlist',Providerlist) 
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    72
    manager = MyManager()
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    73
    manager.start()
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    74
    
63
3df3da063cff testJob - prüft, ob SMS, Fax und MailJobs richtig in der Queue landen
Sandro Knauß <knauss@netzguerilla.net>
parents: 61
diff changeset
    75
    internal.manager=manager
61
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    76
    
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    77
    #anbieter erzeugen und konfigurieren
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    78
    sip=anbieter.sipgate()
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    79
    sip.read_basic_config("iro.conf")
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    80
    
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    81
    localhost=MySMTP()
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    82
    localhost.read_basic_config("iro.conf")
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    83
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    84
    smstrade=MySmstrade()
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    85
    smstrade.read_basic_config("iro.conf")
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    86
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    87
    #Benutzerdatenbank erstellen
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    88
    queue = Queue()
63
3df3da063cff testJob - prüft, ob SMS, Fax und MailJobs richtig in der Queue landen
Sandro Knauß <knauss@netzguerilla.net>
parents: 61
diff changeset
    89
    internal.queue=queue
61
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    90
    provider=Providerlist()
63
3df3da063cff testJob - prüft, ob SMS, Fax und MailJobs richtig in der Queue landen
Sandro Knauß <knauss@netzguerilla.net>
parents: 61
diff changeset
    91
    internal.provider=provider
61
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    92
    provider.add("sipgate", sip, ["sms", "fax", ])
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    93
    provider.add("smstrade", smstrade, ["sms", ])
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    94
    provider.add("geonet", None, ["sms", "fax", ])
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    95
    provider.add("fax.de", None, ["sms", "fax", ])
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    96
    provider.add("localhost", localhost, ["mail", ])
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    97
    provider.setDefault("sms","smstrade")
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    98
    provider.setDefault("fax","sipgate")
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    99
    provider.setDefault("mail","localhost")
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   100
    jobqueue=Joblist(manager,  queue, provider)
63
3df3da063cff testJob - prüft, ob SMS, Fax und MailJobs richtig in der Queue landen
Sandro Knauß <knauss@netzguerilla.net>
parents: 61
diff changeset
   101
    internal.jobqueue=jobqueue
61
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   102
    userdb=MyUserDB(userlist,jobqueue)
63
3df3da063cff testJob - prüft, ob SMS, Fax und MailJobs richtig in der Queue landen
Sandro Knauß <knauss@netzguerilla.net>
parents: 61
diff changeset
   103
    internal.userdb=userdb
61
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   104
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   105
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   106
    #Server starten
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   107
    cp = ConfigParser.ConfigParser()
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   108
    cp.read(["iro.conf"])
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   109
    cert=cp.get('server', 'cert')
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   110
    key=cp.get('server', 'key')
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   111
    serv = StoppableXMLRPCServer(addr=("localhost", 8000), 
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   112
                                      userdb=userdb,
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   113
                                      certificate=cert,privatekey=key,
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   114
                                      logRequests=False)
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   115
    serv.relam="xmlrpc"
63
3df3da063cff testJob - prüft, ob SMS, Fax und MailJobs richtig in der Queue landen
Sandro Knauß <knauss@netzguerilla.net>
parents: 61
diff changeset
   116
    internal.serv=serv
3df3da063cff testJob - prüft, ob SMS, Fax und MailJobs richtig in der Queue landen
Sandro Knauß <knauss@netzguerilla.net>
parents: 61
diff changeset
   117
    return internal
61
04dfd43dfecc nun wird hashlib benutzt anstatt md5
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   118