diff --git a/devices.py b/devices.py index 39c295a..5f5d5f7 100644 --- a/devices.py +++ b/devices.py @@ -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: