FrappyNode: do not rely on cached cfg

on startup and when disconnected, the main value of FrappyNode
gets trys to get its value from running processes.
This commit is contained in:
2023-09-14 08:43:04 +02:00
parent 47c1793b61
commit b9f54dee4a

View File

@ -148,23 +148,20 @@ class FrappyConfig(Device):
createThread('frappy change notification', self.handle_notifications)
def handle_notifications(self):
try:
controller = session.daemon_device._controller
while True:
self._trigger_change.wait()
self._trigger_change.clear()
time.sleep(2)
if self._trigger_change.is_set():
continue
try:
current = self.check_or_start()
if current != self._previous_shown:
cmd = 'frappy_changed()'
controller.new_request(ScriptRequest(cmd, None, User('guest', USER)))
except RequestError as e:
session.log.error(f'can not queue request {e!r}')
except Exception as e:
print(e)
controller = session.daemon_device._controller
while True:
self._trigger_change.wait()
self._trigger_change.clear()
time.sleep(2)
if self._trigger_change.is_set():
continue
try:
current = self.check_or_start()
if current != self._previous_shown:
cmd = 'frappy_changed()'
controller.new_request(ScriptRequest(cmd, None, User('guest', USER)))
except RequestError as e:
session.log.error(f'can not queue request {e!r}')
def check_or_start(self, main=None, stick=None, addons=None):
"""start/stop frappy servers
@ -412,18 +409,7 @@ class FrappyNode(SecNodeDevice, Moveable):
super().doInit(mode)
def doRead(self, maxage=0):
try:
if self._secnode.online:
return self._secnode.descriptive_data['_frappy_config']
except (KeyError, AttributeError):
pass
if self._cfgvalue is None:
sea_cfg = FrappyManager().cfg_from_sea(config.instrument).get(self.service)
if sea_cfg:
return sea_cfg
if self._cache:
self._cfgvalue = self._cache.get(self, 'value')
return self._cfgvalue
return self._cfgvalue or ''
def createDevices(self):
cfg = self.read()
@ -441,7 +427,12 @@ class FrappyNode(SecNodeDevice, Moveable):
def nodeStateChange(self, online, state):
super().nodeStateChange(online, state)
if not online:
if online:
if self._cfgvalue is None:
self._cfgvalue = FrappyManager().get_cfg(config.instrument, self.service)
if not self._cfgvalue:
self._cfgvalue = self.uri
else:
self._cfgvalue = None
cfg = self.read()
if self._lastcfg != cfg:
@ -472,10 +463,8 @@ class FrappyNode(SecNodeDevice, Moveable):
ins = config.instrument
fm = FrappyManager()
info = fm.get_ins_info(ins)
cfginfo = {}
fm.get_procs(cfginfo=cfginfo)
running_cfg = cfginfo.get((ins, self.service), '')
if not forced:
running_cfg = fm.get_cfg(ins, self.service) or ''
if not forced or cfg is None:
sea_cfg = fm.cfg_from_sea(ins).get(self.service, '')
if '?' in sea_cfg:
if sea_cfg == '?':
@ -486,9 +475,15 @@ class FrappyNode(SecNodeDevice, Moveable):
elif sea_cfg:
cfg = sea_cfg
elif running_cfg:
self._cfgvalue = running_cfg
return
if cfg == running_cfg:
self._cfgvalue = running_cfg
return
if cfg is None:
if forced:
self.log.error('can not restart - previous cfg unknown')
return
if cfg != running_cfg:
self.disable()
if running_cfg: