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