##// END OF EJS Templates
Bug fixed in controller.py when floatList is used
Miguel Valdez -
r741:da4dd836e397
parent child
Show More
@@ -1,1272 +1,1272
1 '''
1 '''
2 Created on September , 2012
2 Created on September , 2012
3 @author:
3 @author:
4 '''
4 '''
5
5
6 import sys
6 import sys
7 import ast
7 import ast
8 import datetime
8 import datetime
9 import traceback
9 import traceback
10 import schainpy
10 import schainpy
11 import schainpy.admin
11 import schainpy.admin
12
12
13 from xml.etree.ElementTree import ElementTree, Element, SubElement, tostring
13 from xml.etree.ElementTree import ElementTree, Element, SubElement, tostring
14 from xml.dom import minidom
14 from xml.dom import minidom
15
15
16 from schainpy.model import *
16 from schainpy.model import *
17 from time import sleep
17 from time import sleep
18
18
19 def prettify(elem):
19 def prettify(elem):
20 """Return a pretty-printed XML string for the Element.
20 """Return a pretty-printed XML string for the Element.
21 """
21 """
22 rough_string = tostring(elem, 'utf-8')
22 rough_string = tostring(elem, 'utf-8')
23 reparsed = minidom.parseString(rough_string)
23 reparsed = minidom.parseString(rough_string)
24 return reparsed.toprettyxml(indent=" ")
24 return reparsed.toprettyxml(indent=" ")
25
25
26 class ParameterConf():
26 class ParameterConf():
27
27
28 id = None
28 id = None
29 name = None
29 name = None
30 value = None
30 value = None
31 format = None
31 format = None
32
32
33 __formated_value = None
33 __formated_value = None
34
34
35 ELEMENTNAME = 'Parameter'
35 ELEMENTNAME = 'Parameter'
36
36
37 def __init__(self):
37 def __init__(self):
38
38
39 self.format = 'str'
39 self.format = 'str'
40
40
41 def getElementName(self):
41 def getElementName(self):
42
42
43 return self.ELEMENTNAME
43 return self.ELEMENTNAME
44
44
45 def getValue(self):
45 def getValue(self):
46
46
47 value = self.value
47 value = self.value
48 format = self.format
48 format = self.format
49
49
50 if self.__formated_value != None:
50 if self.__formated_value != None:
51
51
52 return self.__formated_value
52 return self.__formated_value
53
53
54 if format == 'str':
54 if format == 'str':
55 self.__formated_value = str(value)
55 self.__formated_value = str(value)
56 return self.__formated_value
56 return self.__formated_value
57
57
58 if value == '':
58 if value == '':
59 raise ValueError, "%s: This parameter value is empty" %self.name
59 raise ValueError, "%s: This parameter value is empty" %self.name
60
60
61 if format == 'list':
61 if format == 'list':
62 strList = value.split(',')
62 strList = value.split(',')
63
63
64 self.__formated_value = strList
64 self.__formated_value = strList
65
65
66 return self.__formated_value
66 return self.__formated_value
67
67
68 if format == 'intlist':
68 if format == 'intlist':
69 """
69 """
70 Example:
70 Example:
71 value = (0,1,2)
71 value = (0,1,2)
72 """
72 """
73
73
74 new_value = ast.literal_eval(value)
74 new_value = ast.literal_eval(value)
75
75
76 if type(new_value) not in (tuple, list):
76 if type(new_value) not in (tuple, list):
77 new_value = [int(new_value)]
77 new_value = [int(new_value)]
78
78
79 self.__formated_value = new_value
79 self.__formated_value = new_value
80
80
81 return self.__formated_value
81 return self.__formated_value
82
82
83 if format == 'floatlist':
83 if format == 'floatlist':
84 """
84 """
85 Example:
85 Example:
86 value = (0.5, 1.4, 2.7)
86 value = (0.5, 1.4, 2.7)
87 """
87 """
88
88
89 new_value = ast.literal_eval(value)
89 new_value = ast.literal_eval(value)
90
90
91 if type(new_value) not in (tuple, list):
91 if type(new_value) not in (tuple, list):
92 new_value = [float(new_value)]
92 new_value = [float(new_value)]
93
93
94 self.__formated_value = floatList
94 self.__formated_value = new_value
95
95
96 return self.__formated_value
96 return self.__formated_value
97
97
98 if format == 'date':
98 if format == 'date':
99 strList = value.split('/')
99 strList = value.split('/')
100 intList = [int(x) for x in strList]
100 intList = [int(x) for x in strList]
101 date = datetime.date(intList[0], intList[1], intList[2])
101 date = datetime.date(intList[0], intList[1], intList[2])
102
102
103 self.__formated_value = date
103 self.__formated_value = date
104
104
105 return self.__formated_value
105 return self.__formated_value
106
106
107 if format == 'time':
107 if format == 'time':
108 strList = value.split(':')
108 strList = value.split(':')
109 intList = [int(x) for x in strList]
109 intList = [int(x) for x in strList]
110 time = datetime.time(intList[0], intList[1], intList[2])
110 time = datetime.time(intList[0], intList[1], intList[2])
111
111
112 self.__formated_value = time
112 self.__formated_value = time
113
113
114 return self.__formated_value
114 return self.__formated_value
115
115
116 if format == 'pairslist':
116 if format == 'pairslist':
117 """
117 """
118 Example:
118 Example:
119 value = (0,1),(1,2)
119 value = (0,1),(1,2)
120 """
120 """
121
121
122 new_value = ast.literal_eval(value)
122 new_value = ast.literal_eval(value)
123
123
124 if type(new_value) not in (tuple, list):
124 if type(new_value) not in (tuple, list):
125 raise ValueError, "%s has to be a tuple or list of pairs" %value
125 raise ValueError, "%s has to be a tuple or list of pairs" %value
126
126
127 if type(new_value[0]) not in (tuple, list):
127 if type(new_value[0]) not in (tuple, list):
128 if len(new_value) != 2:
128 if len(new_value) != 2:
129 raise ValueError, "%s has to be a tuple or list of pairs" %value
129 raise ValueError, "%s has to be a tuple or list of pairs" %value
130 new_value = [new_value]
130 new_value = [new_value]
131
131
132 for thisPair in new_value:
132 for thisPair in new_value:
133 if len(thisPair) != 2:
133 if len(thisPair) != 2:
134 raise ValueError, "%s has to be a tuple or list of pairs" %value
134 raise ValueError, "%s has to be a tuple or list of pairs" %value
135
135
136 self.__formated_value = new_value
136 self.__formated_value = new_value
137
137
138 return self.__formated_value
138 return self.__formated_value
139
139
140 if format == 'multilist':
140 if format == 'multilist':
141 """
141 """
142 Example:
142 Example:
143 value = (0,1,2),(3,4,5)
143 value = (0,1,2),(3,4,5)
144 """
144 """
145 multiList = ast.literal_eval(value)
145 multiList = ast.literal_eval(value)
146
146
147 if type(multiList[0]) == int:
147 if type(multiList[0]) == int:
148 multiList = ast.literal_eval("(" + value + ")")
148 multiList = ast.literal_eval("(" + value + ")")
149
149
150 self.__formated_value = multiList
150 self.__formated_value = multiList
151
151
152 return self.__formated_value
152 return self.__formated_value
153
153
154 if format == 'bool':
154 if format == 'bool':
155 value = int(value)
155 value = int(value)
156
156
157 if format == 'int':
157 if format == 'int':
158 value = float(value)
158 value = float(value)
159
159
160 format_func = eval(format)
160 format_func = eval(format)
161
161
162 self.__formated_value = format_func(value)
162 self.__formated_value = format_func(value)
163
163
164 return self.__formated_value
164 return self.__formated_value
165
165
166 def updateId(self, new_id):
166 def updateId(self, new_id):
167
167
168 self.id = str(new_id)
168 self.id = str(new_id)
169
169
170 def setup(self, id, name, value, format='str'):
170 def setup(self, id, name, value, format='str'):
171
171
172 self.id = str(id)
172 self.id = str(id)
173 self.name = name
173 self.name = name
174 self.value = str(value)
174 self.value = str(value)
175 self.format = str.lower(format)
175 self.format = str.lower(format)
176
176
177 self.getValue()
177 self.getValue()
178
178
179 return 1
179 return 1
180
180
181 def update(self, name, value, format='str'):
181 def update(self, name, value, format='str'):
182
182
183 self.name = name
183 self.name = name
184 self.value = str(value)
184 self.value = str(value)
185 self.format = format
185 self.format = format
186
186
187 def makeXml(self, opElement):
187 def makeXml(self, opElement):
188
188
189 parmElement = SubElement(opElement, self.ELEMENTNAME)
189 parmElement = SubElement(opElement, self.ELEMENTNAME)
190 parmElement.set('id', str(self.id))
190 parmElement.set('id', str(self.id))
191 parmElement.set('name', self.name)
191 parmElement.set('name', self.name)
192 parmElement.set('value', self.value)
192 parmElement.set('value', self.value)
193 parmElement.set('format', self.format)
193 parmElement.set('format', self.format)
194
194
195 def readXml(self, parmElement):
195 def readXml(self, parmElement):
196
196
197 self.id = parmElement.get('id')
197 self.id = parmElement.get('id')
198 self.name = parmElement.get('name')
198 self.name = parmElement.get('name')
199 self.value = parmElement.get('value')
199 self.value = parmElement.get('value')
200 self.format = str.lower(parmElement.get('format'))
200 self.format = str.lower(parmElement.get('format'))
201
201
202 #Compatible with old signal chain version
202 #Compatible with old signal chain version
203 if self.format == 'int' and self.name == 'idfigure':
203 if self.format == 'int' and self.name == 'idfigure':
204 self.name = 'id'
204 self.name = 'id'
205
205
206 def printattr(self):
206 def printattr(self):
207
207
208 print "Parameter[%s]: name = %s, value = %s, format = %s" %(self.id, self.name, self.value, self.format)
208 print "Parameter[%s]: name = %s, value = %s, format = %s" %(self.id, self.name, self.value, self.format)
209
209
210 class OperationConf():
210 class OperationConf():
211
211
212 id = None
212 id = None
213 name = None
213 name = None
214 priority = None
214 priority = None
215 type = None
215 type = None
216
216
217 parmConfObjList = []
217 parmConfObjList = []
218
218
219 ELEMENTNAME = 'Operation'
219 ELEMENTNAME = 'Operation'
220
220
221 def __init__(self):
221 def __init__(self):
222
222
223 self.id = '0'
223 self.id = '0'
224 self.name = None
224 self.name = None
225 self.priority = None
225 self.priority = None
226 self.type = 'self'
226 self.type = 'self'
227
227
228
228
229 def __getNewId(self):
229 def __getNewId(self):
230
230
231 return int(self.id)*10 + len(self.parmConfObjList) + 1
231 return int(self.id)*10 + len(self.parmConfObjList) + 1
232
232
233 def updateId(self, new_id):
233 def updateId(self, new_id):
234
234
235 self.id = str(new_id)
235 self.id = str(new_id)
236
236
237 n = 1
237 n = 1
238 for parmObj in self.parmConfObjList:
238 for parmObj in self.parmConfObjList:
239
239
240 idParm = str(int(new_id)*10 + n)
240 idParm = str(int(new_id)*10 + n)
241 parmObj.updateId(idParm)
241 parmObj.updateId(idParm)
242
242
243 n += 1
243 n += 1
244
244
245 def getElementName(self):
245 def getElementName(self):
246
246
247 return self.ELEMENTNAME
247 return self.ELEMENTNAME
248
248
249 def getParameterObjList(self):
249 def getParameterObjList(self):
250
250
251 return self.parmConfObjList
251 return self.parmConfObjList
252
252
253 def getParameterObj(self, parameterName):
253 def getParameterObj(self, parameterName):
254
254
255 for parmConfObj in self.parmConfObjList:
255 for parmConfObj in self.parmConfObjList:
256
256
257 if parmConfObj.name != parameterName:
257 if parmConfObj.name != parameterName:
258 continue
258 continue
259
259
260 return parmConfObj
260 return parmConfObj
261
261
262 return None
262 return None
263
263
264 def getParameterObjfromValue(self, parameterValue):
264 def getParameterObjfromValue(self, parameterValue):
265
265
266 for parmConfObj in self.parmConfObjList:
266 for parmConfObj in self.parmConfObjList:
267
267
268 if parmConfObj.getValue() != parameterValue:
268 if parmConfObj.getValue() != parameterValue:
269 continue
269 continue
270
270
271 return parmConfObj.getValue()
271 return parmConfObj.getValue()
272
272
273 return None
273 return None
274
274
275 def getParameterValue(self, parameterName):
275 def getParameterValue(self, parameterName):
276
276
277 parameterObj = self.getParameterObj(parameterName)
277 parameterObj = self.getParameterObj(parameterName)
278
278
279 # if not parameterObj:
279 # if not parameterObj:
280 # return None
280 # return None
281
281
282 value = parameterObj.getValue()
282 value = parameterObj.getValue()
283
283
284 return value
284 return value
285
285
286 def setup(self, id, name, priority, type):
286 def setup(self, id, name, priority, type):
287
287
288 self.id = str(id)
288 self.id = str(id)
289 self.name = name
289 self.name = name
290 self.type = type
290 self.type = type
291 self.priority = priority
291 self.priority = priority
292
292
293 self.parmConfObjList = []
293 self.parmConfObjList = []
294
294
295 def removeParameters(self):
295 def removeParameters(self):
296
296
297 for obj in self.parmConfObjList:
297 for obj in self.parmConfObjList:
298 del obj
298 del obj
299
299
300 self.parmConfObjList = []
300 self.parmConfObjList = []
301
301
302 def addParameter(self, name, value, format='str'):
302 def addParameter(self, name, value, format='str'):
303
303
304 id = self.__getNewId()
304 id = self.__getNewId()
305
305
306 parmConfObj = ParameterConf()
306 parmConfObj = ParameterConf()
307 if not parmConfObj.setup(id, name, value, format):
307 if not parmConfObj.setup(id, name, value, format):
308 return None
308 return None
309
309
310 self.parmConfObjList.append(parmConfObj)
310 self.parmConfObjList.append(parmConfObj)
311
311
312 return parmConfObj
312 return parmConfObj
313
313
314 def changeParameter(self, name, value, format='str'):
314 def changeParameter(self, name, value, format='str'):
315
315
316 parmConfObj = self.getParameterObj(name)
316 parmConfObj = self.getParameterObj(name)
317 parmConfObj.update(name, value, format)
317 parmConfObj.update(name, value, format)
318
318
319 return parmConfObj
319 return parmConfObj
320
320
321 def makeXml(self, procUnitElement):
321 def makeXml(self, procUnitElement):
322
322
323 opElement = SubElement(procUnitElement, self.ELEMENTNAME)
323 opElement = SubElement(procUnitElement, self.ELEMENTNAME)
324 opElement.set('id', str(self.id))
324 opElement.set('id', str(self.id))
325 opElement.set('name', self.name)
325 opElement.set('name', self.name)
326 opElement.set('type', self.type)
326 opElement.set('type', self.type)
327 opElement.set('priority', str(self.priority))
327 opElement.set('priority', str(self.priority))
328
328
329 for parmConfObj in self.parmConfObjList:
329 for parmConfObj in self.parmConfObjList:
330 parmConfObj.makeXml(opElement)
330 parmConfObj.makeXml(opElement)
331
331
332 def readXml(self, opElement):
332 def readXml(self, opElement):
333
333
334 self.id = opElement.get('id')
334 self.id = opElement.get('id')
335 self.name = opElement.get('name')
335 self.name = opElement.get('name')
336 self.type = opElement.get('type')
336 self.type = opElement.get('type')
337 self.priority = opElement.get('priority')
337 self.priority = opElement.get('priority')
338
338
339 #Compatible with old signal chain version
339 #Compatible with old signal chain version
340 #Use of 'run' method instead 'init'
340 #Use of 'run' method instead 'init'
341 if self.type == 'self' and self.name == 'init':
341 if self.type == 'self' and self.name == 'init':
342 self.name = 'run'
342 self.name = 'run'
343
343
344 self.parmConfObjList = []
344 self.parmConfObjList = []
345
345
346 parmElementList = opElement.getiterator(ParameterConf().getElementName())
346 parmElementList = opElement.getiterator(ParameterConf().getElementName())
347
347
348 for parmElement in parmElementList:
348 for parmElement in parmElementList:
349 parmConfObj = ParameterConf()
349 parmConfObj = ParameterConf()
350 parmConfObj.readXml(parmElement)
350 parmConfObj.readXml(parmElement)
351
351
352 #Compatible with old signal chain version
352 #Compatible with old signal chain version
353 #If an 'plot' OPERATION is found, changes name operation by the value of its type PARAMETER
353 #If an 'plot' OPERATION is found, changes name operation by the value of its type PARAMETER
354 if self.type != 'self' and self.name == 'Plot':
354 if self.type != 'self' and self.name == 'Plot':
355 if parmConfObj.format == 'str' and parmConfObj.name == 'type':
355 if parmConfObj.format == 'str' and parmConfObj.name == 'type':
356 self.name = parmConfObj.value
356 self.name = parmConfObj.value
357 continue
357 continue
358
358
359 self.parmConfObjList.append(parmConfObj)
359 self.parmConfObjList.append(parmConfObj)
360
360
361 def printattr(self):
361 def printattr(self):
362
362
363 print "%s[%s]: name = %s, type = %s, priority = %s" %(self.ELEMENTNAME,
363 print "%s[%s]: name = %s, type = %s, priority = %s" %(self.ELEMENTNAME,
364 self.id,
364 self.id,
365 self.name,
365 self.name,
366 self.type,
366 self.type,
367 self.priority)
367 self.priority)
368
368
369 for parmConfObj in self.parmConfObjList:
369 for parmConfObj in self.parmConfObjList:
370 parmConfObj.printattr()
370 parmConfObj.printattr()
371
371
372 def createObject(self, plotter_queue=None):
372 def createObject(self, plotter_queue=None):
373
373
374 if self.type == 'self':
374 if self.type == 'self':
375 raise ValueError, "This operation type cannot be created"
375 raise ValueError, "This operation type cannot be created"
376
376
377 if self.type == 'plotter':
377 if self.type == 'plotter':
378 #Plotter(plotter_name)
378 #Plotter(plotter_name)
379 if not plotter_queue:
379 if not plotter_queue:
380 raise ValueError, "plotter_queue is not defined. Use:\nmyProject = Project()\nmyProject.setPlotterQueue(plotter_queue)"
380 raise ValueError, "plotter_queue is not defined. Use:\nmyProject = Project()\nmyProject.setPlotterQueue(plotter_queue)"
381
381
382 opObj = Plotter(self.name, plotter_queue)
382 opObj = Plotter(self.name, plotter_queue)
383
383
384 if self.type == 'external' or self.type == 'other':
384 if self.type == 'external' or self.type == 'other':
385 className = eval(self.name)
385 className = eval(self.name)
386 opObj = className()
386 opObj = className()
387
387
388 return opObj
388 return opObj
389
389
390 class ProcUnitConf():
390 class ProcUnitConf():
391
391
392 id = None
392 id = None
393 name = None
393 name = None
394 datatype = None
394 datatype = None
395 inputId = None
395 inputId = None
396 parentId = None
396 parentId = None
397
397
398 opConfObjList = []
398 opConfObjList = []
399
399
400 procUnitObj = None
400 procUnitObj = None
401 opObjList = []
401 opObjList = []
402
402
403 ELEMENTNAME = 'ProcUnit'
403 ELEMENTNAME = 'ProcUnit'
404
404
405 def __init__(self):
405 def __init__(self):
406
406
407 self.id = None
407 self.id = None
408 self.datatype = None
408 self.datatype = None
409 self.name = None
409 self.name = None
410 self.inputId = None
410 self.inputId = None
411
411
412 self.opConfObjList = []
412 self.opConfObjList = []
413
413
414 self.procUnitObj = None
414 self.procUnitObj = None
415 self.opObjDict = {}
415 self.opObjDict = {}
416
416
417 def __getPriority(self):
417 def __getPriority(self):
418
418
419 return len(self.opConfObjList)+1
419 return len(self.opConfObjList)+1
420
420
421 def __getNewId(self):
421 def __getNewId(self):
422
422
423 return int(self.id)*10 + len(self.opConfObjList) + 1
423 return int(self.id)*10 + len(self.opConfObjList) + 1
424
424
425 def getElementName(self):
425 def getElementName(self):
426
426
427 return self.ELEMENTNAME
427 return self.ELEMENTNAME
428
428
429 def getId(self):
429 def getId(self):
430
430
431 return self.id
431 return self.id
432
432
433 def updateId(self, new_id, parentId=parentId):
433 def updateId(self, new_id, parentId=parentId):
434
434
435
435
436 new_id = int(parentId)*10 + (int(self.id) % 10)
436 new_id = int(parentId)*10 + (int(self.id) % 10)
437 new_inputId = int(parentId)*10 + (int(self.inputId) % 10)
437 new_inputId = int(parentId)*10 + (int(self.inputId) % 10)
438
438
439 #If this proc unit has not inputs
439 #If this proc unit has not inputs
440 if self.inputId == '0':
440 if self.inputId == '0':
441 new_inputId = 0
441 new_inputId = 0
442
442
443 n = 1
443 n = 1
444 for opConfObj in self.opConfObjList:
444 for opConfObj in self.opConfObjList:
445
445
446 idOp = str(int(new_id)*10 + n)
446 idOp = str(int(new_id)*10 + n)
447 opConfObj.updateId(idOp)
447 opConfObj.updateId(idOp)
448
448
449 n += 1
449 n += 1
450
450
451 self.parentId = str(parentId)
451 self.parentId = str(parentId)
452 self.id = str(new_id)
452 self.id = str(new_id)
453 self.inputId = str(new_inputId)
453 self.inputId = str(new_inputId)
454
454
455
455
456 def getInputId(self):
456 def getInputId(self):
457
457
458 return self.inputId
458 return self.inputId
459
459
460 def getOperationObjList(self):
460 def getOperationObjList(self):
461
461
462 return self.opConfObjList
462 return self.opConfObjList
463
463
464 def getOperationObj(self, name=None):
464 def getOperationObj(self, name=None):
465
465
466 for opConfObj in self.opConfObjList:
466 for opConfObj in self.opConfObjList:
467
467
468 if opConfObj.name != name:
468 if opConfObj.name != name:
469 continue
469 continue
470
470
471 return opConfObj
471 return opConfObj
472
472
473 return None
473 return None
474
474
475 def getOpObjfromParamValue(self, value=None):
475 def getOpObjfromParamValue(self, value=None):
476
476
477 for opConfObj in self.opConfObjList:
477 for opConfObj in self.opConfObjList:
478 if opConfObj.getParameterObjfromValue(parameterValue=value) != value:
478 if opConfObj.getParameterObjfromValue(parameterValue=value) != value:
479 continue
479 continue
480 return opConfObj
480 return opConfObj
481 return None
481 return None
482
482
483 def getProcUnitObj(self):
483 def getProcUnitObj(self):
484
484
485 return self.procUnitObj
485 return self.procUnitObj
486
486
487 def setup(self, id, name, datatype, inputId, parentId=None):
487 def setup(self, id, name, datatype, inputId, parentId=None):
488
488
489 #Compatible with old signal chain version
489 #Compatible with old signal chain version
490 if datatype==None and name==None:
490 if datatype==None and name==None:
491 raise ValueError, "datatype or name should be defined"
491 raise ValueError, "datatype or name should be defined"
492
492
493 if name==None:
493 if name==None:
494 if 'Proc' in datatype:
494 if 'Proc' in datatype:
495 name = datatype
495 name = datatype
496 else:
496 else:
497 name = '%sProc' %(datatype)
497 name = '%sProc' %(datatype)
498
498
499 if datatype==None:
499 if datatype==None:
500 datatype = name.replace('Proc','')
500 datatype = name.replace('Proc','')
501
501
502 self.id = str(id)
502 self.id = str(id)
503 self.name = name
503 self.name = name
504 self.datatype = datatype
504 self.datatype = datatype
505 self.inputId = inputId
505 self.inputId = inputId
506 self.parentId = parentId
506 self.parentId = parentId
507
507
508 self.opConfObjList = []
508 self.opConfObjList = []
509
509
510 self.addOperation(name='run', optype='self')
510 self.addOperation(name='run', optype='self')
511
511
512 def removeOperations(self):
512 def removeOperations(self):
513
513
514 for obj in self.opConfObjList:
514 for obj in self.opConfObjList:
515 del obj
515 del obj
516
516
517 self.opConfObjList = []
517 self.opConfObjList = []
518 self.addOperation(name='run')
518 self.addOperation(name='run')
519
519
520 def addParameter(self, **kwargs):
520 def addParameter(self, **kwargs):
521 '''
521 '''
522 Add parameters to "run" operation
522 Add parameters to "run" operation
523 '''
523 '''
524 opObj = self.opConfObjList[0]
524 opObj = self.opConfObjList[0]
525
525
526 opObj.addParameter(**kwargs)
526 opObj.addParameter(**kwargs)
527
527
528 return opObj
528 return opObj
529
529
530 def addOperation(self, name, optype='self'):
530 def addOperation(self, name, optype='self'):
531
531
532 id = self.__getNewId()
532 id = self.__getNewId()
533 priority = self.__getPriority()
533 priority = self.__getPriority()
534
534
535 opConfObj = OperationConf()
535 opConfObj = OperationConf()
536 opConfObj.setup(id, name=name, priority=priority, type=optype)
536 opConfObj.setup(id, name=name, priority=priority, type=optype)
537
537
538 self.opConfObjList.append(opConfObj)
538 self.opConfObjList.append(opConfObj)
539
539
540 return opConfObj
540 return opConfObj
541
541
542 def makeXml(self, projectElement):
542 def makeXml(self, projectElement):
543
543
544 procUnitElement = SubElement(projectElement, self.ELEMENTNAME)
544 procUnitElement = SubElement(projectElement, self.ELEMENTNAME)
545 procUnitElement.set('id', str(self.id))
545 procUnitElement.set('id', str(self.id))
546 procUnitElement.set('name', self.name)
546 procUnitElement.set('name', self.name)
547 procUnitElement.set('datatype', self.datatype)
547 procUnitElement.set('datatype', self.datatype)
548 procUnitElement.set('inputId', str(self.inputId))
548 procUnitElement.set('inputId', str(self.inputId))
549
549
550 for opConfObj in self.opConfObjList:
550 for opConfObj in self.opConfObjList:
551 opConfObj.makeXml(procUnitElement)
551 opConfObj.makeXml(procUnitElement)
552
552
553 def readXml(self, upElement):
553 def readXml(self, upElement):
554
554
555 self.id = upElement.get('id')
555 self.id = upElement.get('id')
556 self.name = upElement.get('name')
556 self.name = upElement.get('name')
557 self.datatype = upElement.get('datatype')
557 self.datatype = upElement.get('datatype')
558 self.inputId = upElement.get('inputId')
558 self.inputId = upElement.get('inputId')
559
559
560 if self.ELEMENTNAME == "ReadUnit":
560 if self.ELEMENTNAME == "ReadUnit":
561 self.datatype = self.datatype.replace("Reader", "")
561 self.datatype = self.datatype.replace("Reader", "")
562
562
563 if self.ELEMENTNAME == "ProcUnit":
563 if self.ELEMENTNAME == "ProcUnit":
564 self.datatype = self.datatype.replace("Proc", "")
564 self.datatype = self.datatype.replace("Proc", "")
565
565
566 if self.inputId == 'None':
566 if self.inputId == 'None':
567 self.inputId = '0'
567 self.inputId = '0'
568
568
569 self.opConfObjList = []
569 self.opConfObjList = []
570
570
571 opElementList = upElement.getiterator(OperationConf().getElementName())
571 opElementList = upElement.getiterator(OperationConf().getElementName())
572
572
573 for opElement in opElementList:
573 for opElement in opElementList:
574 opConfObj = OperationConf()
574 opConfObj = OperationConf()
575 opConfObj.readXml(opElement)
575 opConfObj.readXml(opElement)
576 self.opConfObjList.append(opConfObj)
576 self.opConfObjList.append(opConfObj)
577
577
578 def printattr(self):
578 def printattr(self):
579
579
580 print "%s[%s]: name = %s, datatype = %s, inputId = %s" %(self.ELEMENTNAME,
580 print "%s[%s]: name = %s, datatype = %s, inputId = %s" %(self.ELEMENTNAME,
581 self.id,
581 self.id,
582 self.name,
582 self.name,
583 self.datatype,
583 self.datatype,
584 self.inputId)
584 self.inputId)
585
585
586 for opConfObj in self.opConfObjList:
586 for opConfObj in self.opConfObjList:
587 opConfObj.printattr()
587 opConfObj.printattr()
588
588
589 def createObjects(self, plotter_queue=None):
589 def createObjects(self, plotter_queue=None):
590
590
591 className = eval(self.name)
591 className = eval(self.name)
592 procUnitObj = className()
592 procUnitObj = className()
593
593
594 for opConfObj in self.opConfObjList:
594 for opConfObj in self.opConfObjList:
595
595
596 if opConfObj.type == 'self':
596 if opConfObj.type == 'self':
597 continue
597 continue
598
598
599 opObj = opConfObj.createObject(plotter_queue)
599 opObj = opConfObj.createObject(plotter_queue)
600
600
601 self.opObjDict[opConfObj.id] = opObj
601 self.opObjDict[opConfObj.id] = opObj
602 procUnitObj.addOperation(opObj, opConfObj.id)
602 procUnitObj.addOperation(opObj, opConfObj.id)
603
603
604 self.procUnitObj = procUnitObj
604 self.procUnitObj = procUnitObj
605
605
606 return procUnitObj
606 return procUnitObj
607
607
608 def run(self):
608 def run(self):
609
609
610 is_ok = False
610 is_ok = False
611
611
612 for opConfObj in self.opConfObjList:
612 for opConfObj in self.opConfObjList:
613
613
614 kwargs = {}
614 kwargs = {}
615 for parmConfObj in opConfObj.getParameterObjList():
615 for parmConfObj in opConfObj.getParameterObjList():
616 if opConfObj.name == 'run' and parmConfObj.name == 'datatype':
616 if opConfObj.name == 'run' and parmConfObj.name == 'datatype':
617 continue
617 continue
618
618
619 kwargs[parmConfObj.name] = parmConfObj.getValue()
619 kwargs[parmConfObj.name] = parmConfObj.getValue()
620
620
621 #print "\tRunning the '%s' operation with %s" %(opConfObj.name, opConfObj.id)
621 #print "\tRunning the '%s' operation with %s" %(opConfObj.name, opConfObj.id)
622 sts = self.procUnitObj.call(opType = opConfObj.type,
622 sts = self.procUnitObj.call(opType = opConfObj.type,
623 opName = opConfObj.name,
623 opName = opConfObj.name,
624 opId = opConfObj.id,
624 opId = opConfObj.id,
625 **kwargs)
625 **kwargs)
626 is_ok = is_ok or sts
626 is_ok = is_ok or sts
627
627
628 return is_ok
628 return is_ok
629
629
630 def close(self):
630 def close(self):
631
631
632 for opConfObj in self.opConfObjList:
632 for opConfObj in self.opConfObjList:
633 if opConfObj.type == 'self':
633 if opConfObj.type == 'self':
634 continue
634 continue
635
635
636 opObj = self.procUnitObj.getOperationObj(opConfObj.id)
636 opObj = self.procUnitObj.getOperationObj(opConfObj.id)
637 opObj.close()
637 opObj.close()
638
638
639 self.procUnitObj.close()
639 self.procUnitObj.close()
640
640
641 return
641 return
642
642
643 class ReadUnitConf(ProcUnitConf):
643 class ReadUnitConf(ProcUnitConf):
644
644
645 path = None
645 path = None
646 startDate = None
646 startDate = None
647 endDate = None
647 endDate = None
648 startTime = None
648 startTime = None
649 endTime = None
649 endTime = None
650
650
651 ELEMENTNAME = 'ReadUnit'
651 ELEMENTNAME = 'ReadUnit'
652
652
653 def __init__(self):
653 def __init__(self):
654
654
655 self.id = None
655 self.id = None
656 self.datatype = None
656 self.datatype = None
657 self.name = None
657 self.name = None
658 self.inputId = None
658 self.inputId = None
659
659
660 self.parentId = None
660 self.parentId = None
661
661
662 self.opConfObjList = []
662 self.opConfObjList = []
663 self.opObjList = []
663 self.opObjList = []
664
664
665 def getElementName(self):
665 def getElementName(self):
666
666
667 return self.ELEMENTNAME
667 return self.ELEMENTNAME
668
668
669 def setup(self, id, name, datatype, path, startDate="", endDate="", startTime="", endTime="", parentId=None, **kwargs):
669 def setup(self, id, name, datatype, path, startDate="", endDate="", startTime="", endTime="", parentId=None, **kwargs):
670
670
671 #Compatible with old signal chain version
671 #Compatible with old signal chain version
672 if datatype==None and name==None:
672 if datatype==None and name==None:
673 raise ValueError, "datatype or name should be defined"
673 raise ValueError, "datatype or name should be defined"
674
674
675 if name==None:
675 if name==None:
676 if 'Reader' in datatype:
676 if 'Reader' in datatype:
677 name = datatype
677 name = datatype
678 else:
678 else:
679 name = '%sReader' %(datatype)
679 name = '%sReader' %(datatype)
680
680
681 if datatype==None:
681 if datatype==None:
682 datatype = name.replace('Reader','')
682 datatype = name.replace('Reader','')
683
683
684 self.id = id
684 self.id = id
685 self.name = name
685 self.name = name
686 self.datatype = datatype
686 self.datatype = datatype
687
687
688 self.path = os.path.abspath(path)
688 self.path = os.path.abspath(path)
689 self.startDate = startDate
689 self.startDate = startDate
690 self.endDate = endDate
690 self.endDate = endDate
691 self.startTime = startTime
691 self.startTime = startTime
692 self.endTime = endTime
692 self.endTime = endTime
693
693
694 self.inputId = '0'
694 self.inputId = '0'
695 self.parentId = parentId
695 self.parentId = parentId
696
696
697 self.addRunOperation(**kwargs)
697 self.addRunOperation(**kwargs)
698
698
699 def update(self, datatype, path, startDate, endDate, startTime, endTime, parentId=None, name=None, **kwargs):
699 def update(self, datatype, path, startDate, endDate, startTime, endTime, parentId=None, name=None, **kwargs):
700
700
701 #Compatible with old signal chain version
701 #Compatible with old signal chain version
702 if datatype==None and name==None:
702 if datatype==None and name==None:
703 raise ValueError, "datatype or name should be defined"
703 raise ValueError, "datatype or name should be defined"
704
704
705 if name==None:
705 if name==None:
706 if 'Reader' in datatype:
706 if 'Reader' in datatype:
707 name = datatype
707 name = datatype
708 else:
708 else:
709 name = '%sReader' %(datatype)
709 name = '%sReader' %(datatype)
710
710
711 if datatype==None:
711 if datatype==None:
712 datatype = name.replace('Reader','')
712 datatype = name.replace('Reader','')
713
713
714 self.datatype = datatype
714 self.datatype = datatype
715 self.name = name
715 self.name = name
716 self.path = path
716 self.path = path
717 self.startDate = startDate
717 self.startDate = startDate
718 self.endDate = endDate
718 self.endDate = endDate
719 self.startTime = startTime
719 self.startTime = startTime
720 self.endTime = endTime
720 self.endTime = endTime
721
721
722 self.inputId = '0'
722 self.inputId = '0'
723 self.parentId = parentId
723 self.parentId = parentId
724
724
725 self.updateRunOperation(**kwargs)
725 self.updateRunOperation(**kwargs)
726
726
727 def removeOperations(self):
727 def removeOperations(self):
728
728
729 for obj in self.opConfObjList:
729 for obj in self.opConfObjList:
730 del obj
730 del obj
731
731
732 self.opConfObjList = []
732 self.opConfObjList = []
733
733
734 def addRunOperation(self, **kwargs):
734 def addRunOperation(self, **kwargs):
735
735
736 opObj = self.addOperation(name = 'run', optype = 'self')
736 opObj = self.addOperation(name = 'run', optype = 'self')
737
737
738 opObj.addParameter(name='datatype' , value=self.datatype, format='str')
738 opObj.addParameter(name='datatype' , value=self.datatype, format='str')
739 opObj.addParameter(name='path' , value=self.path, format='str')
739 opObj.addParameter(name='path' , value=self.path, format='str')
740 opObj.addParameter(name='startDate' , value=self.startDate, format='date')
740 opObj.addParameter(name='startDate' , value=self.startDate, format='date')
741 opObj.addParameter(name='endDate' , value=self.endDate, format='date')
741 opObj.addParameter(name='endDate' , value=self.endDate, format='date')
742 opObj.addParameter(name='startTime' , value=self.startTime, format='time')
742 opObj.addParameter(name='startTime' , value=self.startTime, format='time')
743 opObj.addParameter(name='endTime' , value=self.endTime, format='time')
743 opObj.addParameter(name='endTime' , value=self.endTime, format='time')
744
744
745 for key, value in kwargs.items():
745 for key, value in kwargs.items():
746 opObj.addParameter(name=key, value=value, format=type(value).__name__)
746 opObj.addParameter(name=key, value=value, format=type(value).__name__)
747
747
748 return opObj
748 return opObj
749
749
750 def updateRunOperation(self, **kwargs):
750 def updateRunOperation(self, **kwargs):
751
751
752 opObj = self.getOperationObj(name = 'run')
752 opObj = self.getOperationObj(name = 'run')
753 opObj.removeParameters()
753 opObj.removeParameters()
754
754
755 opObj.addParameter(name='datatype' , value=self.datatype, format='str')
755 opObj.addParameter(name='datatype' , value=self.datatype, format='str')
756 opObj.addParameter(name='path' , value=self.path, format='str')
756 opObj.addParameter(name='path' , value=self.path, format='str')
757 opObj.addParameter(name='startDate' , value=self.startDate, format='date')
757 opObj.addParameter(name='startDate' , value=self.startDate, format='date')
758 opObj.addParameter(name='endDate' , value=self.endDate, format='date')
758 opObj.addParameter(name='endDate' , value=self.endDate, format='date')
759 opObj.addParameter(name='startTime' , value=self.startTime, format='time')
759 opObj.addParameter(name='startTime' , value=self.startTime, format='time')
760 opObj.addParameter(name='endTime' , value=self.endTime, format='time')
760 opObj.addParameter(name='endTime' , value=self.endTime, format='time')
761
761
762 for key, value in kwargs.items():
762 for key, value in kwargs.items():
763 opObj.addParameter(name=key, value=value, format=type(value).__name__)
763 opObj.addParameter(name=key, value=value, format=type(value).__name__)
764
764
765 return opObj
765 return opObj
766
766
767 # def makeXml(self, projectElement):
767 # def makeXml(self, projectElement):
768 #
768 #
769 # procUnitElement = SubElement(projectElement, self.ELEMENTNAME)
769 # procUnitElement = SubElement(projectElement, self.ELEMENTNAME)
770 # procUnitElement.set('id', str(self.id))
770 # procUnitElement.set('id', str(self.id))
771 # procUnitElement.set('name', self.name)
771 # procUnitElement.set('name', self.name)
772 # procUnitElement.set('datatype', self.datatype)
772 # procUnitElement.set('datatype', self.datatype)
773 # procUnitElement.set('inputId', str(self.inputId))
773 # procUnitElement.set('inputId', str(self.inputId))
774 #
774 #
775 # for opConfObj in self.opConfObjList:
775 # for opConfObj in self.opConfObjList:
776 # opConfObj.makeXml(procUnitElement)
776 # opConfObj.makeXml(procUnitElement)
777
777
778 def readXml(self, upElement):
778 def readXml(self, upElement):
779
779
780 self.id = upElement.get('id')
780 self.id = upElement.get('id')
781 self.name = upElement.get('name')
781 self.name = upElement.get('name')
782 self.datatype = upElement.get('datatype')
782 self.datatype = upElement.get('datatype')
783 self.inputId = upElement.get('inputId')
783 self.inputId = upElement.get('inputId')
784
784
785 if self.ELEMENTNAME == "ReadUnit":
785 if self.ELEMENTNAME == "ReadUnit":
786 self.datatype = self.datatype.replace("Reader", "")
786 self.datatype = self.datatype.replace("Reader", "")
787
787
788 if self.inputId == 'None':
788 if self.inputId == 'None':
789 self.inputId = '0'
789 self.inputId = '0'
790
790
791 self.opConfObjList = []
791 self.opConfObjList = []
792
792
793 opElementList = upElement.getiterator(OperationConf().getElementName())
793 opElementList = upElement.getiterator(OperationConf().getElementName())
794
794
795 for opElement in opElementList:
795 for opElement in opElementList:
796 opConfObj = OperationConf()
796 opConfObj = OperationConf()
797 opConfObj.readXml(opElement)
797 opConfObj.readXml(opElement)
798 self.opConfObjList.append(opConfObj)
798 self.opConfObjList.append(opConfObj)
799
799
800 if opConfObj.name == 'run':
800 if opConfObj.name == 'run':
801 self.path = opConfObj.getParameterValue('path')
801 self.path = opConfObj.getParameterValue('path')
802 self.startDate = opConfObj.getParameterValue('startDate')
802 self.startDate = opConfObj.getParameterValue('startDate')
803 self.endDate = opConfObj.getParameterValue('endDate')
803 self.endDate = opConfObj.getParameterValue('endDate')
804 self.startTime = opConfObj.getParameterValue('startTime')
804 self.startTime = opConfObj.getParameterValue('startTime')
805 self.endTime = opConfObj.getParameterValue('endTime')
805 self.endTime = opConfObj.getParameterValue('endTime')
806
806
807 class Project():
807 class Project():
808
808
809 id = None
809 id = None
810 name = None
810 name = None
811 description = None
811 description = None
812 filename = None
812 filename = None
813
813
814 procUnitConfObjDict = None
814 procUnitConfObjDict = None
815
815
816 ELEMENTNAME = 'Project'
816 ELEMENTNAME = 'Project'
817
817
818 plotterQueue = None
818 plotterQueue = None
819
819
820 def __init__(self, plotter_queue=None):
820 def __init__(self, plotter_queue=None):
821
821
822 self.id = None
822 self.id = None
823 self.name = None
823 self.name = None
824 self.description = None
824 self.description = None
825
825
826 self.plotterQueue = plotter_queue
826 self.plotterQueue = plotter_queue
827
827
828 self.procUnitConfObjDict = {}
828 self.procUnitConfObjDict = {}
829
829
830 def __getNewId(self):
830 def __getNewId(self):
831
831
832 id = int(self.id)*10 + len(self.procUnitConfObjDict) + 1
832 id = int(self.id)*10 + len(self.procUnitConfObjDict) + 1
833
833
834 return str(id)
834 return str(id)
835
835
836 def getElementName(self):
836 def getElementName(self):
837
837
838 return self.ELEMENTNAME
838 return self.ELEMENTNAME
839
839
840 def getId(self):
840 def getId(self):
841
841
842 return self.id
842 return self.id
843
843
844 def updateId(self, new_id):
844 def updateId(self, new_id):
845
845
846 self.id = str(new_id)
846 self.id = str(new_id)
847
847
848 keyList = self.procUnitConfObjDict.keys()
848 keyList = self.procUnitConfObjDict.keys()
849 keyList.sort()
849 keyList.sort()
850
850
851 n = 1
851 n = 1
852 newProcUnitConfObjDict = {}
852 newProcUnitConfObjDict = {}
853
853
854 for procKey in keyList:
854 for procKey in keyList:
855
855
856 procUnitConfObj = self.procUnitConfObjDict[procKey]
856 procUnitConfObj = self.procUnitConfObjDict[procKey]
857 idProcUnit = str(int(self.id)*10 + n)
857 idProcUnit = str(int(self.id)*10 + n)
858 procUnitConfObj.updateId(idProcUnit, parentId = self.id)
858 procUnitConfObj.updateId(idProcUnit, parentId = self.id)
859
859
860 newProcUnitConfObjDict[idProcUnit] = procUnitConfObj
860 newProcUnitConfObjDict[idProcUnit] = procUnitConfObj
861 n += 1
861 n += 1
862
862
863 self.procUnitConfObjDict = newProcUnitConfObjDict
863 self.procUnitConfObjDict = newProcUnitConfObjDict
864
864
865 def setup(self, id, name, description):
865 def setup(self, id, name, description):
866
866
867 self.id = str(id)
867 self.id = str(id)
868 self.name = name
868 self.name = name
869 self.description = description
869 self.description = description
870
870
871 def update(self, name, description):
871 def update(self, name, description):
872
872
873 self.name = name
873 self.name = name
874 self.description = description
874 self.description = description
875
875
876 def addReadUnit(self, id=None, datatype=None, name=None, **kwargs):
876 def addReadUnit(self, id=None, datatype=None, name=None, **kwargs):
877
877
878 if id is None:
878 if id is None:
879 idReadUnit = self.__getNewId()
879 idReadUnit = self.__getNewId()
880 else:
880 else:
881 idReadUnit = str(id)
881 idReadUnit = str(id)
882
882
883 readUnitConfObj = ReadUnitConf()
883 readUnitConfObj = ReadUnitConf()
884 readUnitConfObj.setup(idReadUnit, name, datatype, parentId=self.id, **kwargs)
884 readUnitConfObj.setup(idReadUnit, name, datatype, parentId=self.id, **kwargs)
885
885
886 self.procUnitConfObjDict[readUnitConfObj.getId()] = readUnitConfObj
886 self.procUnitConfObjDict[readUnitConfObj.getId()] = readUnitConfObj
887
887
888 return readUnitConfObj
888 return readUnitConfObj
889
889
890 def addProcUnit(self, inputId='0', datatype=None, name=None):
890 def addProcUnit(self, inputId='0', datatype=None, name=None):
891
891
892 idProcUnit = self.__getNewId()
892 idProcUnit = self.__getNewId()
893
893
894 procUnitConfObj = ProcUnitConf()
894 procUnitConfObj = ProcUnitConf()
895 procUnitConfObj.setup(idProcUnit, name, datatype, inputId, parentId=self.id)
895 procUnitConfObj.setup(idProcUnit, name, datatype, inputId, parentId=self.id)
896
896
897 self.procUnitConfObjDict[procUnitConfObj.getId()] = procUnitConfObj
897 self.procUnitConfObjDict[procUnitConfObj.getId()] = procUnitConfObj
898
898
899 return procUnitConfObj
899 return procUnitConfObj
900
900
901 def removeProcUnit(self, id):
901 def removeProcUnit(self, id):
902
902
903 if id in self.procUnitConfObjDict.keys():
903 if id in self.procUnitConfObjDict.keys():
904 self.procUnitConfObjDict.pop(id)
904 self.procUnitConfObjDict.pop(id)
905
905
906 def getReadUnitId(self):
906 def getReadUnitId(self):
907
907
908 readUnitConfObj = self.getReadUnitObj()
908 readUnitConfObj = self.getReadUnitObj()
909
909
910 return readUnitConfObj.id
910 return readUnitConfObj.id
911
911
912 def getReadUnitObj(self):
912 def getReadUnitObj(self):
913
913
914 for obj in self.procUnitConfObjDict.values():
914 for obj in self.procUnitConfObjDict.values():
915 if obj.getElementName() == "ReadUnit":
915 if obj.getElementName() == "ReadUnit":
916 return obj
916 return obj
917
917
918 return None
918 return None
919
919
920 def getProcUnitObj(self, id=None, name=None):
920 def getProcUnitObj(self, id=None, name=None):
921
921
922 if id != None:
922 if id != None:
923 return self.procUnitConfObjDict[id]
923 return self.procUnitConfObjDict[id]
924
924
925 if name != None:
925 if name != None:
926 return self.getProcUnitObjByName(name)
926 return self.getProcUnitObjByName(name)
927
927
928 return None
928 return None
929
929
930 def getProcUnitObjByName(self, name):
930 def getProcUnitObjByName(self, name):
931
931
932 for obj in self.procUnitConfObjDict.values():
932 for obj in self.procUnitConfObjDict.values():
933 if obj.name == name:
933 if obj.name == name:
934 return obj
934 return obj
935
935
936 return None
936 return None
937
937
938 def procUnitItems(self):
938 def procUnitItems(self):
939
939
940 return self.procUnitConfObjDict.items()
940 return self.procUnitConfObjDict.items()
941
941
942 def makeXml(self):
942 def makeXml(self):
943
943
944 projectElement = Element('Project')
944 projectElement = Element('Project')
945 projectElement.set('id', str(self.id))
945 projectElement.set('id', str(self.id))
946 projectElement.set('name', self.name)
946 projectElement.set('name', self.name)
947 projectElement.set('description', self.description)
947 projectElement.set('description', self.description)
948
948
949 for procUnitConfObj in self.procUnitConfObjDict.values():
949 for procUnitConfObj in self.procUnitConfObjDict.values():
950 procUnitConfObj.makeXml(projectElement)
950 procUnitConfObj.makeXml(projectElement)
951
951
952 self.projectElement = projectElement
952 self.projectElement = projectElement
953
953
954 def writeXml(self, filename=None):
954 def writeXml(self, filename=None):
955
955
956 if filename == None:
956 if filename == None:
957 if self.filename:
957 if self.filename:
958 filename = self.filename
958 filename = self.filename
959 else:
959 else:
960 filename = "schain.xml"
960 filename = "schain.xml"
961
961
962 if not filename:
962 if not filename:
963 print "filename has not been defined. Use setFilename(filename) for do it."
963 print "filename has not been defined. Use setFilename(filename) for do it."
964 return 0
964 return 0
965
965
966 abs_file = os.path.abspath(filename)
966 abs_file = os.path.abspath(filename)
967
967
968 if not os.access(os.path.dirname(abs_file), os.W_OK):
968 if not os.access(os.path.dirname(abs_file), os.W_OK):
969 print "No write permission on %s" %os.path.dirname(abs_file)
969 print "No write permission on %s" %os.path.dirname(abs_file)
970 return 0
970 return 0
971
971
972 if os.path.isfile(abs_file) and not(os.access(abs_file, os.W_OK)):
972 if os.path.isfile(abs_file) and not(os.access(abs_file, os.W_OK)):
973 print "File %s already exists and it could not be overwriten" %abs_file
973 print "File %s already exists and it could not be overwriten" %abs_file
974 return 0
974 return 0
975
975
976 self.makeXml()
976 self.makeXml()
977
977
978 ElementTree(self.projectElement).write(abs_file, method='xml')
978 ElementTree(self.projectElement).write(abs_file, method='xml')
979
979
980 self.filename = abs_file
980 self.filename = abs_file
981
981
982 return 1
982 return 1
983
983
984 def readXml(self, filename = None):
984 def readXml(self, filename = None):
985
985
986 abs_file = os.path.abspath(filename)
986 abs_file = os.path.abspath(filename)
987
987
988 if not os.path.isfile(abs_file):
988 if not os.path.isfile(abs_file):
989 print "%s does not exist" %abs_file
989 print "%s does not exist" %abs_file
990 return 0
990 return 0
991
991
992 self.projectElement = None
992 self.projectElement = None
993 self.procUnitConfObjDict = {}
993 self.procUnitConfObjDict = {}
994
994
995 try:
995 try:
996 self.projectElement = ElementTree().parse(abs_file)
996 self.projectElement = ElementTree().parse(abs_file)
997 except:
997 except:
998 print "Error reading %s, verify file format" %filename
998 print "Error reading %s, verify file format" %filename
999 return 0
999 return 0
1000
1000
1001 self.project = self.projectElement.tag
1001 self.project = self.projectElement.tag
1002
1002
1003 self.id = self.projectElement.get('id')
1003 self.id = self.projectElement.get('id')
1004 self.name = self.projectElement.get('name')
1004 self.name = self.projectElement.get('name')
1005 self.description = self.projectElement.get('description')
1005 self.description = self.projectElement.get('description')
1006
1006
1007 readUnitElementList = self.projectElement.getiterator(ReadUnitConf().getElementName())
1007 readUnitElementList = self.projectElement.getiterator(ReadUnitConf().getElementName())
1008
1008
1009 for readUnitElement in readUnitElementList:
1009 for readUnitElement in readUnitElementList:
1010 readUnitConfObj = ReadUnitConf()
1010 readUnitConfObj = ReadUnitConf()
1011 readUnitConfObj.readXml(readUnitElement)
1011 readUnitConfObj.readXml(readUnitElement)
1012
1012
1013 if readUnitConfObj.parentId == None:
1013 if readUnitConfObj.parentId == None:
1014 readUnitConfObj.parentId = self.id
1014 readUnitConfObj.parentId = self.id
1015
1015
1016 self.procUnitConfObjDict[readUnitConfObj.getId()] = readUnitConfObj
1016 self.procUnitConfObjDict[readUnitConfObj.getId()] = readUnitConfObj
1017
1017
1018 procUnitElementList = self.projectElement.getiterator(ProcUnitConf().getElementName())
1018 procUnitElementList = self.projectElement.getiterator(ProcUnitConf().getElementName())
1019
1019
1020 for procUnitElement in procUnitElementList:
1020 for procUnitElement in procUnitElementList:
1021 procUnitConfObj = ProcUnitConf()
1021 procUnitConfObj = ProcUnitConf()
1022 procUnitConfObj.readXml(procUnitElement)
1022 procUnitConfObj.readXml(procUnitElement)
1023
1023
1024 if procUnitConfObj.parentId == None:
1024 if procUnitConfObj.parentId == None:
1025 procUnitConfObj.parentId = self.id
1025 procUnitConfObj.parentId = self.id
1026
1026
1027 self.procUnitConfObjDict[procUnitConfObj.getId()] = procUnitConfObj
1027 self.procUnitConfObjDict[procUnitConfObj.getId()] = procUnitConfObj
1028
1028
1029 self.filename = abs_file
1029 self.filename = abs_file
1030
1030
1031 return 1
1031 return 1
1032
1032
1033 def printattr(self):
1033 def printattr(self):
1034
1034
1035 print "Project[%s]: name = %s, description = %s" %(self.id,
1035 print "Project[%s]: name = %s, description = %s" %(self.id,
1036 self.name,
1036 self.name,
1037 self.description)
1037 self.description)
1038
1038
1039 for procUnitConfObj in self.procUnitConfObjDict.values():
1039 for procUnitConfObj in self.procUnitConfObjDict.values():
1040 procUnitConfObj.printattr()
1040 procUnitConfObj.printattr()
1041
1041
1042 def createObjects(self):
1042 def createObjects(self):
1043
1043
1044 for procUnitConfObj in self.procUnitConfObjDict.values():
1044 for procUnitConfObj in self.procUnitConfObjDict.values():
1045 procUnitConfObj.createObjects(self.plotterQueue)
1045 procUnitConfObj.createObjects(self.plotterQueue)
1046
1046
1047 def __connect(self, objIN, thisObj):
1047 def __connect(self, objIN, thisObj):
1048
1048
1049 thisObj.setInput(objIN.getOutputObj())
1049 thisObj.setInput(objIN.getOutputObj())
1050
1050
1051 def connectObjects(self):
1051 def connectObjects(self):
1052
1052
1053 for thisPUConfObj in self.procUnitConfObjDict.values():
1053 for thisPUConfObj in self.procUnitConfObjDict.values():
1054
1054
1055 inputId = thisPUConfObj.getInputId()
1055 inputId = thisPUConfObj.getInputId()
1056
1056
1057 if int(inputId) == 0:
1057 if int(inputId) == 0:
1058 continue
1058 continue
1059
1059
1060 #Get input object
1060 #Get input object
1061 puConfINObj = self.procUnitConfObjDict[inputId]
1061 puConfINObj = self.procUnitConfObjDict[inputId]
1062 puObjIN = puConfINObj.getProcUnitObj()
1062 puObjIN = puConfINObj.getProcUnitObj()
1063
1063
1064 #Get current object
1064 #Get current object
1065 thisPUObj = thisPUConfObj.getProcUnitObj()
1065 thisPUObj = thisPUConfObj.getProcUnitObj()
1066
1066
1067 self.__connect(puObjIN, thisPUObj)
1067 self.__connect(puObjIN, thisPUObj)
1068
1068
1069 def __handleError(self, procUnitConfObj, send_email=True):
1069 def __handleError(self, procUnitConfObj, send_email=True):
1070
1070
1071 import socket
1071 import socket
1072
1072
1073 err = traceback.format_exception(sys.exc_info()[0],
1073 err = traceback.format_exception(sys.exc_info()[0],
1074 sys.exc_info()[1],
1074 sys.exc_info()[1],
1075 sys.exc_info()[2])
1075 sys.exc_info()[2])
1076
1076
1077 print "***** Error occurred in %s *****" %(procUnitConfObj.name)
1077 print "***** Error occurred in %s *****" %(procUnitConfObj.name)
1078 print "***** %s" %err[-1]
1078 print "***** %s" %err[-1]
1079
1079
1080 message = "".join(err)
1080 message = "".join(err)
1081
1081
1082 sys.stderr.write(message)
1082 sys.stderr.write(message)
1083
1083
1084 if not send_email:
1084 if not send_email:
1085 return
1085 return
1086
1086
1087 subject = "SChain v%s: Error running %s\n" %(schainpy.__version__, procUnitConfObj.name)
1087 subject = "SChain v%s: Error running %s\n" %(schainpy.__version__, procUnitConfObj.name)
1088
1088
1089 subtitle = "%s: %s\n" %(procUnitConfObj.getElementName() ,procUnitConfObj.name)
1089 subtitle = "%s: %s\n" %(procUnitConfObj.getElementName() ,procUnitConfObj.name)
1090 subtitle += "Hostname: %s\n" %socket.gethostbyname(socket.gethostname())
1090 subtitle += "Hostname: %s\n" %socket.gethostbyname(socket.gethostname())
1091 subtitle += "Working directory: %s\n" %os.path.abspath("./")
1091 subtitle += "Working directory: %s\n" %os.path.abspath("./")
1092 subtitle += "Configuration file: %s\n" %self.filename
1092 subtitle += "Configuration file: %s\n" %self.filename
1093 subtitle += "Time: %s\n" %str(datetime.datetime.now())
1093 subtitle += "Time: %s\n" %str(datetime.datetime.now())
1094
1094
1095 readUnitConfObj = self.getReadUnitObj()
1095 readUnitConfObj = self.getReadUnitObj()
1096 if readUnitConfObj:
1096 if readUnitConfObj:
1097 subtitle += "\nInput parameters:\n"
1097 subtitle += "\nInput parameters:\n"
1098 subtitle += "[Data path = %s]\n" %readUnitConfObj.path
1098 subtitle += "[Data path = %s]\n" %readUnitConfObj.path
1099 subtitle += "[Data type = %s]\n" %readUnitConfObj.datatype
1099 subtitle += "[Data type = %s]\n" %readUnitConfObj.datatype
1100 subtitle += "[Start date = %s]\n" %readUnitConfObj.startDate
1100 subtitle += "[Start date = %s]\n" %readUnitConfObj.startDate
1101 subtitle += "[End date = %s]\n" %readUnitConfObj.endDate
1101 subtitle += "[End date = %s]\n" %readUnitConfObj.endDate
1102 subtitle += "[Start time = %s]\n" %readUnitConfObj.startTime
1102 subtitle += "[Start time = %s]\n" %readUnitConfObj.startTime
1103 subtitle += "[End time = %s]\n" %readUnitConfObj.endTime
1103 subtitle += "[End time = %s]\n" %readUnitConfObj.endTime
1104
1104
1105 adminObj = schainpy.admin.SchainNotify()
1105 adminObj = schainpy.admin.SchainNotify()
1106 adminObj.sendAlert(message=message,
1106 adminObj.sendAlert(message=message,
1107 subject=subject,
1107 subject=subject,
1108 subtitle=subtitle,
1108 subtitle=subtitle,
1109 filename=self.filename)
1109 filename=self.filename)
1110
1110
1111 def isPaused(self):
1111 def isPaused(self):
1112 return 0
1112 return 0
1113
1113
1114 def isStopped(self):
1114 def isStopped(self):
1115 return 0
1115 return 0
1116
1116
1117 def runController(self):
1117 def runController(self):
1118 """
1118 """
1119 returns 0 when this process has been stopped, 1 otherwise
1119 returns 0 when this process has been stopped, 1 otherwise
1120 """
1120 """
1121
1121
1122 if self.isPaused():
1122 if self.isPaused():
1123 print "Process suspended"
1123 print "Process suspended"
1124
1124
1125 while True:
1125 while True:
1126 sleep(0.1)
1126 sleep(0.1)
1127
1127
1128 if not self.isPaused():
1128 if not self.isPaused():
1129 break
1129 break
1130
1130
1131 if self.isStopped():
1131 if self.isStopped():
1132 break
1132 break
1133
1133
1134 print "Process reinitialized"
1134 print "Process reinitialized"
1135
1135
1136 if self.isStopped():
1136 if self.isStopped():
1137 print "Process stopped"
1137 print "Process stopped"
1138 return 0
1138 return 0
1139
1139
1140 return 1
1140 return 1
1141
1141
1142 def setFilename(self, filename):
1142 def setFilename(self, filename):
1143
1143
1144 self.filename = filename
1144 self.filename = filename
1145
1145
1146 def setPlotterQueue(self, plotter_queue):
1146 def setPlotterQueue(self, plotter_queue):
1147
1147
1148 raise NotImplementedError, "Use schainpy.controller_api.ControllerThread instead Project class"
1148 raise NotImplementedError, "Use schainpy.controller_api.ControllerThread instead Project class"
1149
1149
1150 def getPlotterQueue(self):
1150 def getPlotterQueue(self):
1151
1151
1152 raise NotImplementedError, "Use schainpy.controller_api.ControllerThread instead Project class"
1152 raise NotImplementedError, "Use schainpy.controller_api.ControllerThread instead Project class"
1153
1153
1154 def useExternalPlotter(self):
1154 def useExternalPlotter(self):
1155
1155
1156 raise NotImplementedError, "Use schainpy.controller_api.ControllerThread instead Project class"
1156 raise NotImplementedError, "Use schainpy.controller_api.ControllerThread instead Project class"
1157
1157
1158 def run(self):
1158 def run(self):
1159
1159
1160 print
1160 print
1161 print "*"*60
1161 print "*"*60
1162 print " Starting SIGNAL CHAIN PROCESSING v%s " %schainpy.__version__
1162 print " Starting SIGNAL CHAIN PROCESSING v%s " %schainpy.__version__
1163 print "*"*60
1163 print "*"*60
1164 print
1164 print
1165
1165
1166 keyList = self.procUnitConfObjDict.keys()
1166 keyList = self.procUnitConfObjDict.keys()
1167 keyList.sort()
1167 keyList.sort()
1168
1168
1169 while(True):
1169 while(True):
1170
1170
1171 is_ok = False
1171 is_ok = False
1172
1172
1173 for procKey in keyList:
1173 for procKey in keyList:
1174 # print "Running the '%s' process with %s" %(procUnitConfObj.name, procUnitConfObj.id)
1174 # print "Running the '%s' process with %s" %(procUnitConfObj.name, procUnitConfObj.id)
1175
1175
1176 procUnitConfObj = self.procUnitConfObjDict[procKey]
1176 procUnitConfObj = self.procUnitConfObjDict[procKey]
1177
1177
1178 try:
1178 try:
1179 sts = procUnitConfObj.run()
1179 sts = procUnitConfObj.run()
1180 is_ok = is_ok or sts
1180 is_ok = is_ok or sts
1181 except KeyboardInterrupt:
1181 except KeyboardInterrupt:
1182 is_ok = False
1182 is_ok = False
1183 break
1183 break
1184 except ValueError, e:
1184 except ValueError, e:
1185 sleep(0.5)
1185 sleep(0.5)
1186 self.__handleError(procUnitConfObj, send_email=False)
1186 self.__handleError(procUnitConfObj, send_email=True)
1187 is_ok = False
1187 is_ok = False
1188 break
1188 break
1189 except:
1189 except:
1190 sleep(0.5)
1190 sleep(0.5)
1191 self.__handleError(procUnitConfObj)
1191 self.__handleError(procUnitConfObj)
1192 is_ok = False
1192 is_ok = False
1193 break
1193 break
1194
1194
1195 #If every process unit finished so end process
1195 #If every process unit finished so end process
1196 if not(is_ok):
1196 if not(is_ok):
1197 # print "Every process unit have finished"
1197 # print "Every process unit have finished"
1198 break
1198 break
1199
1199
1200 if not self.runController():
1200 if not self.runController():
1201 break
1201 break
1202
1202
1203 #Closing every process
1203 #Closing every process
1204 for procKey in keyList:
1204 for procKey in keyList:
1205 procUnitConfObj = self.procUnitConfObjDict[procKey]
1205 procUnitConfObj = self.procUnitConfObjDict[procKey]
1206 procUnitConfObj.close()
1206 procUnitConfObj.close()
1207
1207
1208 print "Process finished"
1208 print "Process finished"
1209
1209
1210 def start(self):
1210 def start(self):
1211
1211
1212 self.writeXml()
1212 self.writeXml()
1213
1213
1214 self.createObjects()
1214 self.createObjects()
1215 self.connectObjects()
1215 self.connectObjects()
1216 self.run()
1216 self.run()
1217
1217
1218 if __name__ == '__main__':
1218 if __name__ == '__main__':
1219
1219
1220 desc = "Segundo Test"
1220 desc = "Segundo Test"
1221 filename = "schain.xml"
1221 filename = "schain.xml"
1222
1222
1223 controllerObj = Project()
1223 controllerObj = Project()
1224
1224
1225 controllerObj.setup(id = '191', name='test01', description=desc)
1225 controllerObj.setup(id = '191', name='test01', description=desc)
1226
1226
1227 readUnitConfObj = controllerObj.addReadUnit(datatype='Voltage',
1227 readUnitConfObj = controllerObj.addReadUnit(datatype='Voltage',
1228 path='data/rawdata/',
1228 path='data/rawdata/',
1229 startDate='2011/01/01',
1229 startDate='2011/01/01',
1230 endDate='2012/12/31',
1230 endDate='2012/12/31',
1231 startTime='00:00:00',
1231 startTime='00:00:00',
1232 endTime='23:59:59',
1232 endTime='23:59:59',
1233 online=1,
1233 online=1,
1234 walk=1)
1234 walk=1)
1235
1235
1236 procUnitConfObj0 = controllerObj.addProcUnit(datatype='Voltage', inputId=readUnitConfObj.getId())
1236 procUnitConfObj0 = controllerObj.addProcUnit(datatype='Voltage', inputId=readUnitConfObj.getId())
1237
1237
1238 opObj10 = procUnitConfObj0.addOperation(name='selectChannels')
1238 opObj10 = procUnitConfObj0.addOperation(name='selectChannels')
1239 opObj10.addParameter(name='channelList', value='3,4,5', format='intlist')
1239 opObj10.addParameter(name='channelList', value='3,4,5', format='intlist')
1240
1240
1241 opObj10 = procUnitConfObj0.addOperation(name='selectHeights')
1241 opObj10 = procUnitConfObj0.addOperation(name='selectHeights')
1242 opObj10.addParameter(name='minHei', value='90', format='float')
1242 opObj10.addParameter(name='minHei', value='90', format='float')
1243 opObj10.addParameter(name='maxHei', value='180', format='float')
1243 opObj10.addParameter(name='maxHei', value='180', format='float')
1244
1244
1245 opObj12 = procUnitConfObj0.addOperation(name='CohInt', optype='external')
1245 opObj12 = procUnitConfObj0.addOperation(name='CohInt', optype='external')
1246 opObj12.addParameter(name='n', value='10', format='int')
1246 opObj12.addParameter(name='n', value='10', format='int')
1247
1247
1248 procUnitConfObj1 = controllerObj.addProcUnit(datatype='Spectra', inputId=procUnitConfObj0.getId())
1248 procUnitConfObj1 = controllerObj.addProcUnit(datatype='Spectra', inputId=procUnitConfObj0.getId())
1249 procUnitConfObj1.addParameter(name='nFFTPoints', value='32', format='int')
1249 procUnitConfObj1.addParameter(name='nFFTPoints', value='32', format='int')
1250 # procUnitConfObj1.addParameter(name='pairList', value='(0,1),(0,2),(1,2)', format='')
1250 # procUnitConfObj1.addParameter(name='pairList', value='(0,1),(0,2),(1,2)', format='')
1251
1251
1252
1252
1253 opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='external')
1253 opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='external')
1254 opObj11.addParameter(name='idfigure', value='1', format='int')
1254 opObj11.addParameter(name='idfigure', value='1', format='int')
1255 opObj11.addParameter(name='wintitle', value='SpectraPlot0', format='str')
1255 opObj11.addParameter(name='wintitle', value='SpectraPlot0', format='str')
1256 opObj11.addParameter(name='zmin', value='40', format='int')
1256 opObj11.addParameter(name='zmin', value='40', format='int')
1257 opObj11.addParameter(name='zmax', value='90', format='int')
1257 opObj11.addParameter(name='zmax', value='90', format='int')
1258 opObj11.addParameter(name='showprofile', value='1', format='int')
1258 opObj11.addParameter(name='showprofile', value='1', format='int')
1259
1259
1260 print "Escribiendo el archivo XML"
1260 print "Escribiendo el archivo XML"
1261
1261
1262 controllerObj.writeXml(filename)
1262 controllerObj.writeXml(filename)
1263
1263
1264 print "Leyendo el archivo XML"
1264 print "Leyendo el archivo XML"
1265 controllerObj.readXml(filename)
1265 controllerObj.readXml(filename)
1266 #controllerObj.printattr()
1266 #controllerObj.printattr()
1267
1267
1268 controllerObj.createObjects()
1268 controllerObj.createObjects()
1269 controllerObj.connectObjects()
1269 controllerObj.connectObjects()
1270 controllerObj.run()
1270 controllerObj.run()
1271
1271
1272 No newline at end of file
1272
General Comments 0
You need to be logged in to leave comments. Login now