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

Annotation of /KahApp/KahFwk.py

Parent Directory Parent Directory | Revision Log Revision Log


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

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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3