frappy_psi.parmod: extract a tuple element as own moudle
Change-Id: I8d904ed21f8a5c16ae71daf30c9a1ea42876b451
This commit is contained in:
parent
3580cb9dc0
commit
fb4755502b
@ -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, ''
|
||||
|
Loading…
x
Reference in New Issue
Block a user