##// END OF EJS Templates
Bug fixed in SignalChain GUI:...
Miguel Valdez -
r581:cd9db1f6f595
parent child
Show More

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

@@ -1,1026 +1,1034
1 '''
1 '''
2 Created on September , 2012
2 Created on September , 2012
3 @author:
3 @author:
4 '''
4 '''
5 from xml.etree.ElementTree import Element, SubElement
5 from xml.etree.ElementTree import Element, SubElement
6 from xml.etree import ElementTree as ET
6 from xml.etree import ElementTree as ET
7 from xml.dom import minidom
7 from xml.dom import minidom
8
8
9 #import datetime
9 #import datetime
10 from model import *
10 from model import *
11
11
12 import ast
12 import ast
13
13
14 def prettify(elem):
14 def prettify(elem):
15 """Return a pretty-printed XML string for the Element.
15 """Return a pretty-printed XML string for the Element.
16 """
16 """
17 rough_string = ET.tostring(elem, 'utf-8')
17 rough_string = ET.tostring(elem, 'utf-8')
18 reparsed = minidom.parseString(rough_string)
18 reparsed = minidom.parseString(rough_string)
19 return reparsed.toprettyxml(indent=" ")
19 return reparsed.toprettyxml(indent=" ")
20
20
21 class ParameterConf():
21 class ParameterConf():
22
22
23 id = None
23 id = None
24 name = None
24 name = None
25 value = None
25 value = None
26 format = None
26 format = None
27
27
28 __formated_value = None
28 __formated_value = None
29
29
30 ELEMENTNAME = 'Parameter'
30 ELEMENTNAME = 'Parameter'
31
31
32 def __init__(self):
32 def __init__(self):
33
33
34 self.format = 'str'
34 self.format = 'str'
35
35
36 def getElementName(self):
36 def getElementName(self):
37
37
38 return self.ELEMENTNAME
38 return self.ELEMENTNAME
39
39
40 def getValue(self):
40 def getValue(self):
41
41
42 if self.__formated_value != None:
42 if self.__formated_value != None:
43
43
44 return self.__formated_value
44 return self.__formated_value
45
45
46 value = self.value
46 value = self.value
47
47
48 if self.format == 'bool':
48 if self.format == 'bool':
49 value = int(value)
49 value = int(value)
50
50
51 if self.format == 'list':
51 if self.format == 'list':
52 strList = value.split(',')
52 strList = value.split(',')
53
53
54 self.__formated_value = strList
54 self.__formated_value = strList
55
55
56 return self.__formated_value
56 return self.__formated_value
57
57
58 if self.format == 'intlist':
58 if self.format == 'intlist':
59 """
59 """
60 Example:
60 Example:
61 value = (0,1,2)
61 value = (0,1,2)
62 """
62 """
63 strList = value.split(',')
63 strList = value.split(',')
64 intList = [int(x) for x in strList]
64 intList = [int(x) for x in strList]
65
65
66 self.__formated_value = intList
66 self.__formated_value = intList
67
67
68 return self.__formated_value
68 return self.__formated_value
69
69
70 if self.format == 'floatlist':
70 if self.format == 'floatlist':
71 """
71 """
72 Example:
72 Example:
73 value = (0.5, 1.4, 2.7)
73 value = (0.5, 1.4, 2.7)
74 """
74 """
75 strList = value.split(',')
75 strList = value.split(',')
76 floatList = [float(x) for x in strList]
76 floatList = [float(x) for x in strList]
77
77
78 self.__formated_value = floatList
78 self.__formated_value = floatList
79
79
80 return self.__formated_value
80 return self.__formated_value
81
81
82 if self.format == 'date':
82 if self.format == 'date':
83 strList = value.split('/')
83 strList = value.split('/')
84 intList = [int(x) for x in strList]
84 intList = [int(x) for x in strList]
85 date = datetime.date(intList[0], intList[1], intList[2])
85 date = datetime.date(intList[0], intList[1], intList[2])
86
86
87 self.__formated_value = date
87 self.__formated_value = date
88
88
89 return self.__formated_value
89 return self.__formated_value
90
90
91 if self.format == 'time':
91 if self.format == 'time':
92 strList = value.split(':')
92 strList = value.split(':')
93 intList = [int(x) for x in strList]
93 intList = [int(x) for x in strList]
94 time = datetime.time(intList[0], intList[1], intList[2])
94 time = datetime.time(intList[0], intList[1], intList[2])
95
95
96 self.__formated_value = time
96 self.__formated_value = time
97
97
98 return self.__formated_value
98 return self.__formated_value
99
99
100 if self.format == 'pairslist':
100 if self.format == 'pairslist':
101 """
101 """
102 Example:
102 Example:
103 value = (0,1),(1,2)
103 value = (0,1),(1,2)
104 """
104 """
105
105
106 value = value.replace('(', '')
106 value = value.replace('(', '')
107 value = value.replace(')', '')
107 value = value.replace(')', '')
108
108
109 strList = value.split(',')
109 strList = value.split(',')
110 intList = [int(item) for item in strList]
110 intList = [int(item) for item in strList]
111 pairList = []
111 pairList = []
112 for i in range(len(intList)/2):
112 for i in range(len(intList)/2):
113 pairList.append((intList[i*2], intList[i*2 + 1]))
113 pairList.append((intList[i*2], intList[i*2 + 1]))
114
114
115 self.__formated_value = pairList
115 self.__formated_value = pairList
116
116
117 return self.__formated_value
117 return self.__formated_value
118
118
119 if self.format == 'multilist':
119 if self.format == 'multilist':
120 """
120 """
121 Example:
121 Example:
122 value = (0,1,2),(3,4,5)
122 value = (0,1,2),(3,4,5)
123 """
123 """
124 multiList = ast.literal_eval(value)
124 multiList = ast.literal_eval(value)
125
125
126 self.__formated_value = multiList
126 self.__formated_value = multiList
127
127
128 return self.__formated_value
128 return self.__formated_value
129
129
130 format_func = eval(self.format)
130 format_func = eval(self.format)
131
131
132 self.__formated_value = format_func(value)
132 self.__formated_value = format_func(value)
133
133
134 return self.__formated_value
134 return self.__formated_value
135
135
136 def setup(self, id, name, value, format='str'):
136 def setup(self, id, name, value, format='str'):
137
137
138 self.id = id
138 self.id = id
139 self.name = name
139 self.name = name
140 self.value = str(value)
140 self.value = str(value)
141 self.format = str.lower(format)
141 self.format = str.lower(format)
142
142
143 def update(self, name, value, format='str'):
143 def update(self, name, value, format='str'):
144
144
145 self.name = name
145 self.name = name
146 self.value = str(value)
146 self.value = str(value)
147 self.format = format
147 self.format = format
148
148
149 def makeXml(self, opElement):
149 def makeXml(self, opElement):
150
150
151 parmElement = SubElement(opElement, self.ELEMENTNAME)
151 parmElement = SubElement(opElement, self.ELEMENTNAME)
152 parmElement.set('id', str(self.id))
152 parmElement.set('id', str(self.id))
153 parmElement.set('name', self.name)
153 parmElement.set('name', self.name)
154 parmElement.set('value', self.value)
154 parmElement.set('value', self.value)
155 parmElement.set('format', self.format)
155 parmElement.set('format', self.format)
156
156
157 def readXml(self, parmElement):
157 def readXml(self, parmElement):
158
158
159 self.id = parmElement.get('id')
159 self.id = parmElement.get('id')
160 self.name = parmElement.get('name')
160 self.name = parmElement.get('name')
161 self.value = parmElement.get('value')
161 self.value = parmElement.get('value')
162 self.format = str.lower(parmElement.get('format'))
162 self.format = str.lower(parmElement.get('format'))
163
163
164 #Compatible with old signal chain version
164 #Compatible with old signal chain version
165 if self.format == 'int' and self.name == 'idfigure':
165 if self.format == 'int' and self.name == 'idfigure':
166 self.name = 'id'
166 self.name = 'id'
167
167
168 def printattr(self):
168 def printattr(self):
169
169
170 print "Parameter[%s]: name = %s, value = %s, format = %s" %(self.id, self.name, self.value, self.format)
170 print "Parameter[%s]: name = %s, value = %s, format = %s" %(self.id, self.name, self.value, self.format)
171
171
172 class OperationConf():
172 class OperationConf():
173
173
174 id = None
174 id = None
175 name = None
175 name = None
176 priority = None
176 priority = None
177 type = None
177 type = None
178
178
179 parmConfObjList = []
179 parmConfObjList = []
180
180
181 ELEMENTNAME = 'Operation'
181 ELEMENTNAME = 'Operation'
182
182
183 def __init__(self):
183 def __init__(self):
184
184
185 self.id = 0
185 self.id = 0
186 self.name = None
186 self.name = None
187 self.priority = None
187 self.priority = None
188 self.type = 'self'
188 self.type = 'self'
189
189
190
190
191 def __getNewId(self):
191 def __getNewId(self):
192
192
193 return int(self.id)*10 + len(self.parmConfObjList) + 1
193 return int(self.id)*10 + len(self.parmConfObjList) + 1
194
194
195 def getElementName(self):
195 def getElementName(self):
196
196
197 return self.ELEMENTNAME
197 return self.ELEMENTNAME
198
198
199 def getParameterObjList(self):
199 def getParameterObjList(self):
200
200
201 return self.parmConfObjList
201 return self.parmConfObjList
202
202
203 def getParameterObj(self, parameterName):
203 def getParameterObj(self, parameterName):
204
204
205 for parmConfObj in self.parmConfObjList:
205 for parmConfObj in self.parmConfObjList:
206
206
207 if parmConfObj.name != parameterName:
207 if parmConfObj.name != parameterName:
208 continue
208 continue
209
209
210 return parmConfObj
210 return parmConfObj
211
211
212 return None
212 return None
213
213
214 def getParameterObjfromValue(self,parameterValue):
214 def getParameterObjfromValue(self,parameterValue):
215 for parmConfObj in self.parmConfObjList:
215 for parmConfObj in self.parmConfObjList:
216
216
217 if parmConfObj.getValue() != parameterValue:
217 if parmConfObj.getValue() != parameterValue:
218 continue
218 continue
219
219
220 return parmConfObj.getValue()
220 return parmConfObj.getValue()
221
221
222 return None
222 return None
223
223
224 def getParameterValue(self, parameterName):
224 def getParameterValue(self, parameterName):
225
225
226 parameterObj = self.getParameterObj(parameterName)
226 parameterObj = self.getParameterObj(parameterName)
227 value = parameterObj.getValue()
227 value = parameterObj.getValue()
228
228
229 return value
229 return value
230
230
231 def setup(self, id, name, priority, type):
231 def setup(self, id, name, priority, type):
232
232
233 self.id = id
233 self.id = id
234 self.name = name
234 self.name = name
235 self.type = type
235 self.type = type
236 self.priority = priority
236 self.priority = priority
237
237
238 self.parmConfObjList = []
238 self.parmConfObjList = []
239
239
240 def removeParameters(self):
240 def removeParameters(self):
241
241
242 for obj in self.parmConfObjList:
242 for obj in self.parmConfObjList:
243 del obj
243 del obj
244
244
245 self.parmConfObjList = []
245 self.parmConfObjList = []
246
246
247 def addParameter(self, name, value, format='str'):
247 def addParameter(self, name, value, format='str'):
248
248
249 id = self.__getNewId()
249 id = self.__getNewId()
250
250
251 parmConfObj = ParameterConf()
251 parmConfObj = ParameterConf()
252 parmConfObj.setup(id, name, value, format)
252 parmConfObj.setup(id, name, value, format)
253
253
254 self.parmConfObjList.append(parmConfObj)
254 self.parmConfObjList.append(parmConfObj)
255
255
256 return parmConfObj
256 return parmConfObj
257
257
258 def changeParameter(self, name, value, format='str'):
258 def changeParameter(self, name, value, format='str'):
259
259
260 parmConfObj = self.getParameterObj(name)
260 parmConfObj = self.getParameterObj(name)
261 parmConfObj.update(name, value, format)
261 parmConfObj.update(name, value, format)
262
262
263 return parmConfObj
263 return parmConfObj
264
264
265 def makeXml(self, upElement):
265 def makeXml(self, upElement):
266
266
267 opElement = SubElement(upElement, self.ELEMENTNAME)
267 opElement = SubElement(upElement, self.ELEMENTNAME)
268 opElement.set('id', str(self.id))
268 opElement.set('id', str(self.id))
269 opElement.set('name', self.name)
269 opElement.set('name', self.name)
270 opElement.set('type', self.type)
270 opElement.set('type', self.type)
271 opElement.set('priority', str(self.priority))
271 opElement.set('priority', str(self.priority))
272
272
273 for parmConfObj in self.parmConfObjList:
273 for parmConfObj in self.parmConfObjList:
274 parmConfObj.makeXml(opElement)
274 parmConfObj.makeXml(opElement)
275
275
276 def readXml(self, opElement):
276 def readXml(self, opElement):
277
277
278 self.id = opElement.get('id')
278 self.id = opElement.get('id')
279 self.name = opElement.get('name')
279 self.name = opElement.get('name')
280 self.type = opElement.get('type')
280 self.type = opElement.get('type')
281 self.priority = opElement.get('priority')
281 self.priority = opElement.get('priority')
282
282
283 #Compatible with old signal chain version
283 #Compatible with old signal chain version
284 #Use of 'run' method instead 'init'
284 #Use of 'run' method instead 'init'
285 if self.type == 'self' and self.name == 'init':
285 if self.type == 'self' and self.name == 'init':
286 self.name = 'run'
286 self.name = 'run'
287
287
288 self.parmConfObjList = []
288 self.parmConfObjList = []
289
289
290 parmElementList = opElement.getiterator(ParameterConf().getElementName())
290 parmElementList = opElement.getiterator(ParameterConf().getElementName())
291
291
292 for parmElement in parmElementList:
292 for parmElement in parmElementList:
293 parmConfObj = ParameterConf()
293 parmConfObj = ParameterConf()
294 parmConfObj.readXml(parmElement)
294 parmConfObj.readXml(parmElement)
295
295
296 #Compatible with old signal chain version
296 #Compatible with old signal chain version
297 #If an 'plot' OPERATION is found, changes name operation by the value of its type PARAMETER
297 #If an 'plot' OPERATION is found, changes name operation by the value of its type PARAMETER
298 if self.type != 'self' and self.name == 'Plot':
298 if self.type != 'self' and self.name == 'Plot':
299 if parmConfObj.format == 'str' and parmConfObj.name == 'type':
299 if parmConfObj.format == 'str' and parmConfObj.name == 'type':
300 self.name = parmConfObj.value
300 self.name = parmConfObj.value
301 continue
301 continue
302
302
303 self.parmConfObjList.append(parmConfObj)
303 self.parmConfObjList.append(parmConfObj)
304
304
305 def printattr(self):
305 def printattr(self):
306
306
307 print "%s[%s]: name = %s, type = %s, priority = %s" %(self.ELEMENTNAME,
307 print "%s[%s]: name = %s, type = %s, priority = %s" %(self.ELEMENTNAME,
308 self.id,
308 self.id,
309 self.name,
309 self.name,
310 self.type,
310 self.type,
311 self.priority)
311 self.priority)
312
312
313 for parmConfObj in self.parmConfObjList:
313 for parmConfObj in self.parmConfObjList:
314 parmConfObj.printattr()
314 parmConfObj.printattr()
315
315
316 def createObject(self):
316 def createObject(self):
317
317
318 if self.type == 'self':
318 if self.type == 'self':
319 raise ValueError, "This operation type cannot be created"
319 raise ValueError, "This operation type cannot be created"
320
320
321 if self.type == 'external' or self.type == 'other':
321 if self.type == 'external' or self.type == 'other':
322 className = eval(self.name)
322 className = eval(self.name)
323 opObj = className()
323 opObj = className()
324
324
325 return opObj
325 return opObj
326
326
327 class ProcUnitConf():
327 class ProcUnitConf():
328
328
329 id = None
329 id = None
330 name = None
330 name = None
331 datatype = None
331 datatype = None
332 inputId = None
332 inputId = None
333 parentId = None
333 parentId = None
334
334
335 opConfObjList = []
335 opConfObjList = []
336
336
337 procUnitObj = None
337 procUnitObj = None
338 opObjList = []
338 opObjList = []
339
339
340 ELEMENTNAME = 'ProcUnit'
340 ELEMENTNAME = 'ProcUnit'
341
341
342 def __init__(self):
342 def __init__(self):
343
343
344 self.id = None
344 self.id = None
345 self.datatype = None
345 self.datatype = None
346 self.name = None
346 self.name = None
347 self.inputId = None
347 self.inputId = None
348
348
349 self.opConfObjList = []
349 self.opConfObjList = []
350
350
351 self.procUnitObj = None
351 self.procUnitObj = None
352 self.opObjDict = {}
352 self.opObjDict = {}
353
353
354 def __getPriority(self):
354 def __getPriority(self):
355
355
356 return len(self.opConfObjList)+1
356 return len(self.opConfObjList)+1
357
357
358 def __getNewId(self):
358 def __getNewId(self):
359
359
360 return int(self.id)*10 + len(self.opConfObjList) + 1
360 return int(self.id)*10 + len(self.opConfObjList) + 1
361
361
362 def getElementName(self):
362 def getElementName(self):
363
363
364 return self.ELEMENTNAME
364 return self.ELEMENTNAME
365
365
366 def getId(self):
366 def getId(self):
367
367
368 return str(self.id)
368 return str(self.id)
369
369
370 def getInputId(self):
370 def getInputId(self):
371
371
372 return str(self.inputId)
372 return str(self.inputId)
373
373
374 def getOperationObjList(self):
374 def getOperationObjList(self):
375
375
376 return self.opConfObjList
376 return self.opConfObjList
377
377
378 def getOperationObj(self, name=None):
378 def getOperationObj(self, name=None):
379
379
380 for opConfObj in self.opConfObjList:
380 for opConfObj in self.opConfObjList:
381
381
382 if opConfObj.name != name:
382 if opConfObj.name != name:
383 continue
383 continue
384
384
385 return opConfObj
385 return opConfObj
386
386
387 return None
387 return None
388
388
389 def getOpObjfromParamValue(self,value=None):
389 def getOpObjfromParamValue(self,value=None):
390
390
391 for opConfObj in self.opConfObjList:
391 for opConfObj in self.opConfObjList:
392 if opConfObj.getParameterObjfromValue(parameterValue=value) != value:
392 if opConfObj.getParameterObjfromValue(parameterValue=value) != value:
393 continue
393 continue
394 return opConfObj
394 return opConfObj
395 return None
395 return None
396
396
397 def getProcUnitObj(self):
397 def getProcUnitObj(self):
398
398
399 return self.procUnitObj
399 return self.procUnitObj
400
400
401 def setup(self, id, name, datatype, inputId, parentId=None):
401 def setup(self, id, name, datatype, inputId, parentId=None):
402
402
403 self.id = id
403 self.id = id
404 self.name = name
404 self.name = name
405 self.datatype = datatype
405 self.datatype = datatype
406 self.inputId = inputId
406 self.inputId = inputId
407 self.parentId = parentId
407 self.parentId = parentId
408
408
409 self.opConfObjList = []
409 self.opConfObjList = []
410
410
411 self.addOperation(name='run', optype='self')
411 self.addOperation(name='run', optype='self')
412
412
413 def removeOperations(self):
413 def removeOperations(self):
414
414
415 for obj in self.opConfObjList:
415 for obj in self.opConfObjList:
416 del obj
416 del obj
417
417
418 self.opConfObjList = []
418 self.opConfObjList = []
419 self.addOperation(name='run')
419 self.addOperation(name='run')
420
420
421 def addParameter(self, **kwargs):
421 def addParameter(self, **kwargs):
422 '''
422 '''
423 Add parameters to "run" operation
423 Add parameters to "run" operation
424 '''
424 '''
425 opObj = self.opConfObjList[0]
425 opObj = self.opConfObjList[0]
426
426
427 opObj.addParameter(**kwargs)
427 opObj.addParameter(**kwargs)
428
428
429 return opObj
429 return opObj
430
430
431 def addOperation(self, name, optype='self'):
431 def addOperation(self, name, optype='self'):
432
432
433 id = self.__getNewId()
433 id = self.__getNewId()
434 priority = self.__getPriority()
434 priority = self.__getPriority()
435
435
436 opConfObj = OperationConf()
436 opConfObj = OperationConf()
437 opConfObj.setup(id, name=name, priority=priority, type=optype)
437 opConfObj.setup(id, name=name, priority=priority, type=optype)
438
438
439 self.opConfObjList.append(opConfObj)
439 self.opConfObjList.append(opConfObj)
440
440
441 return opConfObj
441 return opConfObj
442
442
443 def makeXml(self, procUnitElement):
443 def makeXml(self, procUnitElement):
444
444
445 upElement = SubElement(procUnitElement, self.ELEMENTNAME)
445 upElement = SubElement(procUnitElement, self.ELEMENTNAME)
446 upElement.set('id', str(self.id))
446 upElement.set('id', str(self.id))
447 upElement.set('name', self.name)
447 upElement.set('name', self.name)
448 upElement.set('datatype', self.datatype)
448 upElement.set('datatype', self.datatype)
449 upElement.set('inputId', str(self.inputId))
449 upElement.set('inputId', str(self.inputId))
450
450
451 for opConfObj in self.opConfObjList:
451 for opConfObj in self.opConfObjList:
452 opConfObj.makeXml(upElement)
452 opConfObj.makeXml(upElement)
453
453
454 def readXml(self, upElement):
454 def readXml(self, upElement):
455
455
456 self.id = upElement.get('id')
456 self.id = upElement.get('id')
457 self.name = upElement.get('name')
457 self.name = upElement.get('name')
458 self.datatype = upElement.get('datatype')
458 self.datatype = upElement.get('datatype')
459 self.inputId = upElement.get('inputId')
459 self.inputId = upElement.get('inputId')
460
460
461 self.opConfObjList = []
461 self.opConfObjList = []
462
462
463 opElementList = upElement.getiterator(OperationConf().getElementName())
463 opElementList = upElement.getiterator(OperationConf().getElementName())
464
464
465 for opElement in opElementList:
465 for opElement in opElementList:
466 opConfObj = OperationConf()
466 opConfObj = OperationConf()
467 opConfObj.readXml(opElement)
467 opConfObj.readXml(opElement)
468 self.opConfObjList.append(opConfObj)
468 self.opConfObjList.append(opConfObj)
469
469
470 def printattr(self):
470 def printattr(self):
471
471
472 print "%s[%s]: name = %s, datatype = %s, inputId = %s" %(self.ELEMENTNAME,
472 print "%s[%s]: name = %s, datatype = %s, inputId = %s" %(self.ELEMENTNAME,
473 self.id,
473 self.id,
474 self.name,
474 self.name,
475 self.datatype,
475 self.datatype,
476 self.inputId)
476 self.inputId)
477
477
478 for opConfObj in self.opConfObjList:
478 for opConfObj in self.opConfObjList:
479 opConfObj.printattr()
479 opConfObj.printattr()
480
480
481 def createObjects(self):
481 def createObjects(self):
482
482
483 className = eval(self.name)
483 className = eval(self.name)
484 procUnitObj = className()
484 procUnitObj = className()
485
485
486 for opConfObj in self.opConfObjList:
486 for opConfObj in self.opConfObjList:
487
487
488 if opConfObj.type == 'self':
488 if opConfObj.type == 'self':
489 continue
489 continue
490
490
491 opObj = opConfObj.createObject()
491 opObj = opConfObj.createObject()
492
492
493 self.opObjDict[opConfObj.id] = opObj
493 self.opObjDict[opConfObj.id] = opObj
494 procUnitObj.addOperation(opObj, opConfObj.id)
494 procUnitObj.addOperation(opObj, opConfObj.id)
495
495
496 self.procUnitObj = procUnitObj
496 self.procUnitObj = procUnitObj
497
497
498 return procUnitObj
498 return procUnitObj
499
499
500 def run(self):
500 def run(self):
501
501
502 finalSts = False
502 finalSts = False
503
503
504 for opConfObj in self.opConfObjList:
504 for opConfObj in self.opConfObjList:
505
505
506 kwargs = {}
506 kwargs = {}
507 for parmConfObj in opConfObj.getParameterObjList():
507 for parmConfObj in opConfObj.getParameterObjList():
508 if opConfObj.name == 'run' and parmConfObj.name == 'datatype':
508 if opConfObj.name == 'run' and parmConfObj.name == 'datatype':
509 continue
509 continue
510
510
511 kwargs[parmConfObj.name] = parmConfObj.getValue()
511 kwargs[parmConfObj.name] = parmConfObj.getValue()
512
512
513 #print "\tRunning the '%s' operation with %s" %(opConfObj.name, opConfObj.id)
513 #print "\tRunning the '%s' operation with %s" %(opConfObj.name, opConfObj.id)
514 sts = self.procUnitObj.call(opType = opConfObj.type,
514 sts = self.procUnitObj.call(opType = opConfObj.type,
515 opName = opConfObj.name,
515 opName = opConfObj.name,
516 opId = opConfObj.id,
516 opId = opConfObj.id,
517 **kwargs)
517 **kwargs)
518 finalSts = finalSts or sts
518 finalSts = finalSts or sts
519
519
520 return finalSts
520 return finalSts
521
521
522 def close(self):
522 def close(self):
523
523
524 for opConfObj in self.opConfObjList:
524 for opConfObj in self.opConfObjList:
525 if opConfObj.type == 'self':
525 if opConfObj.type == 'self':
526 continue
526 continue
527
527
528 opObj = self.procUnitObj.getOperationObj(opConfObj.id)
528 opObj = self.procUnitObj.getOperationObj(opConfObj.id)
529 opObj.close()
529 opObj.close()
530
530
531 self.procUnitObj.close()
531 self.procUnitObj.close()
532
532
533 return
533 return
534
534
535 class ReadUnitConf(ProcUnitConf):
535 class ReadUnitConf(ProcUnitConf):
536
536
537 path = None
537 path = None
538 startDate = None
538 startDate = None
539 endDate = None
539 endDate = None
540 startTime = None
540 startTime = None
541 endTime = None
541 endTime = None
542
542
543 ELEMENTNAME = 'ReadUnit'
543 ELEMENTNAME = 'ReadUnit'
544
544
545 def __init__(self):
545 def __init__(self):
546
546
547 self.id = None
547 self.id = None
548 self.datatype = None
548 self.datatype = None
549 self.name = None
549 self.name = None
550 self.inputId = 0
550 self.inputId = 0
551
551
552 self.opConfObjList = []
552 self.opConfObjList = []
553 self.opObjList = []
553 self.opObjList = []
554
554
555 def getElementName(self):
555 def getElementName(self):
556
556
557 return self.ELEMENTNAME
557 return self.ELEMENTNAME
558
558
559 def setup(self, id, name, datatype, path, startDate="", endDate="", startTime="", endTime="", parentId=None, **kwargs):
559 def setup(self, id, name, datatype, path, startDate="", endDate="", startTime="", endTime="", parentId=None, **kwargs):
560
560
561 self.id = id
561 self.id = id
562 self.name = name
562 self.name = name
563 self.datatype = datatype
563 self.datatype = datatype
564
564
565 self.path = path
565 self.path = path
566 self.startDate = startDate
566 self.startDate = startDate
567 self.endDate = endDate
567 self.endDate = endDate
568 self.startTime = startTime
568 self.startTime = startTime
569 self.endTime = endTime
569 self.endTime = endTime
570
570
571 self.addRunOperation(**kwargs)
571 self.addRunOperation(**kwargs)
572
572
573 def update(self, datatype, path, startDate, endDate, startTime, endTime, parentId=None, **kwargs):
573 def update(self, datatype, path, startDate, endDate, startTime, endTime, parentId=None, **kwargs):
574
574
575 self.datatype = datatype
575 self.datatype = datatype
576 self.path = path
576 self.path = path
577 self.startDate = startDate
577 self.startDate = startDate
578 self.endDate = endDate
578 self.endDate = endDate
579 self.startTime = startTime
579 self.startTime = startTime
580 self.endTime = endTime
580 self.endTime = endTime
581
581
582 self.updateRunOperation(**kwargs)
582 self.updateRunOperation(**kwargs)
583
583
584 def addRunOperation(self, **kwargs):
584 def addRunOperation(self, **kwargs):
585
585
586 opObj = self.addOperation(name = 'run', optype = 'self')
586 opObj = self.addOperation(name = 'run', optype = 'self')
587
587
588 opObj.addParameter(name='datatype' , value=self.datatype, format='str')
588 opObj.addParameter(name='datatype' , value=self.datatype, format='str')
589 opObj.addParameter(name='path' , value=self.path, format='str')
589 opObj.addParameter(name='path' , value=self.path, format='str')
590 opObj.addParameter(name='startDate' , value=self.startDate, format='date')
590 opObj.addParameter(name='startDate' , value=self.startDate, format='date')
591 opObj.addParameter(name='endDate' , value=self.endDate, format='date')
591 opObj.addParameter(name='endDate' , value=self.endDate, format='date')
592 opObj.addParameter(name='startTime' , value=self.startTime, format='time')
592 opObj.addParameter(name='startTime' , value=self.startTime, format='time')
593 opObj.addParameter(name='endTime' , value=self.endTime, format='time')
593 opObj.addParameter(name='endTime' , value=self.endTime, format='time')
594
594
595 for key, value in kwargs.items():
595 for key, value in kwargs.items():
596 opObj.addParameter(name=key, value=value, format=type(value).__name__)
596 opObj.addParameter(name=key, value=value, format=type(value).__name__)
597
597
598 return opObj
598 return opObj
599
599
600 def updateRunOperation(self, **kwargs):
600 def updateRunOperation(self, **kwargs):
601
601
602 opObj = self.getOperationObj(name = 'run')
602 opObj = self.getOperationObj(name = 'run')
603 opObj.removeParameters()
603 opObj.removeParameters()
604
604
605 opObj.addParameter(name='datatype' , value=self.datatype, format='str')
605 opObj.addParameter(name='datatype' , value=self.datatype, format='str')
606 opObj.addParameter(name='path' , value=self.path, format='str')
606 opObj.addParameter(name='path' , value=self.path, format='str')
607 opObj.addParameter(name='startDate' , value=self.startDate, format='date')
607 opObj.addParameter(name='startDate' , value=self.startDate, format='date')
608 opObj.addParameter(name='endDate' , value=self.endDate, format='date')
608 opObj.addParameter(name='endDate' , value=self.endDate, format='date')
609 opObj.addParameter(name='startTime' , value=self.startTime, format='time')
609 opObj.addParameter(name='startTime' , value=self.startTime, format='time')
610 opObj.addParameter(name='endTime' , value=self.endTime, format='time')
610 opObj.addParameter(name='endTime' , value=self.endTime, format='time')
611
611
612 for key, value in kwargs.items():
612 for key, value in kwargs.items():
613 opObj.addParameter(name=key, value=value, format=type(value).__name__)
613 opObj.addParameter(name=key, value=value, format=type(value).__name__)
614
614
615 return opObj
615 return opObj
616
616
617 class Project():
617 class Project():
618
618
619 id = None
619 id = None
620 name = None
620 name = None
621 description = None
621 description = None
622 # readUnitConfObjList = None
622 # readUnitConfObjList = None
623 procUnitConfObjDict = None
623 procUnitConfObjDict = None
624
624
625 ELEMENTNAME = 'Project'
625 ELEMENTNAME = 'Project'
626
626
627 def __init__(self, control=None, dataq=None):
627 def __init__(self, control=None, dataq=None):
628
628
629 self.id = None
629 self.id = None
630 self.name = None
630 self.name = None
631 self.description = None
631 self.description = None
632
632
633 self.procUnitConfObjDict = {}
633 self.procUnitConfObjDict = {}
634
634
635 #global data_q
635 #global data_q
636 #data_q = dataq
636 #data_q = dataq
637
637
638 if control==None:
638 if control==None:
639 control = {}
639 control = {}
640 control['stop'] = False
640 control['stop'] = False
641 control['pause'] = False
641 control['pause'] = False
642
642
643 self.control = control
643 self.control = control
644
644
645 def __getNewId(self):
645 def __getNewId(self):
646
646
647 id = int(self.id)*10 + len(self.procUnitConfObjDict) + 1
647 id = int(self.id)*10 + len(self.procUnitConfObjDict) + 1
648
648
649 return str(id)
649 return str(id)
650
650
651 def getElementName(self):
651 def getElementName(self):
652
652
653 return self.ELEMENTNAME
653 return self.ELEMENTNAME
654
654
655 def getId(self):
655 def getId(self):
656
656
657 return self.id
657 return self.id
658
658
659 def setup(self, id, name, description):
659 def setup(self, id, name, description):
660
660
661 self.id = id
661 self.id = id
662 self.name = name
662 self.name = name
663 self.description = description
663 self.description = description
664
664
665 def update(self, name, description):
665 def update(self, name, description):
666
666
667 self.name = name
667 self.name = name
668 self.description = description
668 self.description = description
669
669
670 def addReadUnit(self, datatype=None, name=None, **kwargs):
670 def addReadUnit(self, datatype=None, name=None, **kwargs):
671
671
672 #Compatible with old signal chain version
672 #Compatible with old signal chain version
673 if datatype==None and name==None:
673 if datatype==None and name==None:
674 raise ValueError, "datatype or name should be defined"
674 raise ValueError, "datatype or name should be defined"
675
675
676 if name==None:
676 if name==None:
677 if 'Reader' in datatype:
677 if 'Reader' in datatype:
678 name = datatype
678 name = datatype
679 else:
679 else:
680 name = '%sReader' %(datatype)
680 name = '%sReader' %(datatype)
681
681
682 if datatype==None:
682 if datatype==None:
683 datatype = name.replace('Reader','')
683 datatype = name.replace('Reader','')
684
684
685 id = self.__getNewId()
685 id = self.__getNewId()
686
686
687 readUnitConfObj = ReadUnitConf()
687 readUnitConfObj = ReadUnitConf()
688 readUnitConfObj.setup(id, name, datatype, parentId=self.id, **kwargs)
688 readUnitConfObj.setup(id, name, datatype, parentId=self.id, **kwargs)
689
689
690 self.procUnitConfObjDict[readUnitConfObj.getId()] = readUnitConfObj
690 self.procUnitConfObjDict[readUnitConfObj.getId()] = readUnitConfObj
691
691
692 return readUnitConfObj
692 return readUnitConfObj
693
693
694 def addProcUnit(self, inputId=0, datatype=None, name=None):
694 def addProcUnit(self, inputId=0, datatype=None, name=None):
695
695
696 #Compatible with old signal chain version
696 #Compatible with old signal chain version
697 if datatype==None and name==None:
697 if datatype==None and name==None:
698 raise ValueError, "datatype or name should be defined"
698 raise ValueError, "datatype or name should be defined"
699
699
700 if name==None:
700 if name==None:
701 if 'Proc' in datatype:
701 if 'Proc' in datatype:
702 name = datatype
702 name = datatype
703 else:
703 else:
704 name = '%sProc' %(datatype)
704 name = '%sProc' %(datatype)
705
705
706 if datatype==None:
706 if datatype==None:
707 datatype = name.replace('Proc','')
707 datatype = name.replace('Proc','')
708
708
709 id = self.__getNewId()
709 id = self.__getNewId()
710
710
711 procUnitConfObj = ProcUnitConf()
711 procUnitConfObj = ProcUnitConf()
712 procUnitConfObj.setup(id, name, datatype, inputId, parentId=self.id)
712 procUnitConfObj.setup(id, name, datatype, inputId, parentId=self.id)
713
713
714 self.procUnitConfObjDict[procUnitConfObj.getId()] = procUnitConfObj
714 self.procUnitConfObjDict[procUnitConfObj.getId()] = procUnitConfObj
715
715
716 return procUnitConfObj
716 return procUnitConfObj
717
717
718 def getReadUnitId(self):
718 def getReadUnitId(self):
719
719
720 readUnitConfObj = self.getReadUnitObj()
720 readUnitConfObj = self.getReadUnitObj()
721
721
722 return readUnitConfObj.id
722 return readUnitConfObj.id
723
723
724 def getReadUnitObj(self):
724 def getReadUnitObj(self):
725
725
726 for obj in self.procUnitConfObjDict.values():
726 for obj in self.procUnitConfObjDict.values():
727 if obj.getElementName() == "ReadUnit":
727 if obj.getElementName() == "ReadUnit":
728 return obj
728 return obj
729
729
730 return None
730 return None
731
731
732 def getProcUnitObj(self, id):
732 def getProcUnitObj(self, id):
733
733
734 return self.procUnitConfObjDict[id]
734 return self.procUnitConfObjDict[id]
735
735
736 def getProcUnitObjByName(self, name):
737
738 for obj in self.procUnitConfObjDict.values():
739 if obj.name == name:
740 return obj
741
742 return None
743
736 def makeXml(self):
744 def makeXml(self):
737
745
738 projectElement = Element('Project')
746 projectElement = Element('Project')
739 projectElement.set('id', str(self.id))
747 projectElement.set('id', str(self.id))
740 projectElement.set('name', self.name)
748 projectElement.set('name', self.name)
741 projectElement.set('description', self.description)
749 projectElement.set('description', self.description)
742
750
743 # for readUnitConfObj in self.readUnitConfObjList:
751 # for readUnitConfObj in self.readUnitConfObjList:
744 # readUnitConfObj.makeXml(projectElement)
752 # readUnitConfObj.makeXml(projectElement)
745
753
746 for procUnitConfObj in self.procUnitConfObjDict.values():
754 for procUnitConfObj in self.procUnitConfObjDict.values():
747 procUnitConfObj.makeXml(projectElement)
755 procUnitConfObj.makeXml(projectElement)
748
756
749 self.projectElement = projectElement
757 self.projectElement = projectElement
750
758
751 def writeXml(self, filename):
759 def writeXml(self, filename):
752
760
753 self.makeXml()
761 self.makeXml()
754
762
755 #print prettify(self.projectElement)
763 #print prettify(self.projectElement)
756
764
757 ElementTree(self.projectElement).write(filename, method='xml')
765 ElementTree(self.projectElement).write(filename, method='xml')
758
766
759 def readXml(self, filename):
767 def readXml(self, filename):
760
768
761 #tree = ET.parse(filename)
769 #tree = ET.parse(filename)
762 self.projectElement = None
770 self.projectElement = None
763 # self.readUnitConfObjList = []
771 # self.readUnitConfObjList = []
764 self.procUnitConfObjDict = {}
772 self.procUnitConfObjDict = {}
765
773
766 self.projectElement = ElementTree().parse(filename)
774 self.projectElement = ElementTree().parse(filename)
767
775
768 self.project = self.projectElement.tag
776 self.project = self.projectElement.tag
769
777
770 self.id = self.projectElement.get('id')
778 self.id = self.projectElement.get('id')
771 self.name = self.projectElement.get('name')
779 self.name = self.projectElement.get('name')
772 self.description = self.projectElement.get('description')
780 self.description = self.projectElement.get('description')
773
781
774 readUnitElementList = self.projectElement.getiterator(ReadUnitConf().getElementName())
782 readUnitElementList = self.projectElement.getiterator(ReadUnitConf().getElementName())
775
783
776 for readUnitElement in readUnitElementList:
784 for readUnitElement in readUnitElementList:
777 readUnitConfObj = ReadUnitConf()
785 readUnitConfObj = ReadUnitConf()
778 readUnitConfObj.readXml(readUnitElement)
786 readUnitConfObj.readXml(readUnitElement)
779
787
780 self.procUnitConfObjDict[readUnitConfObj.getId()] = readUnitConfObj
788 self.procUnitConfObjDict[readUnitConfObj.getId()] = readUnitConfObj
781
789
782 procUnitElementList = self.projectElement.getiterator(ProcUnitConf().getElementName())
790 procUnitElementList = self.projectElement.getiterator(ProcUnitConf().getElementName())
783
791
784 for procUnitElement in procUnitElementList:
792 for procUnitElement in procUnitElementList:
785 procUnitConfObj = ProcUnitConf()
793 procUnitConfObj = ProcUnitConf()
786 procUnitConfObj.readXml(procUnitElement)
794 procUnitConfObj.readXml(procUnitElement)
787
795
788 self.procUnitConfObjDict[procUnitConfObj.getId()] = procUnitConfObj
796 self.procUnitConfObjDict[procUnitConfObj.getId()] = procUnitConfObj
789
797
790 def printattr(self):
798 def printattr(self):
791
799
792 print "Project[%s]: name = %s, description = %s" %(self.id,
800 print "Project[%s]: name = %s, description = %s" %(self.id,
793 self.name,
801 self.name,
794 self.description)
802 self.description)
795
803
796 # for readUnitConfObj in self.readUnitConfObjList:
804 # for readUnitConfObj in self.readUnitConfObjList:
797 # readUnitConfObj.printattr()
805 # readUnitConfObj.printattr()
798
806
799 for procUnitConfObj in self.procUnitConfObjDict.values():
807 for procUnitConfObj in self.procUnitConfObjDict.values():
800 procUnitConfObj.printattr()
808 procUnitConfObj.printattr()
801
809
802 def createObjects(self):
810 def createObjects(self):
803
811
804 # for readUnitConfObj in self.readUnitConfObjList:
812 # for readUnitConfObj in self.readUnitConfObjList:
805 # readUnitConfObj.createObjects()
813 # readUnitConfObj.createObjects()
806
814
807 for procUnitConfObj in self.procUnitConfObjDict.values():
815 for procUnitConfObj in self.procUnitConfObjDict.values():
808 procUnitConfObj.createObjects()
816 procUnitConfObj.createObjects()
809
817
810 def __connect(self, objIN, thisObj):
818 def __connect(self, objIN, thisObj):
811
819
812 thisObj.setInput(objIN.getOutputObj())
820 thisObj.setInput(objIN.getOutputObj())
813
821
814 def connectObjects(self):
822 def connectObjects(self):
815
823
816 for thisPUConfObj in self.procUnitConfObjDict.values():
824 for thisPUConfObj in self.procUnitConfObjDict.values():
817
825
818 inputId = thisPUConfObj.getInputId()
826 inputId = thisPUConfObj.getInputId()
819
827
820 if int(inputId) == 0:
828 if int(inputId) == 0:
821 continue
829 continue
822
830
823 #Get input object
831 #Get input object
824 puConfINObj = self.procUnitConfObjDict[inputId]
832 puConfINObj = self.procUnitConfObjDict[inputId]
825 puObjIN = puConfINObj.getProcUnitObj()
833 puObjIN = puConfINObj.getProcUnitObj()
826
834
827 #Get current object
835 #Get current object
828 thisPUObj = thisPUConfObj.getProcUnitObj()
836 thisPUObj = thisPUConfObj.getProcUnitObj()
829
837
830 self.__connect(puObjIN, thisPUObj)
838 self.__connect(puObjIN, thisPUObj)
831
839
832 def run(self):
840 def run(self):
833
841
834 # for readUnitConfObj in self.readUnitConfObjList:
842 # for readUnitConfObj in self.readUnitConfObjList:
835 # readUnitConfObj.run()
843 # readUnitConfObj.run()
836 print
844 print
837 print "*"*40
845 print "*"*40
838 print " Starting SIGNAL CHAIN PROCESSING "
846 print " Starting SIGNAL CHAIN PROCESSING "
839 print "*"*40
847 print "*"*40
840 print
848 print
841
849
842 keyList = self.procUnitConfObjDict.keys()
850 keyList = self.procUnitConfObjDict.keys()
843 keyList.sort()
851 keyList.sort()
844
852
845 while(True):
853 while(True):
846
854
847 finalSts = False
855 finalSts = False
848
856
849 for procKey in keyList:
857 for procKey in keyList:
850 # print "Running the '%s' process with %s" %(procUnitConfObj.name, procUnitConfObj.id)
858 # print "Running the '%s' process with %s" %(procUnitConfObj.name, procUnitConfObj.id)
851
859
852 procUnitConfObj = self.procUnitConfObjDict[procKey]
860 procUnitConfObj = self.procUnitConfObjDict[procKey]
853 sts = procUnitConfObj.run()
861 sts = procUnitConfObj.run()
854 finalSts = finalSts or sts
862 finalSts = finalSts or sts
855
863
856 #If every process unit finished so end process
864 #If every process unit finished so end process
857 if not(finalSts):
865 if not(finalSts):
858 print "Every process unit have finished"
866 print "Every process unit have finished"
859 break
867 break
860
868
861 if self.control['pause']:
869 if self.control['pause']:
862 print "Pause..."
870 print "Pause..."
863
871
864 while True:
872 while True:
865 time.sleep(0.1)
873 time.sleep(0.1)
866
874
867 if not self.control['pause']:
875 if not self.control['pause']:
868 break
876 break
869
877
870 if self.control['stop']:
878 if self.control['stop']:
871 break
879 break
872
880
873 if self.control['stop']:
881 if self.control['stop']:
874 print "Stopping process"
882 print "Stopping process"
875 break
883 break
876
884
877 #Closing every process
885 #Closing every process
878 for procKey in keyList:
886 for procKey in keyList:
879 procUnitConfObj = self.procUnitConfObjDict[procKey]
887 procUnitConfObj = self.procUnitConfObjDict[procKey]
880 procUnitConfObj.close()
888 procUnitConfObj.close()
881
889
882 print "Process stopped"
890 print "Process stopped"
883
891
884 def start(self, filename):
892 def start(self, filename):
885
893
886 self.writeXml(filename)
894 self.writeXml(filename)
887 self.readXml(filename)
895 self.readXml(filename)
888
896
889 self.createObjects()
897 self.createObjects()
890 self.connectObjects()
898 self.connectObjects()
891 self.run()
899 self.run()
892
900
893 if __name__ == '__main__':
901 if __name__ == '__main__':
894
902
895 desc = "Segundo Test"
903 desc = "Segundo Test"
896 filename = "schain.xml"
904 filename = "schain.xml"
897
905
898 controllerObj = Project()
906 controllerObj = Project()
899
907
900 controllerObj.setup(id = '191', name='test01', description=desc)
908 controllerObj.setup(id = '191', name='test01', description=desc)
901
909
902 readUnitConfObj = controllerObj.addReadUnit(datatype='Voltage',
910 readUnitConfObj = controllerObj.addReadUnit(datatype='Voltage',
903 path='data/rawdata/',
911 path='data/rawdata/',
904 startDate='2011/01/01',
912 startDate='2011/01/01',
905 endDate='2012/12/31',
913 endDate='2012/12/31',
906 startTime='00:00:00',
914 startTime='00:00:00',
907 endTime='23:59:59',
915 endTime='23:59:59',
908 online=1,
916 online=1,
909 walk=1)
917 walk=1)
910
918
911 # opObj00 = readUnitConfObj.addOperation(name='printInfo')
919 # opObj00 = readUnitConfObj.addOperation(name='printInfo')
912
920
913 procUnitConfObj0 = controllerObj.addProcUnit(datatype='Voltage', inputId=readUnitConfObj.getId())
921 procUnitConfObj0 = controllerObj.addProcUnit(datatype='Voltage', inputId=readUnitConfObj.getId())
914
922
915 opObj10 = procUnitConfObj0.addOperation(name='selectChannels')
923 opObj10 = procUnitConfObj0.addOperation(name='selectChannels')
916 opObj10.addParameter(name='channelList', value='3,4,5', format='intlist')
924 opObj10.addParameter(name='channelList', value='3,4,5', format='intlist')
917
925
918 opObj10 = procUnitConfObj0.addOperation(name='selectHeights')
926 opObj10 = procUnitConfObj0.addOperation(name='selectHeights')
919 opObj10.addParameter(name='minHei', value='90', format='float')
927 opObj10.addParameter(name='minHei', value='90', format='float')
920 opObj10.addParameter(name='maxHei', value='180', format='float')
928 opObj10.addParameter(name='maxHei', value='180', format='float')
921
929
922 opObj12 = procUnitConfObj0.addOperation(name='CohInt', optype='external')
930 opObj12 = procUnitConfObj0.addOperation(name='CohInt', optype='external')
923 opObj12.addParameter(name='n', value='10', format='int')
931 opObj12.addParameter(name='n', value='10', format='int')
924
932
925 procUnitConfObj1 = controllerObj.addProcUnit(datatype='Spectra', inputId=procUnitConfObj0.getId())
933 procUnitConfObj1 = controllerObj.addProcUnit(datatype='Spectra', inputId=procUnitConfObj0.getId())
926 procUnitConfObj1.addParameter(name='nFFTPoints', value='32', format='int')
934 procUnitConfObj1.addParameter(name='nFFTPoints', value='32', format='int')
927 # procUnitConfObj1.addParameter(name='pairList', value='(0,1),(0,2),(1,2)', format='')
935 # procUnitConfObj1.addParameter(name='pairList', value='(0,1),(0,2),(1,2)', format='')
928
936
929
937
930 opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='external')
938 opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='external')
931 opObj11.addParameter(name='idfigure', value='1', format='int')
939 opObj11.addParameter(name='idfigure', value='1', format='int')
932 opObj11.addParameter(name='wintitle', value='SpectraPlot0', format='str')
940 opObj11.addParameter(name='wintitle', value='SpectraPlot0', format='str')
933 opObj11.addParameter(name='zmin', value='40', format='int')
941 opObj11.addParameter(name='zmin', value='40', format='int')
934 opObj11.addParameter(name='zmax', value='90', format='int')
942 opObj11.addParameter(name='zmax', value='90', format='int')
935 opObj11.addParameter(name='showprofile', value='1', format='int')
943 opObj11.addParameter(name='showprofile', value='1', format='int')
936
944
937 # opObj11 = procUnitConfObj1.addOperation(name='CrossSpectraPlot', optype='external')
945 # opObj11 = procUnitConfObj1.addOperation(name='CrossSpectraPlot', optype='external')
938 # opObj11.addParameter(name='idfigure', value='2', format='int')
946 # opObj11.addParameter(name='idfigure', value='2', format='int')
939 # opObj11.addParameter(name='wintitle', value='CrossSpectraPlot', format='str')
947 # opObj11.addParameter(name='wintitle', value='CrossSpectraPlot', format='str')
940 # opObj11.addParameter(name='zmin', value='40', format='int')
948 # opObj11.addParameter(name='zmin', value='40', format='int')
941 # opObj11.addParameter(name='zmax', value='90', format='int')
949 # opObj11.addParameter(name='zmax', value='90', format='int')
942
950
943
951
944 # procUnitConfObj2 = controllerObj.addProcUnit(datatype='Voltage', inputId=procUnitConfObj0.getId())
952 # procUnitConfObj2 = controllerObj.addProcUnit(datatype='Voltage', inputId=procUnitConfObj0.getId())
945 #
953 #
946 # opObj12 = procUnitConfObj2.addOperation(name='CohInt', optype='external')
954 # opObj12 = procUnitConfObj2.addOperation(name='CohInt', optype='external')
947 # opObj12.addParameter(name='n', value='2', format='int')
955 # opObj12.addParameter(name='n', value='2', format='int')
948 # opObj12.addParameter(name='overlapping', value='1', format='int')
956 # opObj12.addParameter(name='overlapping', value='1', format='int')
949 #
957 #
950 # procUnitConfObj3 = controllerObj.addProcUnit(datatype='Spectra', inputId=procUnitConfObj2.getId())
958 # procUnitConfObj3 = controllerObj.addProcUnit(datatype='Spectra', inputId=procUnitConfObj2.getId())
951 # procUnitConfObj3.addParameter(name='nFFTPoints', value='32', format='int')
959 # procUnitConfObj3.addParameter(name='nFFTPoints', value='32', format='int')
952 #
960 #
953 # opObj11 = procUnitConfObj3.addOperation(name='SpectraPlot', optype='external')
961 # opObj11 = procUnitConfObj3.addOperation(name='SpectraPlot', optype='external')
954 # opObj11.addParameter(name='idfigure', value='2', format='int')
962 # opObj11.addParameter(name='idfigure', value='2', format='int')
955 # opObj11.addParameter(name='wintitle', value='SpectraPlot1', format='str')
963 # opObj11.addParameter(name='wintitle', value='SpectraPlot1', format='str')
956 # opObj11.addParameter(name='zmin', value='40', format='int')
964 # opObj11.addParameter(name='zmin', value='40', format='int')
957 # opObj11.addParameter(name='zmax', value='90', format='int')
965 # opObj11.addParameter(name='zmax', value='90', format='int')
958 # opObj11.addParameter(name='showprofile', value='1', format='int')
966 # opObj11.addParameter(name='showprofile', value='1', format='int')
959
967
960 # opObj11 = procUnitConfObj1.addOperation(name='RTIPlot', optype='external')
968 # opObj11 = procUnitConfObj1.addOperation(name='RTIPlot', optype='external')
961 # opObj11.addParameter(name='idfigure', value='10', format='int')
969 # opObj11.addParameter(name='idfigure', value='10', format='int')
962 # opObj11.addParameter(name='wintitle', value='RTI', format='str')
970 # opObj11.addParameter(name='wintitle', value='RTI', format='str')
963 ## opObj11.addParameter(name='xmin', value='21', format='float')
971 ## opObj11.addParameter(name='xmin', value='21', format='float')
964 ## opObj11.addParameter(name='xmax', value='22', format='float')
972 ## opObj11.addParameter(name='xmax', value='22', format='float')
965 # opObj11.addParameter(name='zmin', value='40', format='int')
973 # opObj11.addParameter(name='zmin', value='40', format='int')
966 # opObj11.addParameter(name='zmax', value='90', format='int')
974 # opObj11.addParameter(name='zmax', value='90', format='int')
967 # opObj11.addParameter(name='showprofile', value='1', format='int')
975 # opObj11.addParameter(name='showprofile', value='1', format='int')
968 # opObj11.addParameter(name='timerange', value=str(60), format='int')
976 # opObj11.addParameter(name='timerange', value=str(60), format='int')
969
977
970 # opObj10 = procUnitConfObj1.addOperation(name='selectChannels')
978 # opObj10 = procUnitConfObj1.addOperation(name='selectChannels')
971 # opObj10.addParameter(name='channelList', value='0,2,4,6', format='intlist')
979 # opObj10.addParameter(name='channelList', value='0,2,4,6', format='intlist')
972 #
980 #
973 # opObj12 = procUnitConfObj1.addOperation(name='IncohInt', optype='external')
981 # opObj12 = procUnitConfObj1.addOperation(name='IncohInt', optype='external')
974 # opObj12.addParameter(name='n', value='2', format='int')
982 # opObj12.addParameter(name='n', value='2', format='int')
975 #
983 #
976 # opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='external')
984 # opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='external')
977 # opObj11.addParameter(name='idfigure', value='2', format='int')
985 # opObj11.addParameter(name='idfigure', value='2', format='int')
978 # opObj11.addParameter(name='wintitle', value='SpectraPlot10', format='str')
986 # opObj11.addParameter(name='wintitle', value='SpectraPlot10', format='str')
979 # opObj11.addParameter(name='zmin', value='70', format='int')
987 # opObj11.addParameter(name='zmin', value='70', format='int')
980 # opObj11.addParameter(name='zmax', value='90', format='int')
988 # opObj11.addParameter(name='zmax', value='90', format='int')
981 #
989 #
982 # opObj10 = procUnitConfObj1.addOperation(name='selectChannels')
990 # opObj10 = procUnitConfObj1.addOperation(name='selectChannels')
983 # opObj10.addParameter(name='channelList', value='2,6', format='intlist')
991 # opObj10.addParameter(name='channelList', value='2,6', format='intlist')
984 #
992 #
985 # opObj12 = procUnitConfObj1.addOperation(name='IncohInt', optype='external')
993 # opObj12 = procUnitConfObj1.addOperation(name='IncohInt', optype='external')
986 # opObj12.addParameter(name='n', value='2', format='int')
994 # opObj12.addParameter(name='n', value='2', format='int')
987 #
995 #
988 # opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='external')
996 # opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='external')
989 # opObj11.addParameter(name='idfigure', value='3', format='int')
997 # opObj11.addParameter(name='idfigure', value='3', format='int')
990 # opObj11.addParameter(name='wintitle', value='SpectraPlot10', format='str')
998 # opObj11.addParameter(name='wintitle', value='SpectraPlot10', format='str')
991 # opObj11.addParameter(name='zmin', value='70', format='int')
999 # opObj11.addParameter(name='zmin', value='70', format='int')
992 # opObj11.addParameter(name='zmax', value='90', format='int')
1000 # opObj11.addParameter(name='zmax', value='90', format='int')
993
1001
994
1002
995 # opObj12 = procUnitConfObj1.addOperation(name='decoder')
1003 # opObj12 = procUnitConfObj1.addOperation(name='decoder')
996 # opObj12.addParameter(name='ncode', value='2', format='int')
1004 # opObj12.addParameter(name='ncode', value='2', format='int')
997 # opObj12.addParameter(name='nbauds', value='8', format='int')
1005 # opObj12.addParameter(name='nbauds', value='8', format='int')
998 # opObj12.addParameter(name='code0', value='001110011', format='int')
1006 # opObj12.addParameter(name='code0', value='001110011', format='int')
999 # opObj12.addParameter(name='code1', value='001110011', format='int')
1007 # opObj12.addParameter(name='code1', value='001110011', format='int')
1000
1008
1001
1009
1002
1010
1003 # procUnitConfObj2 = controllerObj.addProcUnit(datatype='Spectra', inputId=procUnitConfObj1.getId())
1011 # procUnitConfObj2 = controllerObj.addProcUnit(datatype='Spectra', inputId=procUnitConfObj1.getId())
1004 #
1012 #
1005 # opObj21 = procUnitConfObj2.addOperation(name='IncohInt', optype='external')
1013 # opObj21 = procUnitConfObj2.addOperation(name='IncohInt', optype='external')
1006 # opObj21.addParameter(name='n', value='2', format='int')
1014 # opObj21.addParameter(name='n', value='2', format='int')
1007 #
1015 #
1008 # opObj11 = procUnitConfObj2.addOperation(name='SpectraPlot', optype='external')
1016 # opObj11 = procUnitConfObj2.addOperation(name='SpectraPlot', optype='external')
1009 # opObj11.addParameter(name='idfigure', value='4', format='int')
1017 # opObj11.addParameter(name='idfigure', value='4', format='int')
1010 # opObj11.addParameter(name='wintitle', value='SpectraPlot OBJ 2', format='str')
1018 # opObj11.addParameter(name='wintitle', value='SpectraPlot OBJ 2', format='str')
1011 # opObj11.addParameter(name='zmin', value='70', format='int')
1019 # opObj11.addParameter(name='zmin', value='70', format='int')
1012 # opObj11.addParameter(name='zmax', value='90', format='int')
1020 # opObj11.addParameter(name='zmax', value='90', format='int')
1013
1021
1014 print "Escribiendo el archivo XML"
1022 print "Escribiendo el archivo XML"
1015
1023
1016 controllerObj.writeXml(filename)
1024 controllerObj.writeXml(filename)
1017
1025
1018 print "Leyendo el archivo XML"
1026 print "Leyendo el archivo XML"
1019 controllerObj.readXml(filename)
1027 controllerObj.readXml(filename)
1020 #controllerObj.printattr()
1028 #controllerObj.printattr()
1021
1029
1022 controllerObj.createObjects()
1030 controllerObj.createObjects()
1023 controllerObj.connectObjects()
1031 controllerObj.connectObjects()
1024 controllerObj.run()
1032 controllerObj.run()
1025
1033
1026 No newline at end of file
1034
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
@@ -1,949 +1,949
1 '''
1 '''
2 @author: Daniel Suarez
2 @author: Daniel Suarez
3 '''
3 '''
4 import os
4 import os
5 import glob
5 import glob
6 import ftplib
6 import ftplib
7
7
8 try:
8 try:
9 import paramiko
9 import paramiko
10 import scp
10 import scp
11 except:
11 except:
12 print "You should install paramiko if you will use SSH protocol to upload files to a server"
12 print "You should install paramiko if you will use SSH protocol to upload files to a server"
13
13
14 import multiprocessing
14 import multiprocessing
15
15
16 import time
16 import time
17 import threading
17 import threading
18
18
19
19
20 try:
20 try:
21 from gevent import sleep
21 from gevent import sleep
22 except:
22 except:
23 from time import sleep
23 from time import sleep
24
24
25 from schainpy.model.proc.jroproc_base import ProcessingUnit, Operation
25 from schainpy.model.proc.jroproc_base import ProcessingUnit, Operation
26
26
27 class Remote(threading.Thread):
27 class Remote(threading.Thread):
28 """
28 """
29 Remote is a parent class used to define the behaviour of FTP and SSH class. These clases are
29 Remote is a parent class used to define the behaviour of FTP and SSH class. These clases are
30 used to upload or download files remotely.
30 used to upload or download files remotely.
31
31
32 Non-standard Python modules used:
32 Non-standard Python modules used:
33 None
33 None
34
34
35 Written by:
35 Written by:
36
36
37 "Miguel Urco":mailto:miguel.urco@jro.igp.gob.pe Jun. 03, 2015
37 "Miguel Urco":mailto:miguel.urco@jro.igp.gob.pe Jun. 03, 2015
38
38
39 """
39 """
40
40
41 server = None
41 server = None
42 username = None
42 username = None
43 password = None
43 password = None
44 remotefolder = None
44 remotefolder = None
45
45
46 period = 60
46 period = 60
47 fileList = []
47 fileList = []
48 bussy = False
48 bussy = False
49
49
50 def __init__(self, server, username, password, remotefolder, period=60):
50 def __init__(self, server, username, password, remotefolder, period=60):
51
51
52 threading.Thread.__init__(self)
52 threading.Thread.__init__(self)
53 self._stop = threading.Event()
53 self._stop = threading.Event()
54
54
55 self.status = 0
55 self.status = 0
56
56
57 self.period = period
57 self.period = period
58 self.fileList = []
58 self.fileList = []
59 self.bussy = False
59 self.bussy = False
60
60
61 self.stopFlag = False
61 self.stopFlag = False
62
62
63 print "[Remote Server] Opening server: %s" %server
63 print "[Remote Server] Opening server: %s" %server
64 if self.open(server, username, password, remotefolder):
64 if self.open(server, username, password, remotefolder):
65 print "[Remote Server] %s server was opened successfully" %server
65 print "[Remote Server] %s server was opened successfully" %server
66
66
67 def stop(self):
67 def stop(self):
68
68
69 self.stopFlag = True
69 self.stopFlag = True
70
70
71 def open(self):
71 def open(self):
72 """
72 """
73 Connect to server and create a connection class (FTP or SSH) to remote server.
73 Connect to server and create a connection class (FTP or SSH) to remote server.
74 """
74 """
75 raise NotImplementedError, "Implement this method in child class"
75 raise NotImplementedError, "Implement this method in child class"
76
76
77 def close(self):
77 def close(self):
78 """
78 """
79 Close connection to server
79 Close connection to server
80 """
80 """
81 raise NotImplementedError, "Implement this method in child class"
81 raise NotImplementedError, "Implement this method in child class"
82
82
83 def mkdir(self, remotefolder):
83 def mkdir(self, remotefolder):
84 """
84 """
85 Create a folder remotely
85 Create a folder remotely
86 """
86 """
87 raise NotImplementedError, "Implement this method in child class"
87 raise NotImplementedError, "Implement this method in child class"
88
88
89 def cd(self, remotefolder):
89 def cd(self, remotefolder):
90 """
90 """
91 Change working directory in remote server
91 Change working directory in remote server
92 """
92 """
93 raise NotImplementedError, "Implement this method in child class"
93 raise NotImplementedError, "Implement this method in child class"
94
94
95 def download(self, filename, localfolder=None):
95 def download(self, filename, localfolder=None):
96 """
96 """
97 Download a file from server to local host
97 Download a file from server to local host
98 """
98 """
99 raise NotImplementedError, "Implement this method in child class"
99 raise NotImplementedError, "Implement this method in child class"
100
100
101 def sendFile(self, fullfilename):
101 def sendFile(self, fullfilename):
102 """
102 """
103 sendFile method is used to upload a local file to the current directory in remote server
103 sendFile method is used to upload a local file to the current directory in remote server
104
104
105 Inputs:
105 Inputs:
106 fullfilename - full path name of local file to store in remote directory
106 fullfilename - full path name of local file to store in remote directory
107
107
108 Returns:
108 Returns:
109 0 in error case else 1
109 0 in error case else 1
110 """
110 """
111 raise NotImplementedError, "Implement this method in child class"
111 raise NotImplementedError, "Implement this method in child class"
112
112
113 def upload(self, fullfilename, remotefolder=None):
113 def upload(self, fullfilename, remotefolder=None):
114 """
114 """
115 upload method is used to upload a local file to remote directory. This method changes
115 upload method is used to upload a local file to remote directory. This method changes
116 working directory before sending a file.
116 working directory before sending a file.
117
117
118 Inputs:
118 Inputs:
119 fullfilename - full path name of local file to store in remote directory
119 fullfilename - full path name of local file to store in remote directory
120
120
121 remotefolder - remote directory
121 remotefolder - remote directory
122
122
123 Returns:
123 Returns:
124 0 in error case else 1
124 0 in error case else 1
125 """
125 """
126 print "[Remote Server] Uploading %s to %s:%s" %(fullfilename, self.server, self.remotefolder)
126 print "[Remote Server] Uploading %s to %s:%s" %(fullfilename, self.server, self.remotefolder)
127
127
128 if not self.status:
128 if not self.status:
129 return 0
129 return 0
130
130
131 if remotefolder == None:
131 if remotefolder == None:
132 remotefolder = self.remotefolder
132 remotefolder = self.remotefolder
133
133
134 if not self.cd(remotefolder):
134 if not self.cd(remotefolder):
135 return 0
135 return 0
136
136
137 if not self.sendFile(fullfilename):
137 if not self.sendFile(fullfilename):
138 print "[Remote Server] Error uploading file %s" %fullfilename
138 print "[Remote Server] Error uploading file %s" %fullfilename
139 return 0
139 return 0
140
140
141 print "[Remote Server] upload finished successfully"
141 print "[Remote Server] upload finished successfully"
142
142
143 return 1
143 return 1
144
144
145 def delete(self, filename):
145 def delete(self, filename):
146 """
146 """
147 Remove a file from remote server
147 Remove a file from remote server
148 """
148 """
149 pass
149 pass
150
150
151 def updateFileList(self, fileList):
151 def updateFileList(self, fileList):
152 """
152 """
153 Remove a file from remote server
153 Remove a file from remote server
154 """
154 """
155
155
156 if fileList == self.fileList:
156 if fileList == self.fileList:
157 return 1
157 return 1
158
158
159 init = time.time()
159 init = time.time()
160
160
161 while(self.bussy):
161 while(self.bussy):
162 sleep(0.1)
162 sleep(0.1)
163 if time.time() - init > 2*self.period:
163 if time.time() - init > 2*self.period:
164 return 0
164 return 0
165
165
166 self.fileList = fileList
166 self.fileList = fileList
167
167
168 return 1
168 return 1
169
169
170 def run(self):
170 def run(self):
171
171
172 if not self.status:
172 if not self.status:
173 print "Finishing FTP service"
173 print "Finishing FTP service"
174 return
174 return
175
175
176 if not self.cd(self.remotefolder):
176 if not self.cd(self.remotefolder):
177 raise ValueError, "Could not access to the new remote directory: %s" %self.remotefolder
177 raise ValueError, "Could not access to the new remote directory: %s" %self.remotefolder
178
178
179 sts = True
179 sts = True
180
180
181 while True:
181 while True:
182
182
183 sleep(self.period)
183 sleep(self.period)
184
184
185 self.bussy = True
185 self.bussy = True
186
186
187 for thisFile in self.fileList:
187 for thisFile in self.fileList:
188 sts = self.upload(thisFile, self.remotefolder)
188 sts = self.upload(thisFile, self.remotefolder)
189 if not sts: break
189 if not sts: break
190
190
191 if not sts: break
191 if not sts: break
192
192
193 self.bussy = False
193 self.bussy = False
194
194
195 if self.stopFlag:
195 if self.stopFlag:
196 break
196 break
197
197
198 print "[Remote Server] Thread stopped successfully"
198 print "[Remote Server] Thread stopped successfully"
199
199
200 class FTPClient(Remote):
200 class FTPClient(Remote):
201
201
202 __ftpClientObj = None
202 __ftpClientObj = None
203
203
204 def __init__(self, server, username, password, remotefolder, period=60):
204 def __init__(self, server, username, password, remotefolder, period=60):
205 """
205 """
206 """
206 """
207 Remote.__init__(self, server, username, password, remotefolder, period)
207 Remote.__init__(self, server, username, password, remotefolder, period)
208
208
209 def open(self, server, username, password, remotefolder):
209 def open(self, server, username, password, remotefolder):
210
210
211 """
211 """
212 This method is used to set FTP parameters and establish a connection to remote server
212 This method is used to set FTP parameters and establish a connection to remote server
213
213
214 Inputs:
214 Inputs:
215 server - remote server IP Address
215 server - remote server IP Address
216
216
217 username - remote server Username
217 username - remote server Username
218
218
219 password - remote server password
219 password - remote server password
220
220
221 remotefolder - remote server current working directory
221 remotefolder - remote server current working directory
222
222
223 Return: void
223 Return: void
224
224
225 Affects:
225 Affects:
226 self.status - in case of error or fail connection this parameter is set to 0 else 1
226 self.status - in case of error or fail connection this parameter is set to 0 else 1
227
227
228 """
228 """
229
229
230 if server == None:
230 if server == None:
231 raise ValueError, "FTP server should be defined"
231 raise ValueError, "FTP server should be defined"
232
232
233 if username == None:
233 if username == None:
234 raise ValueError, "FTP username should be defined"
234 raise ValueError, "FTP username should be defined"
235
235
236 if password == None:
236 if password == None:
237 raise ValueError, "FTP password should be defined"
237 raise ValueError, "FTP password should be defined"
238
238
239 if remotefolder == None:
239 if remotefolder == None:
240 raise ValueError, "FTP remote folder should be defined"
240 raise ValueError, "FTP remote folder should be defined"
241
241
242 try:
242 try:
243 ftpClientObj = ftplib.FTP(server)
243 ftpClientObj = ftplib.FTP(server)
244 except ftplib.all_errors:
244 except ftplib.all_errors:
245 print "FTP server connection fail: %s" %server
245 print "FTP server connection fail: %s" %server
246 self.status = 0
246 self.status = 0
247 return 0
247 return 0
248
248
249 try:
249 try:
250 ftpClientObj.login(username, password)
250 ftpClientObj.login(username, password)
251 except ftplib.all_errors:
251 except ftplib.all_errors:
252 print "FTP username or password are incorrect"
252 print "FTP username or password are incorrect"
253 self.status = 0
253 self.status = 0
254 return 0
254 return 0
255
255
256 if remotefolder == None:
256 if remotefolder == None:
257 remotefolder = ftpClientObj.pwd()
257 remotefolder = ftpClientObj.pwd()
258 else:
258 else:
259 try:
259 try:
260 ftpClientObj.cwd(remotefolder)
260 ftpClientObj.cwd(remotefolder)
261 except ftplib.all_errors:
261 except ftplib.all_errors:
262 print "FTP remote folder is invalid: %s" %remotefolder
262 print "FTP remote folder is invalid: %s" %remotefolder
263 remotefolder = ftpClientObj.pwd()
263 remotefolder = ftpClientObj.pwd()
264
264
265 self.server = server
265 self.server = server
266 self.username = username
266 self.username = username
267 self.password = password
267 self.password = password
268 self.remotefolder = remotefolder
268 self.remotefolder = remotefolder
269 self.__ftpClientObj = ftpClientObj
269 self.__ftpClientObj = ftpClientObj
270 self.status = 1
270 self.status = 1
271
271
272 return 1
272 return 1
273
273
274 def close(self):
274 def close(self):
275 """
275 """
276 Close connection to remote server
276 Close connection to remote server
277 """
277 """
278 if not self.status:
278 if not self.status:
279 return 0
279 return 0
280
280
281 self.__ftpClientObj.close()
281 self.__ftpClientObj.close()
282
282
283 def mkdir(self, remotefolder):
283 def mkdir(self, remotefolder):
284 """
284 """
285 mkdir is used to make a new directory in remote server
285 mkdir is used to make a new directory in remote server
286
286
287 Input:
287 Input:
288 remotefolder - directory name
288 remotefolder - directory name
289
289
290 Return:
290 Return:
291 0 in error case else 1
291 0 in error case else 1
292 """
292 """
293 if not self.status:
293 if not self.status:
294 return 0
294 return 0
295
295
296 try:
296 try:
297 self.__ftpClientObj.mkd(dirname)
297 self.__ftpClientObj.mkd(dirname)
298 except ftplib.all_errors:
298 except ftplib.all_errors:
299 print "Error creating remote folder: %s" %remotefolder
299 print "Error creating remote folder: %s" %remotefolder
300 return 0
300 return 0
301
301
302 return 1
302 return 1
303
303
304 def cd(self, remotefolder):
304 def cd(self, remotefolder):
305 """
305 """
306 cd is used to change remote working directory on server
306 cd is used to change remote working directory on server
307
307
308 Input:
308 Input:
309 remotefolder - current working directory
309 remotefolder - current working directory
310
310
311 Affects:
311 Affects:
312 self.remotefolder
312 self.remotefolder
313
313
314 Return:
314 Return:
315 0 in case of error else 1
315 0 in case of error else 1
316 """
316 """
317 if not self.status:
317 if not self.status:
318 return 0
318 return 0
319
319
320 if remotefolder == self.remotefolder:
320 if remotefolder == self.remotefolder:
321 return 1
321 return 1
322
322
323 try:
323 try:
324 self.__ftpClientObj.cwd(remotefolder)
324 self.__ftpClientObj.cwd(remotefolder)
325 except ftplib.all_errors:
325 except ftplib.all_errors:
326 print 'Error changing to %s' %remotefolder
326 print 'Error changing to %s' %remotefolder
327 print 'Trying to create remote folder'
327 print 'Trying to create remote folder'
328
328
329 if not self.mkdir(remotefolder):
329 if not self.mkdir(remotefolder):
330 print 'Remote folder could not be created'
330 print 'Remote folder could not be created'
331 return 0
331 return 0
332
332
333 try:
333 try:
334 self.__ftpClientObj.cwd(remotefolder)
334 self.__ftpClientObj.cwd(remotefolder)
335 except ftplib.all_errors:
335 except ftplib.all_errors:
336 return 0
336 return 0
337
337
338 self.remotefolder = remotefolder
338 self.remotefolder = remotefolder
339
339
340 return 1
340 return 1
341
341
342 def sendFile(self, fullfilename):
342 def sendFile(self, fullfilename):
343
343
344 if not self.status:
344 if not self.status:
345 return 0
345 return 0
346
346
347 file = open(fullfilename, 'rb')
347 file = open(fullfilename, 'rb')
348
348
349 filename = os.path.split(fullfilename)[-1]
349 filename = os.path.split(fullfilename)[-1]
350
350
351 command = "STOR %s" %filename
351 command = "STOR %s" %filename
352
352
353 try:
353 try:
354 self.__ftpClientObj.storbinary(command, file)
354 self.__ftpClientObj.storbinary(command, file)
355 except ftplib.all_errors:
355 except ftplib.all_errors:
356 return 0
356 return 0
357
357
358 try:
358 try:
359 self.__ftpClientObj.sendcmd('SITE CHMOD 755 ' + filename)
359 self.__ftpClientObj.sendcmd('SITE CHMOD 755 ' + filename)
360 except ftplib.all_errors, e:
360 except ftplib.all_errors, e:
361 print e
361 print e
362
362
363 file.close()
363 file.close()
364
364
365 return 1
365 return 1
366
366
367 class SSHClient(Remote):
367 class SSHClient(Remote):
368
368
369 __sshClientObj = None
369 __sshClientObj = None
370 __scpClientObj = None
370 __scpClientObj = None
371
371
372 def __init__(self, server, username, password, remotefolder, period=60):
372 def __init__(self, server, username, password, remotefolder, period=60):
373 """
373 """
374 """
374 """
375 Remote.__init__(self, server, username, password, remotefolder, period)
375 Remote.__init__(self, server, username, password, remotefolder, period)
376
376
377 def open(self, server, username, password, remotefolder, port=22):
377 def open(self, server, username, password, remotefolder, port=22):
378
378
379 """
379 """
380 This method is used to set SSH parameters and establish a connection to a remote server
380 This method is used to set SSH parameters and establish a connection to a remote server
381
381
382 Inputs:
382 Inputs:
383 server - remote server IP Address
383 server - remote server IP Address
384
384
385 username - remote server Username
385 username - remote server Username
386
386
387 password - remote server password
387 password - remote server password
388
388
389 remotefolder - remote server current working directory
389 remotefolder - remote server current working directory
390
390
391 Return: void
391 Return: void
392
392
393 Affects:
393 Affects:
394 self.status - in case of error or fail connection this parameter is set to 0 else 1
394 self.status - in case of error or fail connection this parameter is set to 0 else 1
395
395
396 """
396 """
397
397
398 if server == None:
398 if server == None:
399 raise ValueError, "SSH server should be defined"
399 raise ValueError, "SSH server should be defined"
400
400
401 if username == None:
401 if username == None:
402 raise ValueError, "SSH username should be defined"
402 raise ValueError, "SSH username should be defined"
403
403
404 if password == None:
404 if password == None:
405 raise ValueError, "SSH password should be defined"
405 raise ValueError, "SSH password should be defined"
406
406
407 if remotefolder == None:
407 if remotefolder == None:
408 raise ValueError, "SSH remote folder should be defined"
408 raise ValueError, "SSH remote folder should be defined"
409
409
410 try:
410 try:
411 sshClientObj = paramiko.SSHClient()
411 sshClientObj = paramiko.SSHClient()
412 except:
412 except:
413 print "SSH server connection fail: %s" %server
413 print "SSH server connection fail: %s" %server
414 self.status = 0
414 self.status = 0
415 return 0
415 return 0
416
416
417 sshClientObj.load_system_host_keys()
417 sshClientObj.load_system_host_keys()
418 sshClientObj.set_missing_host_key_policy(paramiko.WarningPolicy())
418 sshClientObj.set_missing_host_key_policy(paramiko.WarningPolicy())
419
419
420 try:
420 try:
421 sshClientObj.connect(server, username=username, password=password, port=port)
421 sshClientObj.connect(server, username=username, password=password, port=port)
422 except :
422 except :
423 print "SSH username or password are incorrect: %s"
423 print "SSH username or password are incorrect: %s"
424 self.status = 0
424 self.status = 0
425 return 0
425 return 0
426
426
427 scpClientObj = scp.SCPClient(sshClientObj.get_transport(), socket_timeout=30)
427 scpClientObj = scp.SCPClient(sshClientObj.get_transport(), socket_timeout=30)
428
428
429 if remotefolder == None:
429 if remotefolder == None:
430 remotefolder = self.pwd()
430 remotefolder = self.pwd()
431
431
432 self.server = server
432 self.server = server
433 self.username = username
433 self.username = username
434 self.password = password
434 self.password = password
435 self.__sshClientObj = sshClientObj
435 self.__sshClientObj = sshClientObj
436 self.__scpClientObj = scpClientObj
436 self.__scpClientObj = scpClientObj
437 self.status = 1
437 self.status = 1
438
438
439 if not self.cd(remotefolder):
439 if not self.cd(remotefolder):
440 raise ValueError, "Could not access to remote folder: %s" %remotefolder
440 raise ValueError, "Could not access to remote folder: %s" %remotefolder
441 return 0
441 return 0
442
442
443 self.remotefolder = remotefolder
443 self.remotefolder = remotefolder
444
444
445 return 1
445 return 1
446
446
447 def close(self):
447 def close(self):
448 """
448 """
449 Close connection to remote server
449 Close connection to remote server
450 """
450 """
451 if not self.status:
451 if not self.status:
452 return 0
452 return 0
453
453
454 self.__sshObj.close()
454 self.__sshObj.close()
455
455
456 def __execute(self, command):
456 def __execute(self, command):
457 """
457 """
458 __execute a command on remote server
458 __execute a command on remote server
459
459
460 Input:
460 Input:
461 command - Exmaple 'ls -l'
461 command - Exmaple 'ls -l'
462
462
463 Return:
463 Return:
464 0 in error case else 1
464 0 in error case else 1
465 """
465 """
466 if not self.status:
466 if not self.status:
467 return 0
467 return 0
468
468
469 stdin, stdout, stderr = self.__sshClientObj.exec_command(command)
469 stdin, stdout, stderr = self.__sshClientObj.exec_command(command)
470
470
471 result = stderr.readlines()
471 result = stderr.readlines()
472 if len(result) > 1:
472 if len(result) > 1:
473 return 0
473 return 0
474
474
475 result = stdout.readlines()
475 result = stdout.readlines()
476 if len(result) > 1:
476 if len(result) > 1:
477 return result[0][:-1]
477 return result[0][:-1]
478
478
479 return 1
479 return 1
480
480
481 def mkdir(self, remotefolder):
481 def mkdir(self, remotefolder):
482 """
482 """
483 mkdir is used to make a new directory in remote server
483 mkdir is used to make a new directory in remote server
484
484
485 Input:
485 Input:
486 remotefolder - directory name
486 remotefolder - directory name
487
487
488 Return:
488 Return:
489 0 in error case else 1
489 0 in error case else 1
490 """
490 """
491
491
492 command = 'mkdir %s' %remotefolder
492 command = 'mkdir %s' %remotefolder
493
493
494 return self.__execute(command)
494 return self.__execute(command)
495
495
496 def pwd(self):
496 def pwd(self):
497
497
498 command = 'pwd'
498 command = 'pwd'
499
499
500 return self.__execute(command)
500 return self.__execute(command)
501
501
502 def cd(self, remotefolder):
502 def cd(self, remotefolder):
503 """
503 """
504 cd is used to change remote working directory on server
504 cd is used to change remote working directory on server
505
505
506 Input:
506 Input:
507 remotefolder - current working directory
507 remotefolder - current working directory
508
508
509 Affects:
509 Affects:
510 self.remotefolder
510 self.remotefolder
511
511
512 Return:
512 Return:
513 0 in case of error else 1
513 0 in case of error else 1
514 """
514 """
515 if not self.status:
515 if not self.status:
516 return 0
516 return 0
517
517
518 if remotefolder == self.remotefolder:
518 if remotefolder == self.remotefolder:
519 return 1
519 return 1
520
520
521 chk_command = "cd %s; pwd" %remotefolder
521 chk_command = "cd %s; pwd" %remotefolder
522 mkdir_command = "mkdir %s" %remotefolder
522 mkdir_command = "mkdir %s" %remotefolder
523
523
524 if not self.__execute(chk_command):
524 if not self.__execute(chk_command):
525 if not self.__execute(mkdir_command):
525 if not self.__execute(mkdir_command):
526 self.remotefolder = None
526 self.remotefolder = None
527 return 0
527 return 0
528
528
529 self.remotefolder = remotefolder
529 self.remotefolder = remotefolder
530
530
531 return 1
531 return 1
532
532
533 def sendFile(self, fullfilename):
533 def sendFile(self, fullfilename):
534
534
535 if not self.status:
535 if not self.status:
536 return 0
536 return 0
537
537
538 try:
538 try:
539 self.__scpClientObj.put(fullfilename, remote_path=self.remotefolder)
539 self.__scpClientObj.put(fullfilename, remote_path=self.remotefolder)
540 except:
540 except:
541 return 0
541 return 0
542
542
543 remotefile = os.path.join(self.remotefolder, os.path.split(fullfilename)[-1])
543 remotefile = os.path.join(self.remotefolder, os.path.split(fullfilename)[-1])
544 command = 'chmod 775 %s' %remotefile
544 command = 'chmod 775 %s' %remotefile
545
545
546 return self.__execute(command)
546 return self.__execute(command)
547
547
548 class SendToServer(ProcessingUnit):
548 class SendToServer(ProcessingUnit):
549
549
550 def __init__(self):
550 def __init__(self):
551
551
552 ProcessingUnit.__init__(self)
552 ProcessingUnit.__init__(self)
553
553
554 self.isConfig = False
554 self.isConfig = False
555 self.clientObj = None
555 self.clientObj = None
556
556
557 def setup(self, server, username, password, remotefolder, localfolder, ext='.png', period=60, protocol='ftp'):
557 def setup(self, server, username, password, remotefolder, localfolder, ext='.png', period=60, protocol='ftp', **kwargs):
558
558
559 self.clientObj = None
559 self.clientObj = None
560 self.localfolder = localfolder
560 self.localfolder = localfolder
561 self.ext = ext
561 self.ext = ext
562 self.period = period
562 self.period = period
563
563
564 if str.lower(protocol) == 'ftp':
564 if str.lower(protocol) == 'ftp':
565 self.clientObj = FTPClient(server, username, password, remotefolder, period)
565 self.clientObj = FTPClient(server, username, password, remotefolder, period)
566
566
567 if str.lower(protocol) == 'ssh':
567 if str.lower(protocol) == 'ssh':
568 self.clientObj = SSHClient(server, username, password, remotefolder, period)
568 self.clientObj = SSHClient(server, username, password, remotefolder, period)
569
569
570 if not self.clientObj:
570 if not self.clientObj:
571 raise ValueError, "%s has been chosen as remote access protocol but it is not valid" %protocol
571 raise ValueError, "%s has been chosen as remote access protocol but it is not valid" %protocol
572
572
573 self.clientObj.start()
573 self.clientObj.start()
574
574
575 def findFiles(self):
575 def findFiles(self):
576
576
577 filenameList = glob.glob1(self.localfolder, '*%s' %self.ext)
577 filenameList = glob.glob1(self.localfolder, '*%s' %self.ext)
578
578
579 if len(filenameList) < 1:
579 if len(filenameList) < 1:
580 return []
580 return []
581
581
582 fullfilenameList = [os.path.join(self.localfolder, thisFile) for thisFile in filenameList]
582 fullfilenameList = [os.path.join(self.localfolder, thisFile) for thisFile in filenameList]
583
583
584 return fullfilenameList
584 return fullfilenameList
585
585
586 def run(self, **kwargs):
586 def run(self, **kwargs):
587
587
588 if not self.isConfig:
588 if not self.isConfig:
589 self.init = time.time()
589 self.init = time.time()
590 self.setup(**kwargs)
590 self.setup(**kwargs)
591 self.isConfig = True
591 self.isConfig = True
592
592
593 if time.time() - self.init >= self.period:
593 if time.time() - self.init >= self.period:
594 fullfilenameList = self.findFiles()
594 fullfilenameList = self.findFiles()
595 self.clientObj.updateFileList(fullfilenameList)
595 self.clientObj.updateFileList(fullfilenameList)
596 self.init = time.time()
596 self.init = time.time()
597
597
598 def close(self):
598 def close(self):
599 print "[Remote Server] Stopping thread"
599 print "[Remote Server] Stopping thread"
600 self.clientObj.stop()
600 self.clientObj.stop()
601
601
602
602
603 class FTP(object):
603 class FTP(object):
604 """
604 """
605 Ftp is a public class used to define custom File Transfer Protocol from "ftplib" python module
605 Ftp is a public class used to define custom File Transfer Protocol from "ftplib" python module
606
606
607 Non-standard Python modules used: None
607 Non-standard Python modules used: None
608
608
609 Written by "Daniel Suarez":mailto:daniel.suarez@jro.igp.gob.pe Oct. 26, 2010
609 Written by "Daniel Suarez":mailto:daniel.suarez@jro.igp.gob.pe Oct. 26, 2010
610 """
610 """
611
611
612 def __init__(self,server = None, username=None, password=None, remotefolder=None):
612 def __init__(self,server = None, username=None, password=None, remotefolder=None):
613 """
613 """
614 This method is used to setting parameters for FTP and establishing connection to remote server
614 This method is used to setting parameters for FTP and establishing connection to remote server
615
615
616 Inputs:
616 Inputs:
617 server - remote server IP Address
617 server - remote server IP Address
618
618
619 username - remote server Username
619 username - remote server Username
620
620
621 password - remote server password
621 password - remote server password
622
622
623 remotefolder - remote server current working directory
623 remotefolder - remote server current working directory
624
624
625 Return: void
625 Return: void
626
626
627 Affects:
627 Affects:
628 self.status - in Error Case or Connection Failed this parameter is set to 1 else 0
628 self.status - in Error Case or Connection Failed this parameter is set to 1 else 0
629
629
630 self.folderList - sub-folder list of remote folder
630 self.folderList - sub-folder list of remote folder
631
631
632 self.fileList - file list of remote folder
632 self.fileList - file list of remote folder
633
633
634
634
635 """
635 """
636
636
637 if ((server == None) and (username==None) and (password==None) and (remotefolder==None)):
637 if ((server == None) and (username==None) and (password==None) and (remotefolder==None)):
638 server, username, password, remotefolder = self.parmsByDefault()
638 server, username, password, remotefolder = self.parmsByDefault()
639
639
640 self.server = server
640 self.server = server
641 self.username = username
641 self.username = username
642 self.password = password
642 self.password = password
643 self.remotefolder = remotefolder
643 self.remotefolder = remotefolder
644 self.file = None
644 self.file = None
645 self.ftp = None
645 self.ftp = None
646 self.status = 0
646 self.status = 0
647
647
648 try:
648 try:
649 self.ftp = ftplib.FTP(self.server)
649 self.ftp = ftplib.FTP(self.server)
650 self.ftp.login(self.username,self.password)
650 self.ftp.login(self.username,self.password)
651 self.ftp.cwd(self.remotefolder)
651 self.ftp.cwd(self.remotefolder)
652 # print 'Connect to FTP Server: Successfully'
652 # print 'Connect to FTP Server: Successfully'
653
653
654 except ftplib.all_errors:
654 except ftplib.all_errors:
655 print 'Error FTP Service'
655 print 'Error FTP Service'
656 self.status = 1
656 self.status = 1
657 return
657 return
658
658
659
659
660
660
661 self.dirList = []
661 self.dirList = []
662
662
663 try:
663 try:
664 self.dirList = self.ftp.nlst()
664 self.dirList = self.ftp.nlst()
665
665
666 except ftplib.error_perm, resp:
666 except ftplib.error_perm, resp:
667 if str(resp) == "550 No files found":
667 if str(resp) == "550 No files found":
668 print "no files in this directory"
668 print "no files in this directory"
669 self.status = 1
669 self.status = 1
670 return
670 return
671
671
672 except ftplib.all_errors:
672 except ftplib.all_errors:
673 print 'Error Displaying Dir-Files'
673 print 'Error Displaying Dir-Files'
674 self.status = 1
674 self.status = 1
675 return
675 return
676
676
677 self.fileList = []
677 self.fileList = []
678 self.folderList = []
678 self.folderList = []
679 #only for test
679 #only for test
680 for f in self.dirList:
680 for f in self.dirList:
681 name, ext = os.path.splitext(f)
681 name, ext = os.path.splitext(f)
682 if ext != '':
682 if ext != '':
683 self.fileList.append(f)
683 self.fileList.append(f)
684 # print 'filename: %s - size: %d'%(f,self.ftp.size(f))
684 # print 'filename: %s - size: %d'%(f,self.ftp.size(f))
685
685
686 def parmsByDefault(self):
686 def parmsByDefault(self):
687 server = 'jro-app.igp.gob.pe'
687 server = 'jro-app.igp.gob.pe'
688 username = 'wmaster'
688 username = 'wmaster'
689 password = 'mst2010vhf'
689 password = 'mst2010vhf'
690 remotefolder = '/home/wmaster/graficos'
690 remotefolder = '/home/wmaster/graficos'
691
691
692 return server, username, password, remotefolder
692 return server, username, password, remotefolder
693
693
694
694
695 def mkd(self,dirname):
695 def mkd(self,dirname):
696 """
696 """
697 mkd is used to make directory in remote server
697 mkd is used to make directory in remote server
698
698
699 Input:
699 Input:
700 dirname - directory name
700 dirname - directory name
701
701
702 Return:
702 Return:
703 1 in error case else 0
703 1 in error case else 0
704 """
704 """
705 try:
705 try:
706 self.ftp.mkd(dirname)
706 self.ftp.mkd(dirname)
707 except:
707 except:
708 print 'Error creating remote folder:%s'%dirname
708 print 'Error creating remote folder:%s'%dirname
709 return 1
709 return 1
710
710
711 return 0
711 return 0
712
712
713
713
714 def delete(self,filename):
714 def delete(self,filename):
715 """
715 """
716 delete is used to delete file in current working directory of remote server
716 delete is used to delete file in current working directory of remote server
717
717
718 Input:
718 Input:
719 filename - filename to delete in remote folder
719 filename - filename to delete in remote folder
720
720
721 Return:
721 Return:
722 1 in error case else 0
722 1 in error case else 0
723 """
723 """
724
724
725 try:
725 try:
726 self.ftp.delete(filename)
726 self.ftp.delete(filename)
727 except:
727 except:
728 print 'Error deleting remote file:%s'%filename
728 print 'Error deleting remote file:%s'%filename
729 return 1
729 return 1
730
730
731 return 0
731 return 0
732
732
733 def download(self,filename,localfolder):
733 def download(self,filename,localfolder):
734 """
734 """
735 download is used to downloading file from remote folder into local folder
735 download is used to downloading file from remote folder into local folder
736
736
737 Inputs:
737 Inputs:
738 filename - filename to donwload
738 filename - filename to donwload
739
739
740 localfolder - directory local to store filename
740 localfolder - directory local to store filename
741
741
742 Returns:
742 Returns:
743 self.status - 1 in error case else 0
743 self.status - 1 in error case else 0
744 """
744 """
745
745
746 self.status = 0
746 self.status = 0
747
747
748
748
749 if not(filename in self.fileList):
749 if not(filename in self.fileList):
750 print 'filename:%s not exists'%filename
750 print 'filename:%s not exists'%filename
751 self.status = 1
751 self.status = 1
752 return self.status
752 return self.status
753
753
754 newfilename = os.path.join(localfolder,filename)
754 newfilename = os.path.join(localfolder,filename)
755
755
756 self.file = open(newfilename, 'wb')
756 self.file = open(newfilename, 'wb')
757
757
758 try:
758 try:
759 print 'Download: ' + filename
759 print 'Download: ' + filename
760 self.ftp.retrbinary('RETR ' + filename, self.__handleDownload)
760 self.ftp.retrbinary('RETR ' + filename, self.__handleDownload)
761 print 'Download Complete'
761 print 'Download Complete'
762 except ftplib.all_errors:
762 except ftplib.all_errors:
763 print 'Error Downloading ' + filename
763 print 'Error Downloading ' + filename
764 self.status = 1
764 self.status = 1
765 return self.status
765 return self.status
766
766
767 self.file.close()
767 self.file.close()
768
768
769 return self.status
769 return self.status
770
770
771
771
772 def __handleDownload(self,block):
772 def __handleDownload(self,block):
773 """
773 """
774 __handleDownload is used to handle writing file
774 __handleDownload is used to handle writing file
775 """
775 """
776 self.file.write(block)
776 self.file.write(block)
777
777
778
778
779 def upload(self,filename,remotefolder=None):
779 def upload(self,filename,remotefolder=None):
780 """
780 """
781 upload is used to uploading local file to remote directory
781 upload is used to uploading local file to remote directory
782
782
783 Inputs:
783 Inputs:
784 filename - full path name of local file to store in remote directory
784 filename - full path name of local file to store in remote directory
785
785
786 remotefolder - remote directory
786 remotefolder - remote directory
787
787
788 Returns:
788 Returns:
789 self.status - 1 in error case else 0
789 self.status - 1 in error case else 0
790 """
790 """
791
791
792 if remotefolder == None:
792 if remotefolder == None:
793 remotefolder = self.remotefolder
793 remotefolder = self.remotefolder
794
794
795 self.status = 0
795 self.status = 0
796
796
797 try:
797 try:
798 self.ftp.cwd(remotefolder)
798 self.ftp.cwd(remotefolder)
799
799
800 self.file = open(filename, 'rb')
800 self.file = open(filename, 'rb')
801
801
802 (head, tail) = os.path.split(filename)
802 (head, tail) = os.path.split(filename)
803
803
804 command = "STOR " + tail
804 command = "STOR " + tail
805
805
806 print 'Uploading: ' + tail
806 print 'Uploading: ' + tail
807 self.ftp.storbinary(command, self.file)
807 self.ftp.storbinary(command, self.file)
808 print 'Upload Completed'
808 print 'Upload Completed'
809
809
810 except ftplib.all_errors:
810 except ftplib.all_errors:
811 print 'Error Uploading ' + tail
811 print 'Error Uploading ' + tail
812 self.status = 1
812 self.status = 1
813 return self.status
813 return self.status
814
814
815 self.file.close()
815 self.file.close()
816
816
817 #back to initial directory in __init__()
817 #back to initial directory in __init__()
818 self.ftp.cwd(self.remotefolder)
818 self.ftp.cwd(self.remotefolder)
819
819
820 return self.status
820 return self.status
821
821
822
822
823 def dir(self,remotefolder):
823 def dir(self,remotefolder):
824 """
824 """
825 dir is used to change working directory of remote server and get folder and file list
825 dir is used to change working directory of remote server and get folder and file list
826
826
827 Input:
827 Input:
828 remotefolder - current working directory
828 remotefolder - current working directory
829
829
830 Affects:
830 Affects:
831 self.fileList - file list of working directory
831 self.fileList - file list of working directory
832
832
833 Return:
833 Return:
834 infoList - list with filenames and size of file in bytes
834 infoList - list with filenames and size of file in bytes
835
835
836 self.folderList - folder list
836 self.folderList - folder list
837 """
837 """
838
838
839 self.remotefolder = remotefolder
839 self.remotefolder = remotefolder
840 print 'Change to ' + self.remotefolder
840 print 'Change to ' + self.remotefolder
841 try:
841 try:
842 self.ftp.cwd(remotefolder)
842 self.ftp.cwd(remotefolder)
843 except ftplib.all_errors:
843 except ftplib.all_errors:
844 print 'Error Change to ' + self.remotefolder
844 print 'Error Change to ' + self.remotefolder
845 infoList = None
845 infoList = None
846 self.folderList = None
846 self.folderList = None
847 return infoList,self.folderList
847 return infoList,self.folderList
848
848
849 self.dirList = []
849 self.dirList = []
850
850
851 try:
851 try:
852 self.dirList = self.ftp.nlst()
852 self.dirList = self.ftp.nlst()
853
853
854 except ftplib.error_perm, resp:
854 except ftplib.error_perm, resp:
855 if str(resp) == "550 No files found":
855 if str(resp) == "550 No files found":
856 print "no files in this directory"
856 print "no files in this directory"
857 infoList = None
857 infoList = None
858 self.folderList = None
858 self.folderList = None
859 return infoList,self.folderList
859 return infoList,self.folderList
860 except ftplib.all_errors:
860 except ftplib.all_errors:
861 print 'Error Displaying Dir-Files'
861 print 'Error Displaying Dir-Files'
862 infoList = None
862 infoList = None
863 self.folderList = None
863 self.folderList = None
864 return infoList,self.folderList
864 return infoList,self.folderList
865
865
866 infoList = []
866 infoList = []
867 self.fileList = []
867 self.fileList = []
868 self.folderList = []
868 self.folderList = []
869 for f in self.dirList:
869 for f in self.dirList:
870 name,ext = os.path.splitext(f)
870 name,ext = os.path.splitext(f)
871 if ext != '':
871 if ext != '':
872 self.fileList.append(f)
872 self.fileList.append(f)
873 value = (f,self.ftp.size(f))
873 value = (f,self.ftp.size(f))
874 infoList.append(value)
874 infoList.append(value)
875
875
876 if ext == '':
876 if ext == '':
877 self.folderList.append(f)
877 self.folderList.append(f)
878
878
879 return infoList,self.folderList
879 return infoList,self.folderList
880
880
881
881
882 def close(self):
882 def close(self):
883 """
883 """
884 close is used to close and end FTP connection
884 close is used to close and end FTP connection
885
885
886 Inputs: None
886 Inputs: None
887
887
888 Return: void
888 Return: void
889
889
890 """
890 """
891 self.ftp.close()
891 self.ftp.close()
892
892
893 class SendByFTP(Operation):
893 class SendByFTP(Operation):
894
894
895 def __init__(self):
895 def __init__(self):
896
896
897 self.status = 1
897 self.status = 1
898 self.counter = 0
898 self.counter = 0
899
899
900 def error_print(self, ValueError):
900 def error_print(self, ValueError):
901
901
902 print ValueError, 'Error FTP'
902 print ValueError, 'Error FTP'
903 print "don't worry the program is running..."
903 print "don't worry the program is running..."
904
904
905 def worker_ftp(self, server, username, password, remotefolder, filenameList):
905 def worker_ftp(self, server, username, password, remotefolder, filenameList):
906
906
907 self.ftpClientObj = FTP(server, username, password, remotefolder)
907 self.ftpClientObj = FTP(server, username, password, remotefolder)
908 for filename in filenameList:
908 for filename in filenameList:
909 self.ftpClientObj.upload(filename)
909 self.ftpClientObj.upload(filename)
910 self.ftpClientObj.close()
910 self.ftpClientObj.close()
911
911
912 def ftp_thread(self, server, username, password, remotefolder):
912 def ftp_thread(self, server, username, password, remotefolder):
913 if not(self.status):
913 if not(self.status):
914 return
914 return
915
915
916 p = multiprocessing.Process(target=self.worker_ftp, args=(server, username, password, remotefolder, self.filenameList,))
916 p = multiprocessing.Process(target=self.worker_ftp, args=(server, username, password, remotefolder, self.filenameList,))
917 p.start()
917 p.start()
918
918
919 p.join(3)
919 p.join(3)
920
920
921 if p.is_alive():
921 if p.is_alive():
922 p.terminate()
922 p.terminate()
923 p.join()
923 p.join()
924 print 'killing ftp process...'
924 print 'killing ftp process...'
925 self.status = 0
925 self.status = 0
926 return
926 return
927
927
928 self.status = 1
928 self.status = 1
929 return
929 return
930
930
931 def filterByExt(self, ext, localfolder):
931 def filterByExt(self, ext, localfolder):
932 fnameList = glob.glob1(localfolder,ext)
932 fnameList = glob.glob1(localfolder,ext)
933 self.filenameList = [os.path.join(localfolder,x) for x in fnameList]
933 self.filenameList = [os.path.join(localfolder,x) for x in fnameList]
934
934
935 if len(self.filenameList) == 0:
935 if len(self.filenameList) == 0:
936 self.status = 0
936 self.status = 0
937
937
938 def run(self, dataOut, ext, localfolder, remotefolder, server, username, password, period=1):
938 def run(self, dataOut, ext, localfolder, remotefolder, server, username, password, period=1):
939
939
940 self.counter += 1
940 self.counter += 1
941 if self.counter >= period:
941 if self.counter >= period:
942 self.filterByExt(ext, localfolder)
942 self.filterByExt(ext, localfolder)
943
943
944 self.ftp_thread(server, username, password, remotefolder)
944 self.ftp_thread(server, username, password, remotefolder)
945
945
946 self.counter = 0
946 self.counter = 0
947
947
948 self.status = 1
948 self.status = 1
949
949
General Comments 0
You need to be logged in to leave comments. Login now