allow missing frappy_config, stick_rotation_alias
This commit is contained in:
11
commands.py
11
commands.py
@ -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()
|
||||||
frappy_config.set_envlist()
|
if frappy_config:
|
||||||
|
frappy_config.set_envlist()
|
||||||
|
else:
|
||||||
|
applyAliasConfig()
|
||||||
if startnode and cfg == '':
|
if startnode and cfg == '':
|
||||||
startnode.disable()
|
startnode.disable()
|
||||||
return all_cfg
|
return all_cfg
|
||||||
|
35
devices.py
35
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, 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,11 +173,15 @@ 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 = 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
|
aliasdev.alias = devname
|
||||||
aliasname = aliasnames[0]
|
aliasname = aliasnames[0]
|
||||||
if devname not in devset and envlistflag:
|
if devname not in devset and envlistflag:
|
||||||
@ -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))
|
||||||
|
Reference in New Issue
Block a user