##// END OF EJS Templates
Bug fixed: translating float values to integer
Miguel Valdez -
r677:5a045da2ac8c
parent child
Show More

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

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