allow missing frappy_config, stick_rotation_alias

This commit is contained in:
2022-05-05 17:02:36 +02:00
parent 9be486f627
commit afaea89ea6
2 changed files with 38 additions and 8 deletions

View File

@@ -31,7 +31,7 @@ import os
from os.path import expanduser
from nicos import config, session
from nicos.core import Override, Param, Moveable, status
from nicos.core import Override, Param, Moveable, status, UsageError
from nicos.devices.secop import SecNodeDevice
from nicos.core import Device, anytype, listof
from nicos.utils.comparestrings import compare
@@ -87,12 +87,15 @@ class FrappyConfig(Device):
'rotation_z': Param(
'config for sample rotation', type=anytype,
default={'alias': 'stickrot', 'envlist': False}),
'stick_rotation_alias': Param(
'alias to assign stick rotation', type=str, settable=True, default=''),
'nodes': Param(
'list of names of potential SEC nodes', type=listof(str), default=[]),
}
meanings = list(parameters)
meanings.remove('nodes')
meanings.remove('assign_stick_rotation')
def remove_aliases(self):
for meaning in self.meanings:
@@ -107,12 +110,25 @@ class FrappyConfig(Device):
session.configured_devices.pop(aliasname, None)
session.dynamic_devices.pop(aliasname, None)
def get_se_aliases(self):
result = {}
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:
result[aliasname] = aliasdev
def set_envlist(self):
"""create aliases for SECoP devices
depending on their meaning
"""
self.remove_aliases()
previous_aliases = self.get_se_aliases()
# self.remove_aliases()
nodedevs = filter(None, [session.devices.get(devname) for devname in self.nodes])
sample_devices = {}
@@ -157,11 +173,15 @@ class FrappyConfig(Device):
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 = previous_aliases.pop(aliasname, None)
if aliasdev:
session.log.debug('change alias %r -> %r', aliasname, devname)
else:
session.log.debug('create alias %r -> %r', aliasname, devname)
devcfg = ('nicos.core.DeviceAlias', {})
aliasdev = session.createDevice(aliasname, recreate=True, explicit=True)
aliasdev.alias = devname
aliasname = aliasnames[0]
if devname not in devset and envlistflag:
@@ -175,6 +195,11 @@ class FrappyConfig(Device):
for aliasname in aliasnames:
newenv.pop(aliasname, None)
for aliasname in previous_aliases:
session.destroyDevice(aliasname)
session.configured_devices.pop(aliasname, None)
session.dynamic_devices.pop(aliasname, None)
applyAliasConfig() # for other aliases
if set(newenv) != set(session.experiment.envlist):
session.experiment.setEnvironment(list(newenv))