From 410a590d0feeda7d447f1a19d8d14299e0a453a7 Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Mon, 2 May 2022 16:25:02 +0200 Subject: [PATCH] separate setup for additional aliases - remove multiple aliases in frappy_config --- devices.py | 59 ++++++++++++++++++++++++++++++------------------ setups/frappy.py | 4 ++-- 2 files changed, 39 insertions(+), 24 deletions(-) diff --git a/devices.py b/devices.py index 5fbb65c..71a8533 100644 --- a/devices.py +++ b/devices.py @@ -68,6 +68,12 @@ def applyAliasConfig(): break +class FrappyAliases(Device): + parameters = { + 'aliases': Param('dict of additional aliases', type=anytype, default={}) + } + + class FrappyConfig(Device): # respect the order: e.g. temperature_regulation must be after temperature # and temperature_drivable must be the last in the temperature group @@ -95,17 +101,21 @@ class FrappyConfig(Device): meanings.remove('nodes') def remove_aliases(self): + + def remove_alias(aliasname): + aliasdev = session.devices.get(aliasname) + if aliasdev: + session.destroyDevice(aliasname) + session.configured_devices.pop(aliasname, None) + session.dynamic_devices.pop(aliasname, None) + for meaning in self.meanings: info = getattr(self, meaning) - aliasnames = info['alias'] - if isinstance(aliasname, str): - aliasnames = [aliasnames] - for aliasname in aliasnames: - aliasdev = session.devices.get(aliasname) - if aliasdev: - session.destroyDevice(aliasname) - session.configured_devices.pop(aliasname, None) - session.dynamic_devices.pop(aliasname, None) + 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): """create aliases for SECoP devices @@ -132,9 +142,7 @@ class FrappyConfig(Device): drivables = {} for meaning in self.meanings: info = getattr(self, meaning) - aliasnames = info['alias'] - if isinstance(aliasnames, str): - aliasnames = [aliasnames] + aliasname = info['alias'] envlistflag = info.get('envlist', True) aliascfg = info.get('targets', {}) importance_list = sample_devices.get(meaning, []) @@ -156,14 +164,12 @@ class FrappyConfig(Device): # marked as xxx_drivable, but not really drivable: skip continue if dev: - for aliasname in aliasnames: - 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 - aliasname = aliasnames[0] + 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 if devname not in devset and envlistflag: # take only the first one devset.add(devname) @@ -172,8 +178,17 @@ class FrappyConfig(Device): newenv.pop(aliasname, None) break 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 if set(newenv) != set(session.experiment.envlist): diff --git a/setups/frappy.py b/setups/frappy.py index 657640c..4e07665 100644 --- a/setups/frappy.py +++ b/setups/frappy.py @@ -20,7 +20,7 @@ devices = dict( # device, using the given importance number, with similar values as # given by the SECoP standard (10: instrument, 20: cryostat, 30: insert) 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 {'se_ts': 20, 'se_tt': 19, 'se_tm': 18}, }, @@ -33,7 +33,7 @@ devices = dict( 'envlist': False, }, magneticfield = { - 'alias': ['B', 'magfield'], + 'alias': 'B', 'targets': {'se_mf': 20}, }, rotation_z = {