improved code for envlist modification
previous matching devices are removed, also when the previous was an alias pointing to the same device
This commit is contained in:
38
devices.py
38
devices.py
@ -31,7 +31,7 @@ import os
|
|||||||
from os.path import expanduser
|
from os.path import expanduser
|
||||||
|
|
||||||
from nicos import config, session
|
from nicos import config, session
|
||||||
from nicos.core import Override, Param, Moveable, status
|
from nicos.core import Override, Param, Moveable, status, DeviceAlias
|
||||||
from nicos.devices.secop import SecNodeDevice
|
from nicos.devices.secop import SecNodeDevice
|
||||||
from nicos.core import Device, anytype, listof
|
from nicos.core import Device, anytype, listof
|
||||||
from nicos.utils.comparestrings import compare
|
from nicos.utils.comparestrings import compare
|
||||||
@ -133,8 +133,13 @@ class FrappyConfig(Device):
|
|||||||
meaning_name, importance = meaning
|
meaning_name, importance = meaning
|
||||||
sample_devices.setdefault(meaning_name, []).append((importance, devname))
|
sample_devices.setdefault(meaning_name, []).append((importance, devname))
|
||||||
|
|
||||||
devset = set()
|
envlist = list(session.experiment.envlist)
|
||||||
newenv = {e: 1 for e in session.experiment.envlist} # use dict instead of set because of order
|
prev_env_alias = {} # dict [devname] of aliasname of previous aliases in envlist
|
||||||
|
for devname in envlist:
|
||||||
|
dev = session.device.get(devname)
|
||||||
|
if isinstance(dev, DeviceAlias):
|
||||||
|
prev_env_alias[devname] = dev.alias
|
||||||
|
newenv = {}
|
||||||
for meaning in self.meanings:
|
for meaning in self.meanings:
|
||||||
info = getattr(self, meaning)
|
info = getattr(self, meaning)
|
||||||
aliasnames = info.get('alias')
|
aliasnames = info.get('alias')
|
||||||
@ -162,20 +167,21 @@ class FrappyConfig(Device):
|
|||||||
session.log.debug('create alias %r -> %r', aliasname, devname)
|
session.log.debug('create alias %r -> %r', aliasname, devname)
|
||||||
aliasdev = session.createDevice(aliasname, recreate=True, explicit=True)
|
aliasdev = session.createDevice(aliasname, recreate=True, explicit=True)
|
||||||
aliasdev.alias = devname
|
aliasdev.alias = devname
|
||||||
|
# only the first item of aliasnames is added to the envlist
|
||||||
aliasname = aliasnames[0]
|
aliasname = aliasnames[0]
|
||||||
if devname not in devset and info.get('envlist', True):
|
if devname in envlist:
|
||||||
# take only the first one
|
envlist.remove(devname)
|
||||||
|
else:
|
||||||
|
prev_alias = prev_env_alias[devname]
|
||||||
|
if prev_alias in envlist:
|
||||||
|
envlist.remove(prev_alias)
|
||||||
|
if devname not in newenv and info.get('envlist', True):
|
||||||
# example: when 'temperature' and 'temperature_regulation' are the
|
# example: when 'temperature' and 'temperature_regulation' are the
|
||||||
# same device, it is not added twice
|
# same device, the first one is kept
|
||||||
devset.add(devname)
|
newenv[devname] = aliasname
|
||||||
newenv[aliasname] = 1
|
|
||||||
elif aliasname in newenv:
|
|
||||||
newenv.pop(aliasname, None)
|
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
for aliasname in aliasnames:
|
envlist = [k for k in envlist if k not in aliasnames]
|
||||||
if aliasname in newenv:
|
|
||||||
newenv.pop(aliasname, None)
|
|
||||||
|
|
||||||
for aliasname in previous_aliases:
|
for aliasname in previous_aliases:
|
||||||
session.destroyDevice(aliasname)
|
session.destroyDevice(aliasname)
|
||||||
@ -183,8 +189,10 @@ class FrappyConfig(Device):
|
|||||||
session.dynamic_devices.pop(aliasname, None)
|
session.dynamic_devices.pop(aliasname, None)
|
||||||
|
|
||||||
applyAliasConfig() # for other aliases
|
applyAliasConfig() # for other aliases
|
||||||
if set(newenv) != set(session.experiment.envlist):
|
|
||||||
session.experiment.setEnvironment(list(newenv))
|
envlist.extend(newenv.values())
|
||||||
|
if set(envlist) != set(session.experiment.envlist):
|
||||||
|
session.experiment.setEnvironment(envlist)
|
||||||
session.log.info('changed environment to: %s', ', '.join(session.experiment.envlist))
|
session.log.info('changed environment to: %s', ', '.join(session.experiment.envlist))
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user