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 |