iro/install.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 30 Mar 2012 11:23:22 +0200
branchdevel
changeset 267 ef2df3f23cb1
parent 242 745d829d1e02
child 285 9eb5b7ff0e38
permissions -rw-r--r--
adding docstring: iro
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():
267
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    20
    """check configuration file syntax.
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    21
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    22
    :return: boolena value.
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    23
    """
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    24
            
221
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
    try:
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
        l = configParser.read(confFiles)
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
        if len(l) > 0:
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    28
            return True
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    29
        return False
226
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    30
    except (NeededOption,ValidateException) as e:
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    31
        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
    32
        return False
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 checkDatabase():
267
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    35
    """Checks, if all tables are created.
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    36
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    37
    :return: boolean value
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    38
    """
221
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    39
    engine = create_engine(config.main.dburl)
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    40
    for t in Base.metadata.sorted_tables:
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    41
        if not t.exists(engine):
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
    return True
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    44
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    45
def checkDatabaseConnection():
267
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    46
    """Checks, if database can be connected.
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    47
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    48
    :return: boolean value
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    49
    """
221
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    50
    try:
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
        engine = create_engine(config.main.dburl)
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    52
        con = engine.connect()
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    53
        con.close()
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    54
        return True
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    55
    except DatabaseError as e:
226
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    56
        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
    57
        return False
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    58
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    59
def createDatabase():
267
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    60
    """Create all database tables or only missing."""
221
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    61
    engine = create_engine(config.main.dburl)
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    62
    Base.metadata.create_all(engine)
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    63
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    64
def createSampleConfig():
267
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    65
    """create a sample configuration file 'iro.conf' with all possible provider sections."""
221
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    66
    if not os.path.exists("iro.conf"):
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    67
        with open("iro.conf",'w') as fp:
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    68
            fp.write("\n".join(main.sampleConf()))
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    69
            fp.write("\n")
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    70
            k = providers.keys()
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    71
            k.sort()
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    72
            for p in k:
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    73
                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
    74
                fp.write("\n")
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    75
    else:
c8615310da30 adding install functions like checkDatabase, checkConfig etc. + tests
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    76
        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
    77
226
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    78
def getAllRoutes(providers,write=False):
267
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    79
    """Checks and update offer list.
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    80
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    81
    :param boolean write: check or update list
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    82
    :return dict:
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    83
        - **"orphand"** (Set) -- a set of orphand offers
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    84
        - **"added"** (Set) -- a set of new offers. The new name have a schema provider_typ_route
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    85
                
ef2df3f23cb1 adding docstring: iro
Sandro Knauß <knauss@netzguerilla.net>
parents: 242
diff changeset
    86
    """
226
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    87
    engine = create_engine(config.main.dburl)
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    88
    ret={"orphand":Set(),"added":Set()}
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    89
    with WithSession(engine,write) as session:
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    90
        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
    91
        for provider in providers:
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    92
            p=getProvider(provider,configParser.get(provider,"typ"),configParser.items(provider))
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    93
            for t in p.typs:
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    94
                for r in p.typs[t]:
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    95
                    try:
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    96
                        ret["orphand"].remove(Offer.get(session, provider, r, t).name)
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
    97
                    except:
242
745d829d1e02 tests for iro.install.getAllRoutes added
Sandro Knauß <knauss@netzguerilla.net>
parents: 226
diff changeset
    98
                        if write:
745d829d1e02 tests for iro.install.getAllRoutes added
Sandro Knauß <knauss@netzguerilla.net>
parents: 226
diff changeset
    99
                            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
   100
                        ret["added"].add("%s_%s_%s"%(provider,t,r))
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
   101
    return ret
5f1e9eb30709 adding install.getAllRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 221
diff changeset
   102