from twisted.python import log
import logging
from sqlalchemy import create_engine
from sqlalchemy.exc import DatabaseError
from sets import Set
import os
from .config import configParser, confFiles, main
from .error import NeededOption, ValidateException
from .offer.provider import providers, getProvider
from .model.schema import Base, Offer
from .model.utils import WithSession
from . import config
def checkConfig():
try:
l = configParser.read(confFiles)
if len(l) > 0:
return True
return False
except (NeededOption,ValidateException) as e:
log.msg("Error while processing config file: %s"%e,logLevel=logging.ERROR)
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,logLevel=logging.ERROR)
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 getAllRoutes(providers,write=False):
engine = create_engine(config.main.dburl)
ret={"orphand":Set(),"added":Set()}
with WithSession(engine,write) as session:
ret["orphand"]=Set([i[0] for i in session.query(Offer.name).all()])
for provider in providers:
p=getProvider(provider,configParser.get(provider,"typ"),configParser.items(provider))
for t in p.typs:
for r in p.typs[t]:
try:
ret["orphand"].remove(Offer.get(session, provider, r, t).name)
except:
session.add(Offer(provider=provider,route=r,typ=t,name='%s_%s_%s'%(provider,t,r)))
ret["added"].add("%s_%s_%s"%(provider,t,r))
return ret