##// END OF EJS Templates
v2.2.0: Controller updated
Miguel Valdez -
r708:e5ce72bc2207
parent child
Show More

The requested changes are too big and content was truncated. Show full diff

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