From e5c99c36e742d4dc67ff9fdf4bae03597b72c4d5 Mon Sep 17 00:00:00 2001 From: Alexander Zaft Date: Fri, 3 Mar 2023 14:53:30 +0100 Subject: [PATCH] Fix Node adding logic * Unify _addNode calls * introduce addNode for error catching * set parent for Nodewidget only after successful creation (otherwise this results in Bug #4694 Change-Id: I82a5d867b45e766cd7dd33e7144e57a9f66a73b3 Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/30572 Tested-by: Jenkins Automated Tests Reviewed-by: Georg Brandl Reviewed-by: Alexander Zaft --- frappy/gui/mainwindow.py | 44 +++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/frappy/gui/mainwindow.py b/frappy/gui/mainwindow.py index 98939b5..a57863a 100644 --- a/frappy/gui/mainwindow.py +++ b/frappy/gui/mainwindow.py @@ -99,17 +99,11 @@ class MainWindow(QMainWindow): self._nodeWidgets = {} # add localhost (if available) and SEC nodes given as arguments - for host in hosts: - try: - self.log.info('Trying to connect to %s', host) - self._addNode(host) - except Exception as e: - # TODO: make this nicer than dumping to console - self.log.error('error in addNode: %r', e) + self.addNodes(hosts) if not self._nodes: greeter = Greeter(self) - greeter.addnodes.connect(self._addNodes) + greeter.addnodes.connect(self.addNodes) greeter.recentClearBtn.connect(self.on_actionClear_triggered) self.recentNodesChanged.connect(greeter.loadRecent) self.tab.addPanel(greeter, 'Welcome') @@ -147,12 +141,7 @@ class MainWindow(QMainWindow): if not ok: return - - try: - self._addNode(host) - except Exception as e: - QMessageBox.critical(self.parent(), - 'Connecting to %s failed!' % host, str(e)) + self.addNode(host) @pyqtSlot() def on_actionReconnect_triggered(self): @@ -171,23 +160,28 @@ class MainWindow(QMainWindow): # if level in ['user', 'admin', 'expert']: # print('visibility Level now:', level) - def _addNodes(self, hosts): + def addNodes(self, hosts): for host in hosts: - try: - self.log.info('Trying to connect to %s', host) - self._addNode(host) - except Exception as e: - self.log.error('error in addNode: %r', e) - QMessageBox.critical(self.parent(), - 'Connecting to %s failed!' % host, str(e)) + self.addNode(host) + + def addNode(self, host): + try: + self.log.info('Trying to connect to %s', host) + self._addNode(host) + except Exception as e: + self.log.error('error in addNode: %r', e) + QMessageBox.critical(self.parent(), + 'Connecting to %s failed!' % host, str(e)) def _addNode(self, host): # create client node = QSECNode(host, self.log, parent=self) + nodeWidget = NodeWidget(node) + nodeWidget.setParent(self) + + # Node and NodeWidget created without error nodename = node.nodename self._nodes[nodename] = node - - nodeWidget = NodeWidget(node, self) self.tab.addTab(nodeWidget, node.equipmentId) self._nodeWidgets[nodename] = nodeWidget self.tab.setCurrentWidget(nodeWidget) @@ -214,7 +208,7 @@ class MainWindow(QMainWindow): self.recentNodeActions = [] for host in recent: a = QAction(host) - a.triggered.connect(lambda _t, h=host: self._addNode(h)) + a.triggered.connect(lambda _t, h=host: self.addNode(h)) self.recentNodeActions.append(a) menu.insertActions(action, self.recentNodeActions)