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 <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Georg Brandl <g.brandl@fz-juelich.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
This commit is contained in:
Alexander Zaft 2023-03-03 14:53:30 +01:00 committed by Markus Zolliker
parent bb0619f212
commit e5c99c36e7

View File

@ -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,8 +160,11 @@ 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:
self.addNode(host)
def addNode(self, host):
try:
self.log.info('Trying to connect to %s', host)
self._addNode(host)
@ -184,10 +176,12 @@ class MainWindow(QMainWindow):
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)