diff -r 9eb5b7ff0e38 -r ec5a280707f3 iro/iro.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iro/iro.py Fri Aug 10 13:20:42 2012 +0200 @@ -0,0 +1,57 @@ +from twisted.application.service import Service, MultiService +from twisted.application import internet +from twisted.web import resource, server +from twisted.internet import reactor +from twisted.python import log + +from sqlalchemy import create_engine, pool + +import config, install +from .view import xmlrpc +from .model import setEngine, setPool +from .controller.pool import startPool, dbPool + +class IroService(Service): + def startService(self): + log.msg("Starting service...") + engine = create_engine(config.main.dburl, + poolclass = pool.SingletonThreadPool, pool_size=dbPool.maxthreads, ) + + setEngine(engine) + startPool(reactor) + setPool(dbPool) + reactor.callWhenRunning(config.readConfig) + Service.startService(self) + + +def makeService(cfg): + top_service = MultiService() + config.confFiles.insert(0, cfg["config"]) + if not install.checkConfig(): + log.err("You can create a sample configuration file by running iro-install") + raise Exception("Please update or create your configuration file %s." % cfg["config"]) + config.init() + + if not install.checkDatabaseConnection(): + raise Exception("Can't connect to database") + + if not install.checkDatabase(): + raise Exception("Database not in right format. Please run iro-install --install") + + routes = [ s for s in config.configParser.sections() if not s in ["main",]] + ao = install.getAllRoutes(routes, False) + for o in ao["orphand"]: + log.msg("Offer(%s) is orphand (no route using this offer)."%o) + if ao["added"]: + raise Exception("offerlist is not up-to-date.\nPlease run iro-install --update") + + root = resource.Resource() + root = xmlrpc.appendResource(root) + + v2 = resource.Resource() + v2 = xmlrpc.appendResource(root) + root.putChild('1.0a', v2) + + internet.TCPServer(config.main.port, server.Site(root)).setServiceParent(top_service) + IroService().setServiceParent(top_service) + return top_service