frappy_psi/parmod: fix Driv

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

View File

@ -54,6 +54,7 @@ class Par(Readable):
class Driv(Drivable): class Driv(Drivable):
# this should be Writable instead!
value = Parameter(datatype=FloatRange(unit='$')) value = Parameter(datatype=FloatRange(unit='$'))
target = Parameter(datatype=FloatRange(unit='$')) target = Parameter(datatype=FloatRange(unit='$'))
read = Attached(description='<module>.<parameter> for read') read = Attached(description='<module>.<parameter> for read')
@ -64,10 +65,10 @@ class Driv(Drivable):
def setProperty(self, key, value): def setProperty(self, key, value):
# split properties read/write (including .<param>) # 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'): 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)
super().setProperty(key, value) super().setProperty(key, value)
def checkProperties(self): def checkProperties(self):
@ -76,14 +77,15 @@ class Driv(Drivable):
raise ConfigError('illegal recursive read/write module') raise ConfigError('illegal recursive read/write module')
super().checkProperties() super().checkProperties()
def registerUpdates(self): def initModule(self):
if self.read_param == 'value': super().initModule()
if self._read_param == 'value':
try: try:
self.read.addCallback('status', self.updateReadStatus) self.read.addCallback('status', self.updateReadStatus)
except KeyError: except KeyError:
pass # may be not needed: value is present but not status pass # may be not needed: value is present but not status
self.read.addCallback(self.read_param, self.updateValue) 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): def updateReadStatus(self, status, err=None):
self.__status = status self.__status = status
@ -95,17 +97,17 @@ class Driv(Drivable):
self.__error = err self.__error = err
self.read_status() 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)
@nopoll @nopoll
def read_value(self): def read_value(self):
return getattr(self.read, f'read_{self.read_param}')() return getattr(self.read, f'read_{self._read_param}')()
@nopoll @nopoll
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 @nopoll
def read_status(self): def read_status(self):
@ -116,7 +118,7 @@ class Driv(Drivable):
return (ERROR, repr(self.__error)) if self.__error else (IDLE, '') 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)
class Converging(HasConvergence, Driv): class Converging(HasConvergence, Driv):