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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
221
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
from twisted.python import log
226
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
     2
import logging
221
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     3
from sqlalchemy import create_engine
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
from sqlalchemy.exc import DatabaseError
226
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
     5
from sets import Set
221
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
import os
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
226
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
     8
from .config import configParser, confFiles, main
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
     9
from .error import NeededOption, ValidateException
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    10
from .offer.provider import providers, getProvider
221
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    11
226
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    12
from .model.schema import Base, Offer
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    13
from .model.utils import WithSession
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    14
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    15
from . import config
221
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
def checkConfig():
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    18
    try:
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    19
        l = configParser.read(confFiles)
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
        if len(l) > 0:
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    21
            return True
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    22
        return False
226
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    23
    except (NeededOption,ValidateException) as e:
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    24
        log.msg("Error while processing config file: %s"%e,logLevel=logging.ERROR)
221
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
        return False
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
def checkDatabase():
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    28
    engine = create_engine(config.main.dburl)
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    29
    for t in Base.metadata.sorted_tables:
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    30
        if not t.exists(engine):
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    31
            return False
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
    return True
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    33
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    34
def checkDatabaseConnection():
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    35
    try:
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    36
        engine = create_engine(config.main.dburl)
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    37
        con = engine.connect()
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    38
        con.close()
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    39
        return True
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    40
    except DatabaseError as e:
226
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    41
        log.msg("Error while trying to connect to database\n%s"%e,logLevel=logging.ERROR)
221
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    42
        return False
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    43
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    44
def createDatabase():
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    45
    engine = create_engine(config.main.dburl)
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    46
    Base.metadata.create_all(engine)
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    47
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    48
def createSampleConfig():
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    49
    if not os.path.exists("iro.conf"):
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    50
        with open("iro.conf",'w') as fp:
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
            fp.write("\n".join(main.sampleConf()))
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    52
            fp.write("\n")
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    53
            k = providers.keys()
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    54
            k.sort()
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    55
            for p in k:
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    56
                fp.write("\n".join(providers[p](p).sampleConf()))
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    57
                fp.write("\n")
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    58
    else:
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    59
        log.msg("iro.conf exists and will not be overwritten.")
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    60
226
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    61
def getAllRoutes(providers,write=False):
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    62
    engine = create_engine(config.main.dburl)
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    63
    ret={"orphand":Set(),"added":Set()}
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    64
    with WithSession(engine,write) as session:
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    65
        ret["orphand"]=Set([i[0] for i in session.query(Offer.name).all()])
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    66
        for provider in providers:
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    67
            p=getProvider(provider,configParser.get(provider,"typ"),configParser.items(provider))
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    68
            for t in p.typs:
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    69
                for r in p.typs[t]:
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    70
                    try:
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    71
                        ret["orphand"].remove(Offer.get(session, provider, r, t).name)
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    72
                    except:
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    73
                        session.add(Offer(provider=provider,route=r,typ=t,name='%s_%s_%s'%(provider,t,r)))
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    74
                        ret["added"].add("%s_%s_%s"%(provider,t,r))
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    75
    return ret
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    76