frappy_psi.parmod: extract a tuple element as own moudle

Change-Id: I8d904ed21f8a5c16ae71daf30c9a1ea42876b451
This commit is contained in:
zolliker 2025-04-24 10:48:35 +02:00
parent 3580cb9dc0
commit fb4755502b

View File

@ -21,12 +21,12 @@
"""modules to access parameters"""
import re
from frappy.core import Drivable, EnumType, IDLE, Attached, StringType, Property, \
Parameter, BoolType, FloatRange, Readable, ERROR, nopoll
from frappy.errors import ConfigError
from frappy_psi.convergence import HasConvergence
from frappy_psi.mixins import HasRamp
from frappy.lib import merge_status
class Par(Readable):
@ -255,3 +255,41 @@ class SwitchDriv(HasConvergence, Drivable):
self.log.info('target=%g (%s)', target, this.name)
this.write_target(target1)
return target
INDEX = re.compile(r'(.*)\[(.*)\]')
class Comp(Readable):
value = Parameter(datatype=FloatRange(unit='$'))
read = Attached(description='<module>.<parameter> for read')
unit = Property('main unit', StringType())
_parname = None
_index = None
def setProperty(self, key, value):
if key == 'read':
value, param = value.split('.')
match = INDEX.match(param)
if match:
self._param, i = match.groups()
self._index = int(i)
else:
self._param = param
super().setProperty(key, value)
def checkProperties(self):
self.applyMainUnit(self.unit)
if self._param == self.name:
raise ConfigError('illegal recursive read module')
super().checkProperties()
def read_value(self):
par = getattr(self.read, self._param)
if self._index is None:
return par
return par[self._index]
def read_status(self):
return IDLE, ''