allow missing frappy_config, stick_rotation_alias
This commit is contained in:
35
devices.py
35
devices.py
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user