frappy_psi/parmod: fix Driv

registering updates should be done in initModules
This commit is contained in:
zolliker 2024-08-21 08:04:06 +02:00
parent 25986d67aa
commit 4892c2fd8f

View File

@ -54,6 +54,7 @@ class Par(Readable):
class Driv(Drivable):
# this should be Writable instead!
value = Parameter(datatype=FloatRange(unit='$'))
target = Parameter(datatype=FloatRange(unit='$'))
read = Attached(description='<module>.<parameter> for read')
@ -64,10 +65,10 @@ class Driv(Drivable):
def setProperty(self, key, value):
# split properties read/write (including .<param>)
# into read/write (modules) and read_param/write_param (parameters)
# 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)
setattr(self, f'_{key}_param', param)
super().setProperty(key, value)
def checkProperties(self):
@ -76,14 +77,15 @@ class Driv(Drivable):
raise ConfigError('illegal recursive read/write module')
super().checkProperties()
def registerUpdates(self):
if self.read_param == 'value':
def initModule(self):
super().initModule()
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.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
@ -95,17 +97,17 @@ class Driv(Drivable):
self.__error = err
self.read_status()
def startModule(self, start_events):
start_events.queue(self.registerUpdates)
super().startModule(start_events)
#def startModule(self, start_events):
# start_events.queue(self.registerUpdates)
# super().startModule(start_events)
@nopoll
def read_value(self):
return getattr(self.read, f'read_{self.read_param}')()
return getattr(self.read, f'read_{self._read_param}')()
@nopoll
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):
@ -116,7 +118,7 @@ class Driv(Drivable):
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)
return getattr(self.write, f'write_{self._write_param}')(target)
class Converging(HasConvergence, Driv):