diff --git a/frappy_psi/parmod.py b/frappy_psi/parmod.py index 58c3b3f..990a472 100644 --- a/frappy_psi/parmod.py +++ b/frappy_psi/parmod.py @@ -23,12 +23,36 @@ """modules to access parameters""" from frappy.core import Drivable, IDLE, Attached, StringType, Property, \ - Parameter, FloatRange + Parameter, FloatRange, Readable from frappy.errors import ConfigError from frappy_psi.convergence import HasConvergence from frappy_psi.mixins import HasRamp +class Par(Readable): + value = Parameter(datatype=FloatRange(unit='$')) + read = Attached(description='. for read') + unit = Property('main unit', StringType()) + + def setProperty(self, key, value): + if key == 'read': + value, param = value.split('.') + setattr(self, f'{key}_param', param) + super().setProperty(key, value) + + def checkProperties(self): + self.applyMainUnit(self.unit) + if self.read == self.name : + raise ConfigError('illegal recursive read/write module') + super().checkProperties() + + def read_value(self): + return getattr(self.read, f'{self.read_param}') + + def read_status(self): + return IDLE, '' + + class Driv(Drivable): value = Parameter(datatype=FloatRange(unit='$')) target = Parameter(datatype=FloatRange(unit='$'))