iro/install.py
author Sandro Knauß <knauss@netzguerilla.net>
Sat, 10 Mar 2012 19:03:02 +0100
branchdevel
changeset 221 c8615310da30
child 226 5f1e9eb30709
permissions -rw-r--r--
adding install functions like checkDatabase, checkConfig etc. + tests

from twisted.python import log
from sqlalchemy import create_engine
from sqlalchemy.exc import DatabaseError
import os

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

from model.schema import Base
import config

def checkConfig():
    try:
        l = configParser.read(confFiles)
        if len(l) > 0:
            return True
        return False
    except NeededOption as e:
        log.msg("Error while processing config file: %s"%e)
        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)
        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 check():
    if checkConfig() and checkDatabaseConnection() and checkDatabase():
        return True
    return False