iro/iro.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 10 Aug 2012 13:20:42 +0200
branchdevel
changeset 286 ec5a280707f3
child 294 0e75bd39767d
permissions -rw-r--r--
extras/iro.tac: moving makeService to iro package.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
286
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
from twisted.application.service import Service, MultiService
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     2
from twisted.application import internet
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     3
from twisted.web import resource, server
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
from twisted.internet import reactor
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     5
from twisted.python import log
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
from sqlalchemy import create_engine, pool
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     8
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
import config, install
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    10
from .view import xmlrpc
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    11
from .model import setEngine, setPool
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    12
from .controller.pool import startPool, dbPool
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    13
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    14
class IroService(Service):
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    15
    def startService(self):
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
        log.msg("Starting service...")
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
        engine = create_engine(config.main.dburl,
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    18
               poolclass = pool.SingletonThreadPool,  pool_size=dbPool.maxthreads, )
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    19
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
        setEngine(engine)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    21
        startPool(reactor)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    22
        setPool(dbPool)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
        reactor.callWhenRunning(config.readConfig)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
        Service.startService(self)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
def makeService(cfg):
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    28
    top_service = MultiService()
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    29
    config.confFiles.insert(0, cfg["config"])
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    30
    if not install.checkConfig():
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    31
        log.err("You can create a sample configuration file by running iro-install")
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
        raise Exception("Please update or create your configuration file %s." % cfg["config"])
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    33
    config.init()
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    34
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    35
    if not install.checkDatabaseConnection():
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    36
        raise Exception("Can't connect to database")
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    37
    
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    38
    if not install.checkDatabase():
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    39
        raise Exception("Database not in right format. Please run iro-install --install")
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    40
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    41
    routes = [ s for s in config.configParser.sections() if not s in ["main",]]
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    42
    ao =  install.getAllRoutes(routes, False)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    43
    for o in  ao["orphand"]:
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    44
        log.msg("Offer(%s) is orphand (no route using this offer)."%o)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    45
    if ao["added"]:
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    46
        raise Exception("offerlist is not up-to-date.\nPlease run iro-install --update")
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    47
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    48
    root = resource.Resource()
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    49
    root = xmlrpc.appendResource(root)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    50
    
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
    v2 = resource.Resource()
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    52
    v2 = xmlrpc.appendResource(root)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    53
    root.putChild('1.0a', v2)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    54
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    55
    internet.TCPServer(config.main.port, server.Site(root)).setServiceParent(top_service)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    56
    IroService().setServiceParent(top_service)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    57
    return top_service