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

Annotation of /KahApp/KahConfigSection.py

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : efrank 1.1 #--------------------------------------------------------------
2 :     #
3 :     # KahConfigSection
4 :     # Holds configuration values and is passed to a module when it is
5 :     # called by the framework. See KahConfigMgr.
6 :     #
7 :     # Why are there int, float, string methods rather than using
8 :     # some kind of genericity? A) So that this will work in other
9 :     # languages. B) Prior experience shows that if it isn't clear
10 :     # what value type is expected for config variables, the system
11 :     # does not scale and you fight mis-configuration errors. So,
12 :     # this is meant to be a straight jacket over top of pythons Configure.
13 :     #
14 :     #
15 :     # HISTORY:
16 :     # 07Jul04 efrank first version
17 :     #
18 :     # BUGS:
19 :     #--------------------------------------------------------------
20 :    
21 :    
22 :     class KahConfigSection:
23 :     """
24 :     Holds the configuration informtion (paramter values) associated
25 :     with one module in the application
26 :     """
27 :    
28 :     #------------------------------------------------------------------------
29 :     def __init__( self, name ):
30 :     #------------------------------------------------------------------------
31 :     """
32 :     @type sectionName: string
33 :     """
34 :    
35 :     self.__sectionName = name
36 :     self.__dict = {}
37 :     return
38 :    
39 :    
40 :     #------------------------------------------------------------------------
41 :     def name( self):
42 :     #------------------------------------------------------------------------
43 :     return self.__sectionName
44 :    
45 :    
46 :     #------------------------------------------------------------------------
47 :     def wasOverridden( self, keyName):
48 :     #------------------------------------------------------------------------
49 :     """
50 :     Returns 0/1, was this param changed from its defaultValue?
51 :     """
52 :    
53 :     return self.__dict[keyName][3]
54 :    
55 :     #------------------------------------------------------------------------
56 :     def override(self, keyName, value):
57 :     #------------------------------------------------------------------------
58 :     """
59 :     Used by the KahConfigMgr to override values in this ConfigSection.
60 :     """
61 :    
62 :     v=self.__dict[keyName]
63 :     v[2] = apply( v[1], [value] )
64 :     v[3]=1
65 :    
66 :     return
67 :    
68 :     #------------------------------------------------------------------------
69 :     def getInt( self, keyName):
70 :     #------------------------------------------------------------------------
71 :     """
72 :     Gets integral value.
73 :     """
74 :    
75 :     return self.__get( "int", keyName)
76 :    
77 :     #------------------------------------------------------------------------
78 :     def getFloat( self, keyName):
79 :     #------------------------------------------------------------------------
80 :     """
81 :     Gets float value.
82 :     """
83 :    
84 :     return self.__get( "float", keyName)
85 :    
86 :     #------------------------------------------------------------------------
87 :     def getString( self, keyName):
88 :     #------------------------------------------------------------------------
89 :     """
90 :     Gets string value.
91 :     """
92 :    
93 :     return self.__get( "str", keyName)
94 :    
95 :     #------------------------------------------------------------------------
96 :     def regInt( self, keyName, defaultVal ):
97 :     #------------------------------------------------------------------------
98 :     """
99 :     Register an integer with this keyName and default value.
100 :    
101 :     @type keyName: string
102 :     @type defaultValue: integer
103 :     """
104 :    
105 :     self.__register( "int", int, keyName, defaultVal)
106 :     return
107 :    
108 :     #------------------------------------------------------------------------
109 :     def regFloat( self, keyName, defaultVal ):
110 :     #------------------------------------------------------------------------
111 :    
112 :     """
113 :     Register a float with this keyName and default value.
114 :    
115 :     @type keyName: string
116 :     @type defaultValue: float
117 :     """
118 :    
119 :     self.__register( "float", float, keyName, defaultVal)
120 :     return
121 :    
122 :     #------------------------------------------------------------------------
123 :     def regString( self, keyName, defaultVal ):
124 :     #------------------------------------------------------------------------
125 :    
126 :     """
127 :     Register an integer with this keyName and default value.
128 :    
129 :     @type keyName: string
130 :     @type defaultValue: string
131 :     """
132 :    
133 :     self.__register( "str", str, keyName, defaultVal)
134 :     return
135 :    
136 :    
137 :     #------------------------------------------------------------------------
138 :     def __register( self, type, cast, keyName, defaultValue):
139 :     #------------------------------------------------------------------------
140 :     """
141 :     Register a datum with this keyName and default value.
142 :     Remember the type.
143 :    
144 :     @type keyName: string
145 :     @type defaultValue: integer
146 :     """
147 :    
148 :     if self.__dict.has_key( keyName ):
149 :     raise Exception, "Duplicated key"
150 :     else:
151 :     # record value and 0/1 flag for "was overridden"
152 :     self.__dict[keyName] = [type, cast, apply(cast, [defaultValue]), 0]
153 :    
154 :     return
155 :    
156 :    
157 :     #------------------------------------------------------------------------
158 :     def __get( self, type, keyName):
159 :     #------------------------------------------------------------------------
160 :     """
161 :     Gets value of specified name and type.
162 :     """
163 :    
164 :     v = self.__dict[keyName] #can throw
165 :     if ( v[0] == type):
166 :     return v[2]
167 :     else:
168 :     raise Exception, "Wrong type"
169 :    
170 :     #------------------------------------------------------------------------
171 :     def dump( self ):
172 :     #------------------------------------------------------------------------
173 :     """
174 :     Dump for debugging.
175 :     """
176 :    
177 :     for k in self.__dict.keys():
178 :     print k, self.__dict[k]
179 :     return
180 :    
181 :    
182 :     #------------------------------------------------------------------------
183 :     if (__name__ == "__main__"):
184 :     #------------------------------------------------------------------------
185 :     print "Testing KahConfigSection.py"
186 :    
187 :     cfg = KahConfigSection( "testSection" )
188 :     print "Made section named [testSection] :", cfg.name()
189 :    
190 :     cfg.regInt( "int1", 1 )
191 :     cfg.regInt( "int2", 2 )
192 :     cfg.regFloat( "float1", 10.0 )
193 :     cfg.regFloat( "float2", 20.0)
194 :     cfg.regString( "string1", "theString1")
195 :     cfg.regString( "string2", "theString2")
196 :     cfg.dump()
197 :    
198 :     # try cross-wire
199 :    
200 :     try:
201 :     cfg.regInt( "int3", "gork")
202 :     print "Error: regInt from string"
203 :     except:
204 :     pass
205 :    
206 :     try:
207 :     cfg.regFloat( "float3", "gork")
208 :     print "Error: regFloat from string"
209 :     except:
210 :     pass
211 :    
212 :     try:
213 :     cfg.regString( "string3", self ) # a funky way to get a non stringable
214 :     print "Error: regString from self"
215 :     except:
216 :     pass
217 :    
218 :    
219 :     print "done test"
220 :    
221 :     ##
222 :     # Now override some
223 :     ##
224 :    
225 :     cfg.override( "int1", 11)
226 :     cfg.override( "float1", "110.0")
227 :     cfg.override( "string1", "theNewString1")
228 :    
229 :     cfg.dump()
230 :    
231 :     ##
232 :     # try some gets
233 :     ##
234 :    
235 :     print cfg.getInt( "int1")
236 :     print cfg.getInt( "int2")
237 :     print cfg.getFloat( "float1")
238 :     print cfg.getFloat( "float2")
239 :     print cfg.getString( "string1")
240 :     print cfg.getString( "string2")
241 :    
242 :     try:
243 :     cfg.getInt( "feh" )
244 :     print "getInt should have failed"
245 :     except:
246 :     pass
247 :    
248 :     try:
249 :     cfg.getInt( "float1" )
250 :     print "getInt should have failed"
251 :     except:
252 :     pass
253 :    
254 :     try:
255 :     cfg.getFloat( "feh" )
256 :     print "getFloat shhould have failed"
257 :     except:
258 :     pass
259 :    
260 :     try:
261 :     cfg.getFloat( "int1" )
262 :     print "getFloat shhould have failed"
263 :     except:
264 :     pass
265 :    
266 :     try:
267 :     cfg.getString( "feh" )
268 :     print "getString shhould have failed"
269 :     except:
270 :     pass
271 :    
272 :    
273 :     try:
274 :     cfg.getString( "int1" )
275 :     print "getString should have failed"
276 :     except:
277 :     pass
278 :    
279 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3