iro/install.py
author Sandro Knauß <knauss@netzguerilla.net>
Wed, 21 Mar 2012 19:43:36 +0100
branchdevel
changeset 240 3406d3bf05d4
parent 226 5f1e9eb30709
child 242 745d829d1e02
permissions -rw-r--r--
removing old files

from twisted.python import log
import logging
from sqlalchemy import create_engine
from sqlalchemy.exc import DatabaseError
from sets import Set
import os

from .config import configParser, confFiles, main
from .error import NeededOption, ValidateException
from .offer.provider import providers, getProvider

from .model.schema import Base, Offer
from .model.utils import WithSession

from . import config

def checkConfig():
    try:
        l = configParser.read(confFiles)
        if len(l) > 0:
            return True
        return False
    except (NeededOption,ValidateException) as e:
        log.msg("Error while processing config file: %s"%e,logLevel=logging.ERROR)
        return False

def checkDatabase():
    engine = create_engine(config.main.dburl)
    for t in Base.metadata.sorted_tables:
        if not t.exists(engine):
            return False
    return True

def checkDatabaseConnection():
    try:
        engine = create_engine(config.main.dburl)
        con = engine.connect()
        con.close()
        return True
    except DatabaseError as e:
        log.msg("Error while trying to connect to database\n%s"%e,logLevel=logging.ERROR)
        return False

def createDatabase():
    engine = create_engine(config.main.dburl)
    Base.metadata.create_all(engine)

def createSampleConfig():
    if not os.path.exists("iro.conf"):
        with open("iro.conf",'w') as fp:
            fp.write("\n".join(main.sampleConf()))
            fp.write("\n")
            k = providers.keys()
            k.sort()
            for p in k:
                fp.write("\n".join(providers[p](p).sampleConf()))
                fp.write("\n")
    else:
        log.msg("iro.conf exists and will not be overwritten.")

def getAllRoutes(providers,write=False):
    engine = create_engine(config.main.dburl)
    ret={"orphand":Set(),"added":Set()}
    with WithSession(engine,write) as session:
        ret["orphand"]=Set([i[0] for i in session.query(Offer.name).all()])
        for provider in providers:
            p=getProvider(provider,configParser.get(provider,"typ"),configParser.items(provider))
            for t in p.typs:
                for r in p.typs[t]:
                    try:
                        ret["orphand"].remove(Offer.get(session, provider, r, t).name)
                    except:
                        session.add(Offer(provider=provider,route=r,typ=t,name='%s_%s_%s'%(provider,t,r)))
                        ret["added"].add("%s_%s_%s"%(provider,t,r))
    return ret