iro/iro.py
author Sandro Knauß <knauss@netzguerilla.net>
Thu, 27 Sep 2012 17:15:46 +0200
changeset 302 3f4bdea2abbf
parent 67 d1912509f375
parent 298 503ed1a61543
child 308 a891fdd0c1a9
permissions -rw-r--r--
merging from devel
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
294
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
     1
# Copyright (c) 2012 netzguerilla.net <iro@netzguerilla.net>
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
     2
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
     3
# This file is part of Iro.
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
     4
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
     5
# Permission is hereby granted, free of charge, to any person obtaining a copy of
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
     6
# this software and associated documentation files (the "Software"), to deal in
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
     7
# the Software without restriction, including without limitation the rights to use,
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
     8
# copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
     9
# #Software, and to permit persons to whom the Software is furnished to do so,
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
    10
# subject to the following conditions:
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
    11
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
    12
# The above copyright notice and this permission notice shall be included in
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
    13
# all copies or substantial portions of the Software.
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
    14
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
    15
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
    16
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
    17
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
    18
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
    19
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
    20
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 286
diff changeset
    21
286
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    22
from twisted.application.service import Service, MultiService
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
from twisted.application import internet
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
from twisted.web import resource, server
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
from twisted.internet import reactor
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
from twisted.python import log
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    28
from sqlalchemy import create_engine, pool
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    29
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    30
import config, install
297
93686b0c028b adding json interface
Sandro Knauß <knauss@netzguerilla.net>
parents: 296
diff changeset
    31
from .view import xmlrpc, jsonrpc, jsonresource
286
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
from .model import setEngine, setPool
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    33
from .controller.pool import startPool, dbPool
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
class IroService(Service):
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    36
    def startService(self):
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    37
        log.msg("Starting service...")
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    38
        engine = create_engine(config.main.dburl,
298
503ed1a61543 fixing MySQL server has gone away
Sandro Knauß <knauss@netzguerilla.net>
parents: 297
diff changeset
    39
               poolclass = pool.SingletonThreadPool,  pool_size=dbPool.maxthreads, pool_recycle=3600)
286
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
        setEngine(engine)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    42
        startPool(reactor)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    43
        setPool(dbPool)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    44
        reactor.callWhenRunning(config.readConfig)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    45
        Service.startService(self)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    46
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
def makeService(cfg):
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    49
    top_service = MultiService()
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    50
    config.confFiles.insert(0, cfg["config"])
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
    if not install.checkConfig():
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    52
        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
    53
        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
    54
    config.init()
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    55
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    56
    if not install.checkDatabaseConnection():
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    57
        raise Exception("Can't connect to database")
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    58
    
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    59
    if not install.checkDatabase():
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    60
        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
    61
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    62
    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
    63
    ao =  install.getAllRoutes(routes, False)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    64
    for o in  ao["orphand"]:
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    65
        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
    66
    if ao["added"]:
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    67
        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
    68
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    69
    root = resource.Resource()
296
a73bbc1d8b4b adding jsonrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents: 294
diff changeset
    70
    xmlrpc.appendResource(root)
a73bbc1d8b4b adding jsonrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents: 294
diff changeset
    71
    jsonrpc.appendResource(root)
297
93686b0c028b adding json interface
Sandro Knauß <knauss@netzguerilla.net>
parents: 296
diff changeset
    72
    jsonresource.appendResource(root)
286
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    73
    
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    74
    v2 = resource.Resource()
296
a73bbc1d8b4b adding jsonrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents: 294
diff changeset
    75
    xmlrpc.appendResource(v2)
a73bbc1d8b4b adding jsonrpc interface
Sandro Knauß <knauss@netzguerilla.net>
parents: 294
diff changeset
    76
    jsonrpc.appendResource(v2)
297
93686b0c028b adding json interface
Sandro Knauß <knauss@netzguerilla.net>
parents: 296
diff changeset
    77
    jsonresource.appendResource(v2)
286
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    78
    root.putChild('1.0a', v2)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    79
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    80
    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
    81
    IroService().setServiceParent(top_service)
ec5a280707f3 extras/iro.tac: moving makeService to iro package.
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    82
    return top_service