separate setup for additional aliases

- remove multiple aliases in frappy_config
This commit is contained in:
2022-05-02 16:25:02 +02:00
parent b9370eb206
commit 410a590d0f
2 changed files with 39 additions and 24 deletions

View File

@ -68,6 +68,12 @@ def applyAliasConfig():
break break
class FrappyAliases(Device):
parameters = {
'aliases': Param('dict of additional aliases', type=anytype, default={})
}
class FrappyConfig(Device): class FrappyConfig(Device):
# respect the order: e.g. temperature_regulation must be after temperature # respect the order: e.g. temperature_regulation must be after temperature
# and temperature_drivable must be the last in the temperature group # and temperature_drivable must be the last in the temperature group
@ -95,18 +101,22 @@ class FrappyConfig(Device):
meanings.remove('nodes') meanings.remove('nodes')
def remove_aliases(self): def remove_aliases(self):
for meaning in self.meanings:
info = getattr(self, meaning) def remove_alias(aliasname):
aliasnames = info['alias']
if isinstance(aliasname, str):
aliasnames = [aliasnames]
for aliasname in aliasnames:
aliasdev = session.devices.get(aliasname) aliasdev = session.devices.get(aliasname)
if aliasdev: if aliasdev:
session.destroyDevice(aliasname) session.destroyDevice(aliasname)
session.configured_devices.pop(aliasname, None) session.configured_devices.pop(aliasname, None)
session.dynamic_devices.pop(aliasname, None) session.dynamic_devices.pop(aliasname, None)
for meaning in self.meanings:
info = getattr(self, meaning)
remove_alias(info['alias'])
frappy_aliases = session.devices.get('frappy_aliases')
if frappy_aliases:
for aliasname in frappy_aliases.aliases:
remove_alias(aliasname)
def set_envlist(self): def set_envlist(self):
"""create aliases for SECoP devices """create aliases for SECoP devices
@ -132,9 +142,7 @@ class FrappyConfig(Device):
drivables = {} drivables = {}
for meaning in self.meanings: for meaning in self.meanings:
info = getattr(self, meaning) info = getattr(self, meaning)
aliasnames = info['alias'] aliasname = info['alias']
if isinstance(aliasnames, str):
aliasnames = [aliasnames]
envlistflag = info.get('envlist', True) envlistflag = info.get('envlist', True)
aliascfg = info.get('targets', {}) aliascfg = info.get('targets', {})
importance_list = sample_devices.get(meaning, []) importance_list = sample_devices.get(meaning, [])
@ -156,14 +164,12 @@ class FrappyConfig(Device):
# marked as xxx_drivable, but not really drivable: skip # marked as xxx_drivable, but not really drivable: skip
continue continue
if dev: if dev:
for aliasname in aliasnames:
session.log.debug('create alias %r pointing to %r', aliasname, devname) session.log.debug('create alias %r pointing to %r', aliasname, devname)
devcfg = ('nicos.core.DeviceAlias', {}) devcfg = ('nicos.core.DeviceAlias', {})
session.configured_devices[aliasname] = devcfg session.configured_devices[aliasname] = devcfg
session.dynamic_devices[aliasname] = 'frappy' session.dynamic_devices[aliasname] = 'frappy'
aliasdev = session.createDevice(aliasname, recreate=True, explicit=True) aliasdev = session.createDevice(aliasname, recreate=True, explicit=True)
aliasdev.alias = devname aliasdev.alias = devname
aliasname = aliasnames[0]
if devname not in devset and envlistflag: if devname not in devset and envlistflag:
# take only the first one # take only the first one
devset.add(devname) devset.add(devname)
@ -172,9 +178,18 @@ class FrappyConfig(Device):
newenv.pop(aliasname, None) newenv.pop(aliasname, None)
break break
else: else:
for aliasname in aliasnames:
newenv.pop(aliasname, None) newenv.pop(aliasname, None)
frappy_aliases = session.devices.get('frappy_aliases')
if frappy_aliases:
for aliasname, aliastarget in frappy_aliases.aliases.items():
session.log.debug('create alias %r pointing to %r', aliasname, devname)
devcfg = ('nicos.core.DeviceAlias', {})
session.configured_devices[aliasname] = devcfg
session.dynamic_devices[aliasname] = 'frappy'
aliasdev = session.createDevice(aliasname, recreate=True, explicit=True)
aliasdev.alias = devname
applyAliasConfig() # for other aliases applyAliasConfig() # for other aliases
if set(newenv) != set(session.experiment.envlist): if set(newenv) != set(session.experiment.envlist):
session.experiment.setEnvironment(list(newenv)) session.experiment.setEnvironment(list(newenv))

View File

@ -20,7 +20,7 @@ devices = dict(
# device, using the given importance number, with similar values as # device, using the given importance number, with similar values as
# given by the SECoP standard (10: instrument, 20: cryostat, 30: insert) # given by the SECoP standard (10: instrument, 20: cryostat, 30: insert)
temperature = { # the SECoP meaning temperature = { # the SECoP meaning
'alias': ['Ts', 'temperature'], # the name(s) to be given to the alias 'alias': 'Ts', # the name(s) to be given to the alias
'targets': # possible devices in addition with importance 'targets': # possible devices in addition with importance
{'se_ts': 20, 'se_tt': 19, 'se_tm': 18}, {'se_ts': 20, 'se_tt': 19, 'se_tm': 18},
}, },
@ -33,7 +33,7 @@ devices = dict(
'envlist': False, 'envlist': False,
}, },
magneticfield = { magneticfield = {
'alias': ['B', 'magfield'], 'alias': 'B',
'targets': {'se_mf': 20}, 'targets': {'se_mf': 20},
}, },
rotation_z = { rotation_z = {