improve more errors during startup

errors from a module a combined with a header and intended
details

Change-Id: I4be7bc2f8455fb0e3c9346f3bb23ac88e7589604
This commit is contained in:
zolliker 2021-04-27 15:56:19 +02:00
parent 4a0796a1bd
commit 06551b17e2
2 changed files with 28 additions and 27 deletions

View File

@ -257,8 +257,8 @@ class Module(HasAccessibles):
try:
self.setProperty(key, value)
except BadValueError:
errors.append('module %s, %s: value %r does not match %r!' %
(name, key, value, self.propertyDict[key].datatype))
errors.append('%s: value %r does not match %r!' %
(key, value, self.propertyDict[key].datatype))
# 3) set automatic properties
mycls = self.__class__
@ -317,21 +317,21 @@ class Module(HasAccessibles):
try:
paramobj.setProperty(propname, propvalue)
except KeyError:
errors.append('module %s: %s.%s does not exist' %
(self.name, paramname, propname))
errors.append("'%s.%s' does not exist" %
(paramname, propname))
except BadValueError as e:
errors.append('module %s: %s.%s: %s' %
(self.name, paramname, propname, str(e)))
errors.append('%s.%s: %s' %
(paramname, propname, str(e)))
else:
errors.append('module %s: %s not found' % (self.name, paramname))
errors.append('%r not found' % paramname)
# 3) check config for problems:
# only accept remaining config items specified in parameters
bad = [k for k in cfgdict if k not in self.parameters]
if bad:
errors.append(
'module %s: %s does not exist (use one of %s)' %
(self.name, ', '.join(bad), ', '.join(list(self.parameters) +
'%s does not exist (use one of %s)' %
(', '.join(bad), ', '.join(list(self.parameters) +
list(self.propertyDict))))
# 4) complain if a Parameter entry has no default value and
@ -349,13 +349,12 @@ class Module(HasAccessibles):
pobj.value = pobj.datatype(cfgdict[pname])
self.writeDict[pname] = pobj.value
except BadValueError as e:
errors.append('module %s, parameter %s: %s' % (name, pname, e))
errors.append('%s: %s' % (pname, e))
else:
if pobj.default is None:
if pobj.needscfg:
errors.append('module %s, parameter %s has no default '
'value and was not given in config!' %
(self.name, pname))
errors.append('%r has no default '
'value and was not given in config!' % pname)
# we do not want to call the setter for this parameter for now,
# this should happen on the first read
pobj.readerror = ConfigError('not initialized')
@ -383,7 +382,7 @@ class Module(HasAccessibles):
try:
# this checks also for the proper datatype
# note: this will NOT call write_* methods!
if hasattr(self, k):
if k in self.parameters or k in self.propertyDict:
setattr(self, k, v)
cfgdict.pop(k)
except (ValueError, TypeError):
@ -401,14 +400,14 @@ class Module(HasAccessibles):
try:
self.checkProperties()
except ConfigError as e:
errors.append('module %s: %s' % (name, e))
errors.append(str(e))
for pname, p in self.parameters.items():
try:
p.checkProperties()
except ConfigError:
errors.append('module %s, parameter %s: %s' % (name, pname, e))
errors.append('%s: %s' % (pname, e))
if errors:
raise ConfigError('\n'.join(errors))
raise ConfigError(errors)
# helper cfg-editor
def __iter__(self):
@ -522,10 +521,12 @@ class Module(HasAccessibles):
with proper error handling
"""
for pname in list(self.writeDict):
if pname in self.writeDict: # this might not be true with handlers
value = self.writeDict.pop(pname, Done)
# in the mean time, a poller or handler might already have done it
if value is not Done:
try:
self.log.debug('initialize parameter %s', pname)
getattr(self, 'write_' + pname)(self.writeDict.pop(pname))
getattr(self, 'write_' + pname)(value)
except SilentError:
pass
except SECoPError as e:

View File

@ -245,12 +245,8 @@ class Server:
continue
cls = get_class(classname)
except Exception as e:
if pymodule is None:
if str(e) == 'no such class':
errors.append('%s not found' % classname)
else:
raise
errors.append(repr(e))
if str(e) == 'no such class':
errors.append('%s not found' % classname)
else:
failed.add(pymodule)
failure_traceback = traceback.format_exc()
@ -262,9 +258,13 @@ class Server:
if opts:
errors.append(self.unknown_options(cls, opts))
self.modules[modname] = modobj
except Exception as e:
except ConfigError as e:
errors.append('error creating module %s:' % modname)
for errtxt in e.args[0]:
errors.append(' ' + errtxt)
except Exception:
failure_traceback = traceback.format_exc()
errors.append('error creating %s: %r' % (modname, e))
errors.append('error creating %s' % modname)
poll_table = dict()
# all objs created, now start them up and interconnect