##// END OF EJS Templates
Update README
Update README

File last commit:

r1287:af11e4aac00c
r1289:303db73c0c9d
Show More
controller.py
648 lines | 18.2 KiB | text/x-python | PythonLexer
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 '''
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 Main routines to create a Signal Chain project
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 '''
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287
import re
Miguel Valdez
Version: 2.1.3.2...
r672 import sys
Julio Valdez
First Draft HDF5 IO module
r514 import ast
Miguel Valdez
GUI: minor changes
r687 import datetime
Miguel Valdez
Version: 2.1.3.2...
r672 import traceback
José Chávez
finishing day, need testing
r931 import time
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 from multiprocessing import Process, Queue
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177 from threading import Thread
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 from xml.etree.ElementTree import ElementTree, Element, SubElement
George Yong
Multiprocessing for Spectra (all operation) working
r1171
Now alarm is a process, add SchainWarning exception for handling non-stop exceptions
r1129 from schainpy.admin import Alarm, SchainWarning
George Yong
Multiprocessing for heispectra (Fits) all working
r1191 from schainpy.model import *
Juan C. Espinoza
Change multiSchain by MPProject
r1052 from schainpy.utils import log
George Yong
Multiprocessing for heispectra (Fits) all working
r1191
Juan C. Espinoza
Change multiSchain by MPProject
r1052
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 class ConfBase():
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 def __init__(self):
ReceiverData Operation, test PlotData
r889
Miguel Valdez
-USRP Reader was added to Signal Chain GUI...
r589 self.id = '0'
Miguel Valdez
Merge with branch schain_julia_drifts from rev. 803 to 995....
r568 self.name = None
self.priority = None
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.parameters = {}
self.object = None
self.operations = []
Miguel Valdez
Signal Chain GUI v2.1
r596
George Yong
Multiprocessing for Spectra (all operation) working
r1171 def getId(self):
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287
George Yong
Multiprocessing for Spectra (all operation) working
r1171 return self.id
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287
def getNewId(self):
return int(self.id) * 10 + len(self.operations) + 1
George Yong
Multiprocessing for Spectra (all operation) working
r1171
Miguel Valdez
Signal Chain GUI v2.1
r596 def updateId(self, new_id):
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Signal Chain GUI v2.1
r596 self.id = str(new_id)
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Signal Chain GUI v2.1
r596 n = 1
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 for conf in self.operations:
conf_id = str(int(new_id) * 10 + n)
conf.updateId(conf_id)
Miguel Valdez
Signal Chain GUI v2.1
r596 n += 1
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def getKwargs(self):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 params = {}
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 for key, value in self.parameters.items():
if value not in (None, '', ' '):
params[key] = value
return params
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def update(self, **kwargs):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 for key, value in kwargs.items():
self.addParameter(name=key, value=value)
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def addParameter(self, name, value, format=None):
'''
'''
José Chávez
formatting
r1082
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 if isinstance(value, str) and re.search(r'(\d+/\d+/\d+)', value):
self.parameters[name] = datetime.date(*[int(x) for x in value.split('/')])
elif isinstance(value, str) and re.search(r'(\d+:\d+:\d+)', value):
self.parameters[name] = datetime.time(*[int(x) for x in value.split(':')])
else:
try:
self.parameters[name] = ast.literal_eval(value)
except:
if isinstance(value, str) and ',' in value:
self.parameters[name] = value.split(',')
else:
self.parameters[name] = value
def getParameters(self):
params = {}
for key, value in self.parameters.items():
s = type(value).__name__
if s == 'date':
params[key] = value.strftime('%Y/%m/%d')
elif s == 'time':
params[key] = value.strftime('%H:%M:%S')
else:
params[key] = str(value)
José Chávez
formatting
r1082
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 return params
def makeXml(self, element):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 xml = SubElement(element, self.ELEMENTNAME)
for label in self.xml_labels:
xml.set(label, str(getattr(self, label)))
for key, value in self.getParameters().items():
xml_param = SubElement(xml, 'Parameter')
xml_param.set('name', key)
xml_param.set('value', value)
for conf in self.operations:
conf.makeXml(xml)
def __str__(self):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 if self.ELEMENTNAME == 'Operation':
s = ' {}[id={}]\n'.format(self.name, self.id)
else:
s = '{}[id={}, inputId={}]\n'.format(self.name, self.id, self.inputId)
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 for key, value in self.parameters.items():
if self.ELEMENTNAME == 'Operation':
s += ' {}: {}\n'.format(key, value)
else:
s += ' {}: {}\n'.format(key, value)
for conf in self.operations:
s += str(conf)
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 return s
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 class OperationConf(ConfBase):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 ELEMENTNAME = 'Operation'
xml_labels = ['id', 'name']
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def setup(self, id, name, priority, project_id, err_queue):
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Signal Chain GUI v2.1
r596 self.id = str(id)
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177 self.project_id = project_id
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 self.name = name
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.type = 'other'
Errors handling and gracefully terminate main process
r1241 self.err_queue = err_queue
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def readXml(self, element, project_id, err_queue):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.id = element.get('id')
self.name = element.get('name')
self.type = 'other'
self.project_id = str(project_id)
self.err_queue = err_queue
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 for elm in element.iter('Parameter'):
self.addParameter(elm.get('name'), elm.get('value'))
ReceiverData Operation, test PlotData
r889
George Yong
Multiprocessing for Spectra (all operation) working
r1171 def createObject(self):
ReceiverData Operation, test PlotData
r889
George Yong
Multiprocessing for Spectra (all operation) working
r1171 className = eval(self.name)
George Yong
Fix Read function for CLI 'schain xml'
r1184
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 if 'Plot' in self.name or 'Writer' in self.name:
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177 kwargs = self.getKwargs()
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 opObj = className(self.id, self.id, self.project_id, self.err_queue, **kwargs)
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177 opObj.start()
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.type = 'external'
else:
opObj = className()
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.object = opObj
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 return opObj
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 class ProcUnitConf(ConfBase):
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 ELEMENTNAME = 'ProcUnit'
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 xml_labels = ['id', 'inputId', 'name']
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def setup(self, project_id, id, name, datatype, inputId, err_queue):
George Yong
Multiprocessing for Spectra (all operation) working
r1171 '''
'''
José Chávez
formatting
r1082 if datatype == None and name == None:
George Yong
Python 2to3, Spectra (all operations) working
r1167 raise ValueError('datatype or name should be defined')
ReceiverData Operation, test PlotData
r889
José Chávez
formatting
r1082 if name == None:
Miguel Valdez
Signal Chain GUI v2.1
r596 if 'Proc' in datatype:
name = datatype
else:
José Chávez
formatting
r1082 name = '%sProc' % (datatype)
ReceiverData Operation, test PlotData
r889
José Chávez
formatting
r1082 if datatype == None:
datatype = name.replace('Proc', '')
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Signal Chain GUI v2.1
r596 self.id = str(id)
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177 self.project_id = project_id
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 self.name = name
Miguel Valdez
Primera version del controlador probada y testeada incluyendo graficos
r199 self.datatype = datatype
Errors handling and gracefully terminate main process
r1241 self.inputId = inputId
self.err_queue = err_queue
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.operations = []
self.parameters = {}
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def removeOperation(self, id):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 i = [1 if x.id==id else 0 for x in self.operations]
self.operations.pop(i.index(1))
def getOperation(self, id):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 for conf in self.operations:
if conf.id == id:
return conf
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177 def addOperation(self, name, optype='self'):
George Yong
Multiprocessing for Spectra (all operation) working
r1171 '''
'''
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 id = self.getNewId()
conf = OperationConf()
conf.setup(id, name=name, priority='0', project_id=self.project_id, err_queue=self.err_queue)
self.operations.append(conf)
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 return conf
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def readXml(self, element, project_id, err_queue):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.id = element.get('id')
self.name = element.get('name')
self.inputId = None if element.get('inputId') == 'None' else element.get('inputId')
self.datatype = element.get('datatype', self.name.replace(self.ELEMENTNAME.replace('Unit', ''), ''))
George Yong
Fix Read function for CLI 'schain xml'
r1184 self.project_id = str(project_id)
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.err_queue = err_queue
self.operations = []
self.parameters = {}
for elm in element:
if elm.tag == 'Parameter':
self.addParameter(elm.get('name'), elm.get('value'))
elif elm.tag == 'Operation':
conf = OperationConf()
conf.readXml(elm, project_id, err_queue)
self.operations.append(conf)
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177 def createObjects(self):
George Yong
Multiprocessing for Spectra (all operation) working
r1171 '''
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177 Instancia de unidades de procesamiento.
George Yong
Multiprocessing for Spectra (all operation) working
r1171 '''
George Yong
Multiprocessing for digitalRF just for reading Unit(Task #1461 )
r1192
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 className = eval(self.name)
ReceiverData Operation, test PlotData
r889 kwargs = self.getKwargs()
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 procUnitObj = className()
procUnitObj.name = self.name
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177 log.success('creating process...', self.name)
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 for conf in self.operations:
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 opObj = conf.createObject()
George Yong
Multiprocessing for Spectra (all operation) working
r1171
Errors handling and gracefully terminate main process
r1241 log.success('adding operation: {}, type:{}'.format(
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 conf.name,
conf.type), self.name)
George Yong
Multiprocessing for Spectra (all operation) working
r1171
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 procUnitObj.addOperation(conf, opObj)
George Yong
Multiprocessing for Spectra (all operation) working
r1171
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.object = procUnitObj
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def run(self):
'''
'''
return self.object.call(**self.getKwargs())
ReceiverData Operation, test PlotData
r889
José Chávez
formatting
r1082
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 class ReadUnitConf(ProcUnitConf):
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 ELEMENTNAME = 'ReadUnit'
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 def __init__(self):
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 self.id = None
Miguel Valdez
Primera version del controlador probada y testeada incluyendo graficos
r199 self.datatype = None
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 self.name = None
Miguel Valdez
-USRP Reader was added to Signal Chain GUI...
r589 self.inputId = None
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.operations = []
self.parameters = {}
George Yong
Multiprocessing for Spectra (all operation) working
r1171
Errors handling and gracefully terminate main process
r1241 def setup(self, project_id, id, name, datatype, err_queue, path='', startDate='', endDate='',
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177 startTime='', endTime='', server=None, **kwargs):
George Yong
Multiprocessing for Spectra (all operation) working
r1171
José Chávez
formatting
r1082 if datatype == None and name == None:
George Yong
Python 2to3, Spectra (all operations) working
r1167 raise ValueError('datatype or name should be defined')
Juan C. Espinoza
Fix name and datatype in ReadUnitConf
r1088 if name == None:
Miguel Valdez
Signal Chain GUI v2.1
r596 if 'Reader' in datatype:
name = datatype
Juan C. Espinoza
Fix name and datatype in ReadUnitConf
r1088 datatype = name.replace('Reader','')
Miguel Valdez
Signal Chain GUI v2.1
r596 else:
Juan C. Espinoza
Fix name and datatype in ReadUnitConf
r1088 name = '{}Reader'.format(datatype)
if datatype == None:
if 'Reader' in name:
datatype = name.replace('Reader','')
else:
datatype = name
name = '{}Reader'.format(name)
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 self.id = id
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177 self.project_id = project_id
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 self.name = name
Miguel Valdez
Primera version del controlador probada y testeada incluyendo graficos
r199 self.datatype = datatype
Fix excessive memory RAM consumption
r1268 self.err_queue = err_queue
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287
self.addParameter(name='path', value=path)
self.addParameter(name='startDate', value=startDate)
self.addParameter(name='endDate', value=endDate)
self.addParameter(name='startTime', value=startTime)
self.addParameter(name='endTime', value=endTime)
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 for key, value in kwargs.items():
self.addParameter(name=key, value=value)
ReceiverData Operation, test PlotData
r889
José Chávez
formatting
r1082
José Chávez
merge
r1040 class Project(Process):
Juan C. Espinoza
Change multiSchain by MPProject
r1052
Miguel Valdez
Busqueda de archivos dentro del directorio indicado (sin busqueda de subdirectorios) activando el flag de lectura 'walk'
r224 ELEMENTNAME = 'Project'
ReceiverData Operation, test PlotData
r889
George Yong
Multiprocessing for Spectra (all operation) working
r1171 def __init__(self):
Juan C. Espinoza
Change multiSchain by MPProject
r1052
José Chávez
merge
r1040 Process.__init__(self)
George Yong
Multiprocessing for Spectra (all operation) working
r1171 self.id = None
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177 self.filename = None
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 self.description = None
Juan C. Espinoza
test alarm
r1126 self.email = None
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.alarm = []
self.configurations = {}
# self.err_queue = Queue()
self.err_queue = None
self.started = False
Juan C. Espinoza
Change multiSchain by MPProject
r1052
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def getNewId(self):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 idList = list(self.configurations.keys())
José Chávez
formatting
r1082 id = int(self.id) * 10
ReceiverData Operation, test PlotData
r889
Miguel Valdez
r764 while True:
id += 1
ReceiverData Operation, test PlotData
r889
Miguel Valdez
r764 if str(id) in idList:
continue
ReceiverData Operation, test PlotData
r889
Miguel Valdez
r764 break
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 return str(id)
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Signal Chain GUI v2.1
r596 def updateId(self, new_id):
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Signal Chain GUI v2.1
r596 self.id = str(new_id)
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 keyList = list(self.configurations.keys())
Miguel Valdez
Signal Chain GUI v2.1
r596 keyList.sort()
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Signal Chain GUI v2.1
r596 n = 1
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 new_confs = {}
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Signal Chain GUI v2.1
r596 for procKey in keyList:
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 conf = self.configurations[procKey]
José Chávez
formatting
r1082 idProcUnit = str(int(self.id) * 10 + n)
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 conf.updateId(idProcUnit)
new_confs[idProcUnit] = conf
Miguel Valdez
Signal Chain GUI v2.1
r596 n += 1
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.configurations = new_confs
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177 def setup(self, id=1, name='', description='', email=None, alarm=[]):
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Signal Chain GUI v2.1
r596 self.id = str(id)
George Yong
Multiprocessing for Spectra (all operation) working
r1171 self.description = description
Juan C. Espinoza
test alarm
r1126 self.email = email
self.alarm = alarm
Errors handling and gracefully terminate main process
r1241 if name:
self.name = '{} ({})'.format(Process.__name__, name)
Miguel Valdez
r577
Juan C. Espinoza
test alarm
r1126 def update(self, **kwargs):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 for key, value in kwargs.items():
Juan C. Espinoza
test alarm
r1126 setattr(self, key, value)
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Change multiSchain by MPProject
r1052 def clone(self):
p = Project()
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 p.id = self.id
p.name = self.name
p.description = self.description
p.configurations = self.configurations.copy()
Juan C. Espinoza
Change multiSchain by MPProject
r1052 return p
Miguel Valdez
GUI: minor changes
r687 def addReadUnit(self, id=None, datatype=None, name=None, **kwargs):
Juan C. Espinoza
Change multiSchain by MPProject
r1052
George Yong
Multiprocessing for Spectra (all operation) working
r1171 '''
'''
Miguel Valdez
GUI: minor changes
r687 if id is None:
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 idReadUnit = self.getNewId()
Miguel Valdez
GUI: minor changes
r687 else:
idReadUnit = str(id)
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 conf = ReadUnitConf()
conf.setup(self.id, idReadUnit, name, datatype, self.err_queue, **kwargs)
self.configurations[conf.id] = conf
George Yong
Multiprocessing for Spectra (all operation) working
r1171
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 return conf
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def addProcUnit(self, id=None, inputId='0', datatype=None, name=None):
ReceiverData Operation, test PlotData
r889
George Yong
Multiprocessing for Spectra (all operation) working
r1171 '''
'''
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 if id is None:
idProcUnit = self.getNewId()
else:
idProcUnit = id
conf = ProcUnitConf()
conf.setup(self.id, idProcUnit, name, datatype, inputId, self.err_queue)
self.configurations[conf.id] = conf
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 return conf
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Signal Chain GUI updated:...
r587 def removeProcUnit(self, id):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 if id in self.configurations:
self.configurations.pop(id)
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def getReadUnit(self):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 for obj in list(self.configurations.values()):
if obj.ELEMENTNAME == 'ReadUnit':
Miguel Valdez
r577 return obj
ReceiverData Operation, test PlotData
r889
Miguel Valdez
r577 return None
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def getProcUnit(self, id):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 return self.configurations[id]
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def getUnits(self):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 keys = list(self.configurations)
keys.sort()
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 for key in keys:
yield self.configurations[key]
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def updateUnit(self, id, **kwargs):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 conf = self.configurations[id].update(**kwargs)
ReceiverData Operation, test PlotData
r889 def makeXml(self):
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 xml = Element('Project')
xml.set('id', str(self.id))
xml.set('name', self.name)
xml.set('description', self.description)
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 for conf in self.configurations.values():
conf.makeXml(xml)
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.xml = xml
ReceiverData Operation, test PlotData
r889
Miguel Valdez
controller.py: minor changes
r702 def writeXml(self, filename=None):
ReceiverData Operation, test PlotData
r889
Miguel Valdez
controller.py: minor changes
r702 if filename == None:
Miguel Valdez
v2.2.0: Controller updated
r708 if self.filename:
filename = self.filename
else:
Juan C. Espinoza
Change multiSchain by MPProject
r1052 filename = 'schain.xml'
ReceiverData Operation, test PlotData
r889
Miguel Valdez
controller.py: minor changes
r702 if not filename:
George Yong
Python 2to3, Spectra (all operations) working
r1167 print('filename has not been defined. Use setFilename(filename) for do it.')
Miguel Valdez
controller.py: minor changes
r702 return 0
ReceiverData Operation, test PlotData
r889
Miguel Valdez
GUI: minor changes
r687 abs_file = os.path.abspath(filename)
ReceiverData Operation, test PlotData
r889
Miguel Valdez
GUI: minor changes
r687 if not os.access(os.path.dirname(abs_file), os.W_OK):
George Yong
Python 2to3, Spectra (all operations) working
r1167 print('No write permission on %s' % os.path.dirname(abs_file))
Miguel Valdez
r681 return 0
ReceiverData Operation, test PlotData
r889
Miguel Valdez
GUI: minor changes
r687 if os.path.isfile(abs_file) and not(os.access(abs_file, os.W_OK)):
George Yong
Python 2to3, Spectra (all operations) working
r1167 print('File %s already exists and it could not be overwriten' % abs_file)
Miguel Valdez
r681 return 0
ReceiverData Operation, test PlotData
r889
Miguel Valdez
r681 self.makeXml()
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 ElementTree(self.xml).write(abs_file, method='xml')
ReceiverData Operation, test PlotData
r889
Miguel Valdez
v2.2.0: Controller updated
r708 self.filename = abs_file
ReceiverData Operation, test PlotData
r889
Miguel Valdez
r681 return 1
Miguel Valdez
Controlador de Signal Chain finalizado....
r197
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def readXml(self, filename):
ReceiverData Operation, test PlotData
r889
Miguel Valdez
GUI: minor changes
r687 abs_file = os.path.abspath(filename)
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.configurations = {}
ReceiverData Operation, test PlotData
r889
Miguel Valdez
-Email alert is not sent when a Keyboard error occurred ...
r735 try:
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.xml = ElementTree().parse(abs_file)
Miguel Valdez
-Email alert is not sent when a Keyboard error occurred ...
r735 except:
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 log.error('Error reading %s, verify file format' % filename)
Miguel Valdez
-Email alert is not sent when a Keyboard error occurred ...
r735 return 0
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.id = self.xml.get('id')
self.name = self.xml.get('name')
self.description = self.xml.get('description')
for element in self.xml:
if element.tag == 'ReadUnit':
conf = ReadUnitConf()
conf.readXml(element, self.id, self.err_queue)
self.configurations[conf.id] = conf
elif element.tag == 'ProcUnit':
conf = ProcUnitConf()
input_proc = self.configurations[element.get('inputId')]
conf.readXml(element, self.id, self.err_queue)
self.configurations[conf.id] = conf
ReceiverData Operation, test PlotData
r889
Miguel Valdez
v2.2.0: Controller updated
r708 self.filename = abs_file
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287
Miguel Valdez
r681 return 1
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177 def __str__(self):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 text = '\nProject[id=%s, name=%s, description=%s]\n\n' % (
self.id,
self.name,
self.description,
)
for conf in self.configurations.values():
text += '{}'.format(conf)
José Chávez
formatting
r1082
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 return text
ReceiverData Operation, test PlotData
r889
Miguel Valdez
Controlador de Signal Chain finalizado....
r197 def createObjects(self):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 keys = list(self.configurations.keys())
George Yong
Multiprocessing for digitalRF just for reading Unit(Task #1461 )
r1192 keys.sort()
for key in keys:
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 conf = self.configurations[key]
conf.createObjects()
if conf.inputId is not None:
conf.object.setInput(self.configurations[conf.inputId].object)
ReceiverData Operation, test PlotData
r889
Errors handling and gracefully terminate main process
r1241 def monitor(self):
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 t = Thread(target=self._monitor, args=(self.err_queue, self.ctx))
Errors handling and gracefully terminate main process
r1241 t.start()
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def _monitor(self, queue, ctx):
ReceiverData Operation, test PlotData
r889
Errors handling and gracefully terminate main process
r1241 import socket
Juan C. Espinoza
Set default alarms to none
r1163
Errors handling and gracefully terminate main process
r1241 procs = 0
err_msg = ''
while True:
msg = queue.get()
if '#_start_#' in msg:
procs += 1
elif '#_end_#' in msg:
procs -=1
else:
err_msg = msg
if procs == 0 or 'Traceback' in err_msg:
break
time.sleep(0.1)
if '|' in err_msg:
name, err = err_msg.split('|')
if 'SchainWarning' in err:
log.warning(err.split('SchainWarning:')[-1].split('\n')[0].strip(), name)
elif 'SchainError' in err:
log.error(err.split('SchainError:')[-1].split('\n')[0].strip(), name)
else:
log.error(err, name)
else:
name, err = self.name, err_msg
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 time.sleep(1)
Errors handling and gracefully terminate main process
r1241
ctx.term()
Miguel Valdez
-Email alert is not sent when a Keyboard error occurred ...
r735
Juan C. Espinoza
Change multiSchain by MPProject
r1052 message = ''.join(err)
ReceiverData Operation, test PlotData
r889
Errors handling and gracefully terminate main process
r1241 if err_msg:
subject = 'SChain v%s: Error running %s\n' % (
schainpy.__version__, self.name)
subtitle = 'Hostname: %s\n' % socket.gethostbyname(
socket.gethostname())
subtitle += 'Working directory: %s\n' % os.path.abspath('./')
subtitle += 'Configuration file: %s\n' % self.filename
subtitle += 'Time: %s\n' % str(datetime.datetime.now())
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 readUnitConfObj = self.getReadUnit()
Errors handling and gracefully terminate main process
r1241 if readUnitConfObj:
subtitle += '\nInput parameters:\n'
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 subtitle += '[Data path = %s]\n' % readUnitConfObj.parameters['path']
subtitle += '[Start date = %s]\n' % readUnitConfObj.parameters['startDate']
subtitle += '[End date = %s]\n' % readUnitConfObj.parameters['endDate']
subtitle += '[Start time = %s]\n' % readUnitConfObj.parameters['startTime']
subtitle += '[End time = %s]\n' % readUnitConfObj.parameters['endTime']
Errors handling and gracefully terminate main process
r1241
a = Alarm(
modes=self.alarm,
email=self.email,
message=message,
subject=subject,
subtitle=subtitle,
filename=self.filename
)
a.start()
Now alarm is a process, add SchainWarning exception for handling non-stop exceptions
r1129
Miguel Valdez
A new Plotter Class was added for plotting using queues
r691 def setFilename(self, filename):
ReceiverData Operation, test PlotData
r889
Miguel Valdez
A new Plotter Class was added for plotting using queues
r691 self.filename = filename
ReceiverData Operation, test PlotData
r889
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 def runProcs(self):
Juan C. Espinoza
Review MP changes, three types of operations: self, other and external
r1177
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 err = False
n = len(self.configurations)
while not err:
for conf in self.getUnits():
ok = conf.run()
if ok is 'Error':
n -= 1
continue
elif not ok:
break
if n == 0:
err = True
George Yong
Multiprocessing for Spectra (all operation) working
r1171
Juan C. Espinoza
Change multiSchain by MPProject
r1052 def run(self):
José Chávez
cambios xmax xmin
r1004
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 log.success('\nStarting Project {} [id={}]'.format(self.name, self.id), tag='')
self.started = True
Errors handling and gracefully terminate main process
r1241 self.start_time = time.time()
Juan C. Espinoza
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
r1287 self.createObjects()
self.runProcs()
log.success('{} Done (Time: {:4.2f}s)'.format(
Juan C. Espinoza
set new matplotlib version in setup, improved searchFiles for multiprocessing
r1112 self.name,
Errors handling and gracefully terminate main process
r1241 time.time()-self.start_time), '')