##// END OF EJS Templates
Update version, fix kwargs for self operations (methods), Add SendToWeb...
Juan C. Espinoza -
r906:a52f011a763e
parent child
Show More
@@ -96,3 +96,7 ENV/
96 96
97 97 # mkdocs documentation
98 98 /site
99
100 # eclipse
101 .project
102 .pydevproject
@@ -4,4 +4,4 Created on Feb 7, 2012
4 4 @author $Author$
5 5 @version $Id$
6 6 '''
7 __version__ = "2.2.5" No newline at end of file
7 __version__ = "2.3" No newline at end of file
@@ -438,7 +438,8 class OperationConf():
438 438
439 439 def createObject(self, plotter_queue=None):
440 440
441 if self.type == 'self':
441
442 if self.type == 'self':
442 443 raise ValueError, "This operation type cannot be created"
443 444
444 445 if self.type == 'plotter':
@@ -449,10 +450,10 class OperationConf():
449 450 opObj = Plotter(self.name, plotter_queue)
450 451
451 452 if self.type == 'external' or self.type == 'other':
452 print self.name
453
453 454 className = eval(self.name)
454 455 kwargs = self.getKwargs()
455 print kwargs
456
456 457 opObj = className(**kwargs)
457 458
458 459 return opObj
@@ -671,14 +672,18 class ProcUnitConf():
671 672 kwargs = self.getKwargs()
672 673 procUnitObj = className(**kwargs)
673 674
674 for opConfObj in self.opConfObjList:
675
676 if opConfObj.type == 'self':
675 for opConfObj in self.opConfObjList:
676
677 if opConfObj.type=='self' and self.name=='run':
678 continue
679 elif opConfObj.type=='self':
680 procUnitObj.addOperationKwargs(opConfObj.id, **opConfObj.getKwargs())
677 681 continue
678 682
679 683 opObj = opConfObj.createObject(plotter_queue)
680 684
681 685 self.opObjDict[opConfObj.id] = opObj
686
682 687 procUnitObj.addOperation(opObj, opConfObj.id)
683 688
684 689 self.procUnitObj = procUnitObj
@@ -29,8 +29,9 class PlotData(Operation, Process):
29 29
30 30 def __init__(self, **kwargs):
31 31
32 Operation.__init__(self, **kwargs)
32 Operation.__init__(self, plot=True, **kwargs)
33 33 Process.__init__(self)
34 self.kwargs['code'] = self.CODE
34 35 self.mp = False
35 36 self.dataOut = None
36 37 self.isConfig = False
@@ -35,12 +35,20 class ProcessingUnit(object):
35 35 self.dataOut = None
36 36
37 37 self.operations2RunDict = {}
38 self.operationKwargs = {}
38 39
39 40 self.isConfig = False
40 41
41 42 self.args = args
42 43 self.kwargs = kwargs
43 44
45 def addOperationKwargs(self, objId, **kwargs):
46 '''
47 '''
48
49 self.operationKwargs[objId] = kwargs
50
51
44 52 def addOperation(self, opObj, objId):
45 53
46 54 """
@@ -80,7 +88,7 class ProcessingUnit(object):
80 88
81 89 raise NotImplementedError
82 90
83 def callMethod(self, name, **kwargs):
91 def callMethod(self, name, opId):
84 92
85 93 """
86 94 Ejecuta el metodo con el nombre "name" y con argumentos **kwargs de la propia clase.
@@ -100,7 +108,7 class ProcessingUnit(object):
100 108 return False
101 109 else:
102 110 #Si no es un metodo RUN la entrada es la misma dataOut (interna)
103 if self.dataOut.isEmpty():
111 if self.dataOut is not None and self.dataOut.isEmpty():
104 112 return False
105 113
106 114 #Getting the pointer to method
@@ -109,11 +117,17 class ProcessingUnit(object):
109 117 #Executing the self method
110 118
111 119 if hasattr(self, 'mp'):
112 if self.mp is False:
113 self.mp = True
114 self.start()
120 if name=='run':
121 if self.mp is False:
122 self.mp = True
123 self.start()
124 else:
125 methodToCall(**self.operationKwargs[opId])
115 126 else:
116 methodToCall(**kwargs)
127 if name=='run':
128 methodToCall(**self.kwargs)
129 else:
130 methodToCall(**self.operationKwargs[opId])
117 131
118 132 if self.dataOut is None:
119 133 return False
@@ -146,10 +160,12 class ProcessingUnit(object):
146 160
147 161 if hasattr(externalProcObj, 'mp'):
148 162 if externalProcObj.mp is False:
163 self.operationKwargs[objId] = externalProcObj.kwargs
149 164 externalProcObj.mp = True
150 165 externalProcObj.start()
151 166 else:
152 167 externalProcObj.run(self.dataOut, **externalProcObj.kwargs)
168 self.operationKwargs[objId] = externalProcObj.kwargs
153 169
154 170 return True
155 171
@@ -198,7 +214,7 class ProcessingUnit(object):
198 214 if not opName:
199 215 raise ValueError, "opName parameter should be defined"
200 216
201 sts = self.callMethod(opName, **self.kwargs)
217 sts = self.callMethod(opName, opId)
202 218
203 219 elif opType == 'other' or opType == 'external' or opType == 'plotter':
204 220
@@ -518,9 +518,6 class WindProfiler(Operation):
518 518
519 519 n = None
520 520
521 def __init__(self):
522 Operation.__init__(self)
523
524 521 def __calculateCosDir(self, elev, azim):
525 522 zen = (90 - elev)*numpy.pi/180
526 523 azim = azim*numpy.pi/180
@@ -1204,8 +1201,6 class WindProfiler(Operation):
1204 1201
1205 1202 class EWDriftsEstimation(Operation):
1206 1203
1207 def __init__(self):
1208 Operation.__init__(self)
1209 1204
1210 1205 def __correctValues(self, heiRang, phi, velRadial, SNR):
1211 1206 listPhi = phi.tolist()
@@ -262,15 +262,23 class ReceiverData(ProcessingUnit, Process):
262 262 Process.__init__(self)
263 263 self.mp = False
264 264 self.isConfig = False
265 self.isWebConfig = False
265 266 self.plottypes =[]
266 267 self.connections = 0
267 268 server = kwargs.get('server', 'zmq.pipe')
269 plot_server = kwargs.get('plot_server', 'zmq.web')
268 270 if 'tcp://' in server:
269 271 address = server
270 272 else:
271 273 address = 'ipc:///tmp/%s' % server
272 274
275 if 'tcp://' in plot_server:
276 plot_address = plot_server
277 else:
278 plot_address = 'ipc:///tmp/%s' % plot_server
279
273 280 self.address = address
281 self.plot_address = plot_address
274 282 self.plottypes = [s.strip() for s in kwargs.get('plottypes', 'rti').split(',')]
275 283 self.realtime = kwargs.get('realtime', False)
276 284 self.throttle_value = kwargs.get('throttle', 10)
@@ -358,10 +366,9 class ReceiverData(ProcessingUnit, Process):
358 366 self.receiver.bind(self.address)
359 367 monitor = self.receiver.get_monitor_socket()
360 368 self.sender = self.context.socket(zmq.PUB)
361 if self.realtime:
362 self.sender_web = self.context.socket(zmq.PUB)
363 # self.sender_web.setsockopt(zmq.PUBLISH, 'realtime')
364 self.sender_web.bind("ipc:///tmp/zmq.web")
369 if self.realtime:
370 self.sender_web = self.context.socket(zmq.PUB)
371 self.sender_web.bind(self.plot_address)
365 372 self.sender.bind("ipc:///tmp/zmq.plots")
366 373
367 374 t = Thread(target=self.event_monitor, args=(monitor,))
@@ -391,3 +398,23 class ReceiverData(ProcessingUnit, Process):
391 398 self.started = True
392 399
393 400 return
401
402 def sendToWeb(self):
403
404 if not self.isWebConfig:
405 context = zmq.Context()
406 sender_web_config = context.socket(zmq.PUB)
407 if 'tcp://' in self.plot_address:
408 print self.plot_address
409 dum, address, port = self.plot_address.split(':')
410 conf_address = '{}:{}:{}'.format(dum, address, int(port)+1)
411 else:
412 conf_address = self.plot_address + '.config'
413 sender_web_config.bind(conf_address)
414
415 for kwargs in self.operationKwargs.values():
416 if 'plot' in kwargs:
417 sender_web_config.send_string(json.dumps(kwargs))
418 print kwargs
419 self.isWebConfig = True
420
General Comments 0
You need to be logged in to leave comments. Login now