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