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

@ -30,6 +30,7 @@ from nicos.utils import printTable
from nicos.commands import helparglist, usercommand
from nicos.commands.basic import AddSetup, CreateAllDevices, CreateDevice
from nicos.devices.secop import get_attaching_devices
from nicos_sinq.frappy_sinq.devices import applyAliasConfig
home = expanduser('~')
if home not in sys.path:
@ -68,8 +69,9 @@ def all_info(all_cfg):
def frappy_start(service, cfg=None):
if service not in SERVICES:
raise ValueError('unknown service %s' % service)
frappy_config = session.devices['frappy_config']
frappy_config.remove_aliases()
frappy_config = session.devices.get('frappy_config')
# if frappy_config():
# frappy_config.remove_aliases()
if cfg == '':
seaconn = session.devices.get('seaconn')
if seaconn and seaconn._attached_secnode:
@ -108,7 +110,10 @@ def frappy_start(service, cfg=None):
if cfg is not None:
cleanup_defunct()
CreateAllDevices()
frappy_config.set_envlist()
if frappy_config:
frappy_config.set_envlist()
else:
applyAliasConfig()
if startnode and cfg == '':
startnode.disable()
return all_cfg

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))