frappy_psi/parmod: fix Driv
registering updates should be done in initModules
This commit is contained in:
@ -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):
|
||||||
|
Reference in New Issue
Block a user