again modified alias handling
This commit is contained in:
67
devices.py
67
devices.py
@ -54,7 +54,6 @@ def applyAliasConfig():
|
||||
# reimplemented from Session.applyAliasConfig
|
||||
# apply also when target dev name does not change, as the target device might have
|
||||
# be exchanged in the mean time
|
||||
unused = set()
|
||||
for aliasname, targets in session.alias_config.items():
|
||||
if aliasname not in session.devices:
|
||||
continue # silently ignore
|
||||
@ -70,7 +69,16 @@ def applyAliasConfig():
|
||||
|
||||
class FrappyAliases(Device):
|
||||
parameters = {
|
||||
'aliases': Param('dict of additional aliases', type=anytype, default={})
|
||||
'temperature': Param(
|
||||
'config for sample temperature', type=str, default='Ts'),
|
||||
'temperature_regulation': Param(
|
||||
'config for temperature regulation', type=str, default='Tr'),
|
||||
'temperature_drivable': Param(
|
||||
'config for drivable temperature', type=anytype, default='T'),
|
||||
'magneticfield': Param(
|
||||
'config for magnetic field', type=anytype, default='B'),
|
||||
'rotation_z': Param(
|
||||
'config for sample rotation', type=anytype, default='dom'),
|
||||
}
|
||||
|
||||
|
||||
@ -80,22 +88,26 @@ class FrappyConfig(Device):
|
||||
parameters = {
|
||||
'temperature': Param(
|
||||
'config for sample temperature', type=anytype,
|
||||
default={'alias': 'Ts'}),
|
||||
default={'alias': 'temperature'}),
|
||||
'temperature_regulation': Param(
|
||||
'config for temperature regulation', type=anytype,
|
||||
default={'alias': 'Tr'}),
|
||||
default={}),
|
||||
'temperature_drivable': Param(
|
||||
'config for drivable temperature', type=anytype,
|
||||
default={'alias': 'T', 'envlist': False}),
|
||||
default={'envlist': False}),
|
||||
'magneticfield': Param(
|
||||
'config for magnetic field', type=anytype,
|
||||
default={'alias': 'B'}),
|
||||
default={'alias': 'magfield'}),
|
||||
'rotation_z': Param(
|
||||
'config for sample rotation', type=anytype,
|
||||
default={'alias': 'stickrot', 'envlist': False}),
|
||||
default={'envlist': False}),
|
||||
'nodes': Param(
|
||||
'list of names of potential SEC nodes', type=listof(str), default=[]),
|
||||
}
|
||||
parameter_overrides = {
|
||||
# frappy_config does not need to be visible
|
||||
'visibility': Override(default=[])
|
||||
}
|
||||
|
||||
meanings = list(parameters)
|
||||
meanings.remove('nodes')
|
||||
@ -103,19 +115,18 @@ class FrappyConfig(Device):
|
||||
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)
|
||||
if aliasname:
|
||||
aliasdev = session.devices.get(aliasname)
|
||||
if aliasdev:
|
||||
session.destroyDevice(aliasname)
|
||||
session.configured_devices.pop(aliasname, None)
|
||||
session.dynamic_devices.pop(aliasname, None)
|
||||
|
||||
frappy_aliases = session.devices.get('frappy_aliases')
|
||||
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)
|
||||
remove_alias(info.get('alias'))
|
||||
remove_alias(getattr(frappy_aliases, meaning, None))
|
||||
|
||||
def set_envlist(self):
|
||||
"""create aliases for SECoP devices
|
||||
@ -140,9 +151,11 @@ class FrappyConfig(Device):
|
||||
devset = set()
|
||||
newenv = {e: None for e in session.experiment.envlist} # use dict instead of set because of order
|
||||
drivables = {}
|
||||
frappy_aliases = session.get('frappy_aliases')
|
||||
for meaning in self.meanings:
|
||||
info = getattr(self, meaning)
|
||||
aliasname = info['alias']
|
||||
aliasname = getattr(frappy_aliases, meaning, None)
|
||||
additional = info.get('alias')
|
||||
envlistflag = info.get('envlist', True)
|
||||
aliascfg = info.get('targets', {})
|
||||
importance_list = sample_devices.get(meaning, [])
|
||||
@ -167,7 +180,7 @@ class FrappyConfig(Device):
|
||||
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'
|
||||
session.dynamic_devices[aliasname] = 'frappy_alias'
|
||||
aliasdev = session.createDevice(aliasname, recreate=True, explicit=True)
|
||||
aliasdev.alias = devname
|
||||
if devname not in devset and envlistflag:
|
||||
@ -177,18 +190,14 @@ class FrappyConfig(Device):
|
||||
else:
|
||||
newenv.pop(aliasname, None)
|
||||
break
|
||||
if additional:
|
||||
session.configured_devices[additional] = devcfg.copy()
|
||||
session.dynamic_devices[additional] = 'frappy'
|
||||
aliasdev = session.createDevice(additional, recreate=True, explicit=True)
|
||||
aliasdev.alias = devname
|
||||
else:
|
||||
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
|
||||
newenv.pop(additional, None)
|
||||
|
||||
applyAliasConfig() # for other aliases
|
||||
if set(newenv) != set(session.experiment.envlist):
|
||||
|
Reference in New Issue
Block a user