iro/install.py
branchdevel
changeset 226 5f1e9eb30709
parent 221 c8615310da30
child 242 745d829d1e02
equal deleted inserted replaced
225:70dafbaf21af 226:5f1e9eb30709
     1 from twisted.python import log
     1 from twisted.python import log
       
     2 import logging
     2 from sqlalchemy import create_engine
     3 from sqlalchemy import create_engine
     3 from sqlalchemy.exc import DatabaseError
     4 from sqlalchemy.exc import DatabaseError
       
     5 from sets import Set
     4 import os
     6 import os
     5 
     7 
     6 from config import configParser, confFiles, main
     8 from .config import configParser, confFiles, main
     7 from error import NeededOption
     9 from .error import NeededOption, ValidateException
     8 from offer.provider import providers
    10 from .offer.provider import providers, getProvider
     9 
    11 
    10 from model.schema import Base
    12 from .model.schema import Base, Offer
    11 import config
    13 from .model.utils import WithSession
       
    14 
       
    15 from . import config
    12 
    16 
    13 def checkConfig():
    17 def checkConfig():
    14     try:
    18     try:
    15         l = configParser.read(confFiles)
    19         l = configParser.read(confFiles)
    16         if len(l) > 0:
    20         if len(l) > 0:
    17             return True
    21             return True
    18         return False
    22         return False
    19     except NeededOption as e:
    23     except (NeededOption,ValidateException) as e:
    20         log.msg("Error while processing config file: %s"%e)
    24         log.msg("Error while processing config file: %s"%e,logLevel=logging.ERROR)
    21         return False
    25         return False
    22 
    26 
    23 def checkDatabase():
    27 def checkDatabase():
    24     engine = create_engine(config.main.dburl)
    28     engine = create_engine(config.main.dburl)
    25     for t in Base.metadata.sorted_tables:
    29     for t in Base.metadata.sorted_tables:
    32         engine = create_engine(config.main.dburl)
    36         engine = create_engine(config.main.dburl)
    33         con = engine.connect()
    37         con = engine.connect()
    34         con.close()
    38         con.close()
    35         return True
    39         return True
    36     except DatabaseError as e:
    40     except DatabaseError as e:
    37         log.msg("Error while trying to connect to database\n%s"%e)
    41         log.msg("Error while trying to connect to database\n%s"%e,logLevel=logging.ERROR)
    38         return False
    42         return False
    39 
    43 
    40 def createDatabase():
    44 def createDatabase():
    41     engine = create_engine(config.main.dburl)
    45     engine = create_engine(config.main.dburl)
    42     Base.metadata.create_all(engine)
    46     Base.metadata.create_all(engine)
    52                 fp.write("\n".join(providers[p](p).sampleConf()))
    56                 fp.write("\n".join(providers[p](p).sampleConf()))
    53                 fp.write("\n")
    57                 fp.write("\n")
    54     else:
    58     else:
    55         log.msg("iro.conf exists and will not be overwritten.")
    59         log.msg("iro.conf exists and will not be overwritten.")
    56 
    60 
    57 def check():
    61 def getAllRoutes(providers,write=False):
    58     if checkConfig() and checkDatabaseConnection() and checkDatabase():
    62     engine = create_engine(config.main.dburl)
    59         return True
    63     ret={"orphand":Set(),"added":Set()}
    60     return False
    64     with WithSession(engine,write) as session:
       
    65         ret["orphand"]=Set([i[0] for i in session.query(Offer.name).all()])
       
    66         for provider in providers:
       
    67             p=getProvider(provider,configParser.get(provider,"typ"),configParser.items(provider))
       
    68             for t in p.typs:
       
    69                 for r in p.typs[t]:
       
    70                     try:
       
    71                         ret["orphand"].remove(Offer.get(session, provider, r, t).name)
       
    72                     except:
       
    73                         session.add(Offer(provider=provider,route=r,typ=t,name='%s_%s_%s'%(provider,t,r)))
       
    74                         ret["added"].add("%s_%s_%s"%(provider,t,r))
       
    75     return ret
       
    76