frappy_psi.parmod: make async
This commit is contained in:
parent
7929c37027
commit
d492f7326f
@ -59,8 +59,12 @@ class Driv(Drivable):
|
|||||||
read = Attached(description='<module>.<parameter> for read')
|
read = Attached(description='<module>.<parameter> for read')
|
||||||
write = Attached(description='<module>.<parameter> for read')
|
write = Attached(description='<module>.<parameter> for read')
|
||||||
unit = Property('main unit', StringType())
|
unit = Property('main unit', StringType())
|
||||||
|
__error = None
|
||||||
|
__status = None
|
||||||
|
|
||||||
def setProperty(self, key, value):
|
def setProperty(self, key, value):
|
||||||
|
# split properties read/write (including .<param>)
|
||||||
|
# into read/write (modules) and read_param/write_param (parameters)
|
||||||
if key in ('read', 'write'):
|
if key in ('read', 'write'):
|
||||||
value, param = value.split('.')
|
value, param = value.split('.')
|
||||||
setattr(self, f'{key}_param', param)
|
setattr(self, f'{key}_param', param)
|
||||||
@ -73,9 +77,24 @@ class Driv(Drivable):
|
|||||||
super().checkProperties()
|
super().checkProperties()
|
||||||
|
|
||||||
def registerUpdates(self):
|
def registerUpdates(self):
|
||||||
self.read.addCallback(self.read_param, self.announceUpdate, 'value')
|
if self.read_param == 'value':
|
||||||
|
try:
|
||||||
|
self.read.addCallback('status', self.updateReadStatus)
|
||||||
|
except KeyError:
|
||||||
|
pass # may be not needed: value is present but not status
|
||||||
|
self.read.addCallback(self.read_param, self.updateValue)
|
||||||
self.write.addCallback(self.write_param, self.announceUpdate, 'target')
|
self.write.addCallback(self.write_param, self.announceUpdate, 'target')
|
||||||
|
|
||||||
|
def updateReadStatus(self, status, err=None):
|
||||||
|
self.__status = status
|
||||||
|
self.read_status()
|
||||||
|
|
||||||
|
def updateValue(self, value, err=None):
|
||||||
|
self.announceUpdate('value', value, err)
|
||||||
|
if err != self.__error:
|
||||||
|
self.__error = err
|
||||||
|
self.read_status()
|
||||||
|
|
||||||
def startModule(self, start_events):
|
def startModule(self, start_events):
|
||||||
start_events.queue(self.registerUpdates)
|
start_events.queue(self.registerUpdates)
|
||||||
super().startModule(start_events)
|
super().startModule(start_events)
|
||||||
@ -88,8 +107,13 @@ class Driv(Drivable):
|
|||||||
def read_target(self):
|
def read_target(self):
|
||||||
return getattr(self.write, f'read_{self.write_param}')()
|
return getattr(self.write, f'read_{self.write_param}')()
|
||||||
|
|
||||||
|
@nopoll
|
||||||
def read_status(self):
|
def read_status(self):
|
||||||
return IDLE, ''
|
if self.__status:
|
||||||
|
if self.__status[0] < ERROR and self.__error:
|
||||||
|
return ERROR, repr(self.__error)
|
||||||
|
return self.__status
|
||||||
|
return (ERROR, repr(self.__error)) if self.__error else (IDLE, '')
|
||||||
|
|
||||||
def write_target(self, target):
|
def write_target(self, target):
|
||||||
return getattr(self.write, f'write_{self.write_param}')(target)
|
return getattr(self.write, f'write_{self.write_param}')(target)
|
||||||
@ -103,19 +127,6 @@ class Converging(HasConvergence, Driv):
|
|||||||
self.parameters['tolerance'].setProperty('unit', self.unit)
|
self.parameters['tolerance'].setProperty('unit', self.unit)
|
||||||
super().checkProperties()
|
super().checkProperties()
|
||||||
|
|
||||||
#def update_value(self, value):
|
|
||||||
# print('UV', value)
|
|
||||||
# self.value = value
|
|
||||||
|
|
||||||
#def error_update_value(self, err):
|
|
||||||
# raise err
|
|
||||||
|
|
||||||
#def update_target(self, value):
|
|
||||||
# self.target = value
|
|
||||||
|
|
||||||
#def error_update_target(self, err):
|
|
||||||
# raise err
|
|
||||||
|
|
||||||
def write_target(self, target):
|
def write_target(self, target):
|
||||||
self.convergence_start()
|
self.convergence_start()
|
||||||
return super().write_target(target)
|
return super().write_target(target)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user