frappy_psi.parmod: extract a tuple element as own moudle
Change-Id: I8d904ed21f8a5c16ae71daf30c9a1ea42876b451
This commit is contained in:
parent
396bbe9982
commit
5974d759b0
@ -21,12 +21,12 @@
|
|||||||
|
|
||||||
"""modules to access parameters"""
|
"""modules to access parameters"""
|
||||||
|
|
||||||
|
import re
|
||||||
from frappy.core import Drivable, EnumType, IDLE, Attached, StringType, Property, \
|
from frappy.core import Drivable, EnumType, IDLE, Attached, StringType, Property, \
|
||||||
Parameter, BoolType, FloatRange, Readable, ERROR, nopoll
|
Parameter, BoolType, FloatRange, Readable, ERROR, nopoll
|
||||||
from frappy.errors import ConfigError
|
from frappy.errors import ConfigError
|
||||||
from frappy_psi.convergence import HasConvergence
|
from frappy_psi.convergence import HasConvergence
|
||||||
from frappy_psi.mixins import HasRamp
|
from frappy_psi.mixins import HasRamp
|
||||||
from frappy.lib import merge_status
|
|
||||||
|
|
||||||
|
|
||||||
class Par(Readable):
|
class Par(Readable):
|
||||||
@ -255,3 +255,41 @@ class SwitchDriv(HasConvergence, Drivable):
|
|||||||
self.log.info('target=%g (%s)', target, this.name)
|
self.log.info('target=%g (%s)', target, this.name)
|
||||||
this.write_target(target1)
|
this.write_target(target1)
|
||||||
return target
|
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