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

View File

@ -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, UsageError
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
@ -87,12 +87,15 @@ class FrappyConfig(Device):
'rotation_z': Param( 'rotation_z': Param(
'config for sample rotation', type=anytype, 'config for sample rotation', type=anytype,
default={'alias': 'stickrot', 'envlist': False}), default={'alias': 'stickrot', 'envlist': False}),
'stick_rotation_alias': Param(
'alias to assign stick rotation', type=str, settable=True, default=''),
'nodes': Param( 'nodes': Param(
'list of names of potential SEC nodes', type=listof(str), default=[]), 'list of names of potential SEC nodes', type=listof(str), default=[]),
} }
meanings = list(parameters) meanings = list(parameters)
meanings.remove('nodes') meanings.remove('nodes')
meanings.remove('assign_stick_rotation')
def remove_aliases(self): def remove_aliases(self):
for meaning in self.meanings: for meaning in self.meanings:
@ -107,12 +110,25 @@ class FrappyConfig(Device):
session.configured_devices.pop(aliasname, None) session.configured_devices.pop(aliasname, None)
session.dynamic_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): def set_envlist(self):
"""create aliases for SECoP devices """create aliases for SECoP devices
depending on their meaning 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]) nodedevs = filter(None, [session.devices.get(devname) for devname in self.nodes])
sample_devices = {} sample_devices = {}
@ -157,10 +173,14 @@ class FrappyConfig(Device):
continue continue
if dev: if dev:
for aliasname in aliasnames: 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.configured_devices[aliasname] = devcfg
session.dynamic_devices[aliasname] = 'frappy' session.dynamic_devices[aliasname] = 'frappy'
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 = session.createDevice(aliasname, recreate=True, explicit=True)
aliasdev.alias = devname aliasdev.alias = devname
aliasname = aliasnames[0] aliasname = aliasnames[0]
@ -175,6 +195,11 @@ class FrappyConfig(Device):
for aliasname in aliasnames: for aliasname in aliasnames:
newenv.pop(aliasname, None) 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 applyAliasConfig() # for other aliases
if set(newenv) != set(session.experiment.envlist): if set(newenv) != set(session.experiment.envlist):
session.experiment.setEnvironment(list(newenv)) session.experiment.setEnvironment(list(newenv))