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')
|
||||
write = Attached(description='<module>.<parameter> for read')
|
||||
unit = Property('main unit', StringType())
|
||||
__error = None
|
||||
__status = None
|
||||
|
||||
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'):
|
||||
value, param = value.split('.')
|
||||
setattr(self, f'{key}_param', param)
|
||||
@ -73,9 +77,24 @@ class Driv(Drivable):
|
||||
super().checkProperties()
|
||||
|
||||
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')
|
||||
|
||||
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):
|
||||
start_events.queue(self.registerUpdates)
|
||||
super().startModule(start_events)
|
||||
@ -88,8 +107,13 @@ class Driv(Drivable):
|
||||
def read_target(self):
|
||||
return getattr(self.write, f'read_{self.write_param}')()
|
||||
|
||||
@nopoll
|
||||
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):
|
||||
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)
|
||||
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):
|
||||
self.convergence_start()
|
||||
return super().write_target(target)
|
||||
|
Loading…
x
Reference in New Issue
Block a user