[Bio] / KahApp / KahFwk.py Repository:
ViewVC logotype

Annotation of /KahApp/KahFwk.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (view) (download) (as text)

1 : efrank 1.1 #!/usr/bin/env python
2 :     import sys
3 :    
4 :     from KahApp.KahConfigMgr import KahConfigMgr
5 :     from CatalogServices.Catalog import Catalog
6 :    
7 :     from KahDataServices.KahDbDataFactory import KahDbDataFactory
8 :     from KahChemDb.KahChemDbDataFactory import KahChemDbDataFactory
9 :     from KahDataServices.SeedDataFactory import SeedDataFactory
10 :    
11 :     #------------------------------------------------------------------------
12 :     def die(msg):
13 :     #------------------------------------------------------------------------
14 :     print msg
15 :     sys.exit(1)
16 :     return
17 :    
18 :    
19 :     class KahFwk:
20 :     #------------------------------------------------------------------------
21 :     def __init__(self):
22 :     #------------------------------------------------------------------------
23 :     self.nameToInstance = {} # map instance name to instance
24 :     self.exeChain=[] #list of modules in order to call them
25 :    
26 :     self.configMgr = KahConfigMgr()
27 :    
28 :     self.setupConfig()
29 :    
30 :     self.getModules()
31 :    
32 :     self.configModules()
33 :    
34 :     self.doDefaultDataFactories()
35 :     self.loadModel()
36 :    
37 :     return
38 :    
39 :     #------------------------------------------------------------------------
40 :     def setupConfig( self ):
41 :     #------------------------------------------------------------------------
42 :    
43 :     # Config ourselves. Unusual usage of configMgr.
44 :    
45 :     self.configMgr.newSection( "KahFwk" )
46 :     cfg = self.configMgr.getSection( "KahFwk" )
47 :    
48 :     cfg.regString( "DefaultSeedInstance", "http://theSeed.uchicago.edu/FIG" )
49 :     cfg.regString( "DefaultDataFactory", "kahchoo/bss@db02" )
50 :     cfg.regString( "DefaultDataFactoryDbType", "oracle" )
51 :     cfg.regString( "DefaultChemDb", "pgsql:5432:kahdb:trust:inme" )
52 :     cfg.regString( "DefaultChemDbType", "postgres" )
53 :     cfg.regStringList( "ModuleList", [] )
54 :     cfg.regString( "InModelPath", "")
55 :    
56 :     # first loadConfigFile snarfs in the module list
57 :    
58 :     self.configMgr.loadConfigFile( "KahFwk.cfg" )
59 :    
60 :     #------------------------------------------------------------------------
61 :     def configModules( self ):
62 :     #------------------------------------------------------------------------
63 :    
64 :     # let modules config themselves
65 :    
66 :     for m in self.exeChain:
67 :     cfg = self.configMgr.newSection( m.name() )
68 :     m.config(cfg)
69 :    
70 :     # now load the config file to override default vlues
71 :    
72 :     self.configMgr.loadConfigFile( "KahFwk.cfg" )
73 :     self.configMgr.dump()
74 :    
75 :     return
76 :    
77 :    
78 :     #------------------------------------------------------------------------
79 :     def doDefaultDataFactories(self):
80 :     #------------------------------------------------------------------------
81 :    
82 :     cfg = self.configMgr.getSection( "KahFwk" )
83 :     ddf = cfg.getString("DefaultDataFactory")
84 :     ddft = cfg.getString( "DefaultDataFactoryDbType")
85 :     dchem = cfg.getString( "DefaultChemDb")
86 :     dchemt = cfg.getString( "DefaultChemDbType")
87 :     dseed = cfg.getString( "DefaultSeedInstance")
88 :    
89 :     # nb: making these datafactories auto registeres them in catalog
90 :    
91 :     try:
92 :     chem = KahChemDbDataFactory( dchem, dchemt )
93 :     except NotImplementedError:
94 :     pass
95 :    
96 :     try:
97 :     df = KahDbDataFactory( ddf, ddft )
98 :     except NotImplementedError:
99 :     pass
100 :    
101 :     try:
102 :     sdf = SeedDataFactory( dseed)
103 :     except Exception, e:
104 :     print "Exception getting default seed instance, %s", e
105 :    
106 :     return
107 :    
108 :     #------------------------------------------------------------------------
109 :     def getModules(self):
110 :     #------------------------------------------------------------------------
111 :    
112 :     cfg = self.configMgr.getSection( "KahFwk" )
113 :    
114 :     moduleList = cfg.getStringList("ModuleList")
115 :     for p in moduleList:
116 :     print "trying to get module named: ", p
117 :    
118 :     try:
119 :     mod = __import__( p, globals(), locals(), "registerHook" )
120 :     mod.registerHook( self.addModuleToWeb )
121 :     except ImportError, e:
122 :     die( "Could not import %s: %s" % (p, e) )
123 :     except LookupError:
124 :     die("No register hook called 'register' found in module.")
125 :    
126 :     return
127 :    
128 :     #------------------------------------------------------------------------
129 :     def addModuleToWeb(self, instanceName, helpString, instance):
130 :     #------------------------------------------------------------------------
131 :     """
132 :     maintain the execution web.
133 :     Note- instanceName is carryOver from ModelEditor where it's the
134 :     dropdown menu item name. here we want to enforce that it comes
135 :     from the actual init of the kahModule.
136 :     """
137 :    
138 :     if instanceName in self.nameToInstance.keys():
139 :     die("Duplicate module instance name %s" % instanceName)
140 :    
141 :     self.nameToInstance[instance.name()] = instance
142 :     self.exeChain.append(instance)
143 :    
144 :     return
145 :    
146 :    
147 :     #------------------------------------------------------------------------
148 :     def loadModel(self):
149 :     #------------------------------------------------------------------------
150 :    
151 :     cfg = self.configMgr.getSection( "KahFwk" )
152 :     inModelPath = cfg.getString("InModelPath")
153 :    
154 :     if ("" == inModelPath ):
155 :     die( "Must provide input model path via InModelPath in KahFwk section")
156 :    
157 :     ce = Catalog.instance().open( inModelPath )
158 :     if (None == ce):
159 :     die ("Provided path %s can not be read" % inModelPath )
160 :    
161 :    
162 :     self.model = ce.read()
163 :    
164 :     return
165 :    
166 :     #------------------------------------------------------------------------
167 :     def run(self):
168 :     #------------------------------------------------------------------------
169 :     """
170 :     """
171 :    
172 :     top=self.model.getTop()
173 :    
174 :     for m in self.exeChain:
175 :     cfg = self.configMgr.getSection( m.name() )
176 :     m.process( self.model, top, cfg)
177 :    
178 :     return
179 :    
180 :    
181 :     if __name__ == "__main__":
182 :     print "kahfwk main"
183 :     f = KahFwk()
184 :     f.run()
185 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3