From 8575a2f785119c0f7c29e5fdf431b3ebb6a45668 Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Thu, 30 Oct 2025 08:01:26 +0100 Subject: [PATCH] improve error messages when attached modules fail on startup fix to align local frappy branch wip with gerrit repo Change-Id: Iafbd8c5e4b67209046c252f2cafa69dcb6e2bbcb --- frappy/modulebase.py | 4 ---- frappy/secnode.py | 2 +- frappy/server.py | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/frappy/modulebase.py b/frappy/modulebase.py index db0b1a76..b9487df5 100644 --- a/frappy/modulebase.py +++ b/frappy/modulebase.py @@ -613,7 +613,6 @@ class Module(HasAccessibles): """ # we do not need self.errors any longer. should we delete it? # del self.errors - self.polledModules = [m for m in self.polledModules if not m._initfailed] if self.polledModules: self.__poller = mkthread(self.__pollThread, self.polledModules, start_events.get_trigger()) self.startModuleDone = True @@ -726,9 +725,6 @@ class Module(HasAccessibles): if rfunc.poll: pinfo.polled_parameters.append((mobj, rfunc, pobj)) try: - for mobj in list(modules): - if mobj._initfailed: - modules.remove(mobj) for mobj in modules: # TODO when needed: here we might add a call to a method :meth:`beforeWriteInit` mobj.writeInitParams() diff --git a/frappy/secnode.py b/frappy/secnode.py index 9b00775e..74b041f9 100644 --- a/frappy/secnode.py +++ b/frappy/secnode.py @@ -97,7 +97,7 @@ class SecNode: self.traceback_counter += 1 self.errors.append(f'error initializing {modulename}: {e!r}') modobj._initfailed = True - raise InitFailed('try to access erroneous module') + raise InitFailed('try to access erroneous module') from e modobj._isinitialized = True self.log.debug('initialized module %r', modulename) return modobj diff --git a/frappy/server.py b/frappy/server.py index 15a13e07..14ce0241 100644 --- a/frappy/server.py +++ b/frappy/server.py @@ -308,7 +308,7 @@ class Server: # all errors from initialization process errors = self.secnode.errors - if not self._testonly: + if not self._testonly and not errors: # do not start pollers when we have errors already start_events = MultiEvent(default_timeout=30) for modname, modobj in self.secnode.modules.items(): # startModule must return either a timeout value or None (default 30 sec)