diff --git a/frappy/modulebase.py b/frappy/modulebase.py index a6f17eba..27277b28 100644 --- a/frappy/modulebase.py +++ b/frappy/modulebase.py @@ -420,8 +420,8 @@ class Module(HasAccessibles): aobj.checkProperties() except (ConfigError, ProgrammingError) as e: self.errors.append(f'{aname}: {e}') - if self.errors: - raise ConfigError(self.errors) + # if self.errors: + # raise ConfigError(self.errors) # helper cfg-editor def __iter__(self): diff --git a/frappy/secnode.py b/frappy/secnode.py index 9db5a5b9..bac73344 100644 --- a/frappy/secnode.py +++ b/frappy/secnode.py @@ -51,7 +51,7 @@ class SecNode: self.log = logger self.srv = srv # set of modules that failed creation - self.failed_modules = set() + # self.failed_modules = set() # list of errors that occured during initialization self.errors = [] self.traceback_counter = 0 @@ -80,24 +80,22 @@ class SecNode: # also call earlyInit on the modules self.log.debug('initializing module %r', modulename) - try: - modobj.earlyInit() - if not modobj.earlyInitDone: - self.errors.append(f'{modobj.earlyInit.__qualname__} was not ' - f'called, probably missing super call') - modobj.initModule() - if not modobj.initModuleDone: - self.errors.append(f'{modobj.initModule.__qualname__} was not ' - f'called, probably missing super call') - except InitFailed: - raise - except Exception as e: - if self.traceback_counter == 0: - self.log.exception(traceback.format_exc()) - self.traceback_counter += 1 - self.errors.append(f'error initializing {modulename}: {e!r}') - modobj._initfailed = True - raise InitFailed('try to access erroneous module') from e + # try: + modobj.earlyInit() + if not modobj.earlyInitDone: + self.errors.append(f'{modobj.earlyInit.__qualname__} was not ' + f'called, probably missing super call') + modobj.initModule() + if not modobj.initModuleDone: + self.errors.append(f'{modobj.initModule.__qualname__} was not ' + f'called, probably missing super call') + # except Exception as e: + # if self.traceback_counter == 0: + # self.log.exception(traceback.format_exc()) + # self.traceback_counter += 1 + # self.errors.append(f'error initializing {modulename}: {e!r}') + # modobj._initfailed = True + # raise InitFailed('try to access erroneous module') from e modobj._isinitialized = True self.log.info('initialized module %r', modulename) return modobj @@ -109,11 +107,8 @@ class SecNode: When creating a new module, srv.module_config is accessed to get the modules configuration. """ - modobj = self.modules.get(modulename) - if modobj: - if modobj._initfailed: - raise InitFailed('try to access erroneous module') - return modobj + if modulename in self.modules: + return self.modules[modulename] if modulename in list(self.modules.values()): # it's actually already the module object return modulename @@ -126,20 +121,20 @@ class SecNode: raise NoSuchModuleError(f'Module {modulename!r} does not exist on ' f'this SEC-Node!') opts = dict(opts) - pymodule = None + # pymodule = None + classname = opts.pop('cls') try: # pylint: disable=no-else-return - classname = opts.pop('cls') if isinstance(classname, str): - pymodule = classname.rpartition('.')[0] - if pymodule in self.failed_modules: - # creation has failed already once, do not try again - return None + # pymodule = classname.rpartition('.')[0] + # if pymodule in self.failed_modules: + # # creation has failed already once, do not try again + # return None cls = get_class(classname) else: - pymodule = classname.__module__ - if pymodule in self.failed_modules: - # creation has failed already once, do not try again - return None + # pymodule = classname.__module__ + # if pymodule in self.failed_modules: + # # creation has failed already once, do not try again + # return None cls = classname if not issubclass(cls, Module): self.errors.append(f'{cls.__name__} is not a Module') @@ -147,30 +142,14 @@ class SecNode: except Exception as e: if str(e) == 'no such class': self.errors.append(f'{classname} not found') - else: - self.failed_modules.add(pymodule) - if self.traceback_counter == 0: - self.log.exception(traceback.format_exc()) - self.traceback_counter += 1 - self.errors.append(f'error importing {classname}') - return None + return None + raise else: - try: - modobj = cls(modulename, self.log.parent.getChild(modulename), - opts, self.srv) - except ConfigError as e: - self.errors.append(f'error creating module {modulename}:') - for errtxt in e.args[0] if isinstance(e.args[0], list) else [e.args[0]]: - self.errors.append(' ' + errtxt) - modobj = None - except Exception as e: - if self.traceback_counter == 0: - self.log.exception(traceback.format_exc()) - self.traceback_counter += 1 - self.errors.append(f'error creating {modulename}') - modobj = None - if modobj: - self.add_module(modobj, modulename) + modobj = cls(modulename, self.log.parent.getChild(modulename), + opts, self.srv) + for errtxt in modobj.errors: + self.errors.append(' ' + errtxt) + self.add_module(modobj, modulename) return modobj def create_modules(self): @@ -220,11 +199,8 @@ class SecNode: modules = {} result = {'modules': modules} for modulename in list(self.modules): - try: - modobj = self.get_module(modulename) - except InitFailed: - continue - if not modobj.export: + modobj = self.get_module(modulename) + if not modobj or not modobj.export: continue # some of these need rework ! mod_desc = {'accessibles': self.export_accessibles(modobj)} diff --git a/frappy/server.py b/frappy/server.py index 14ce0241..8aaaa36c 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 and not errors: # do not start pollers when we have errors already + if not self._testonly: # 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)