iro/install.py
branchdevel
changeset 226 5f1e9eb30709
parent 221 c8615310da30
child 242 745d829d1e02
--- a/iro/install.py	Sun Mar 11 16:38:37 2012 +0100
+++ b/iro/install.py	Sun Mar 11 16:39:40 2012 +0100
@@ -1,14 +1,18 @@
 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
-from offer.provider import providers
+from .config import configParser, confFiles, main
+from .error import NeededOption, ValidateException
+from .offer.provider import providers, getProvider
 
-from model.schema import Base
-import config
+from .model.schema import Base, Offer
+from .model.utils import WithSession
+
+from . import config
 
 def checkConfig():
     try:
@@ -16,8 +20,8 @@
         if len(l) > 0:
             return True
         return False
-    except NeededOption as e:
-        log.msg("Error while processing config file: %s"%e)
+    except (NeededOption,ValidateException) as e:
+        log.msg("Error while processing config file: %s"%e,logLevel=logging.ERROR)
         return False
 
 def checkDatabase():
@@ -34,7 +38,7 @@
         con.close()
         return True
     except DatabaseError as e:
-        log.msg("Error while trying to connect to database\n%s"%e)
+        log.msg("Error while trying to connect to database\n%s"%e,logLevel=logging.ERROR)
         return False
 
 def createDatabase():
@@ -54,7 +58,19 @@
     else:
         log.msg("iro.conf exists and will not be overwritten.")
 
-def check():
-    if checkConfig() and checkDatabaseConnection() and checkDatabase():
-        return True
-    return False
+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
+