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:
parent
4a0796a1bd
commit
06551b17e2
@ -257,8 +257,8 @@ class Module(HasAccessibles):
|
|||||||
try:
|
try:
|
||||||
self.setProperty(key, value)
|
self.setProperty(key, value)
|
||||||
except BadValueError:
|
except BadValueError:
|
||||||
errors.append('module %s, %s: value %r does not match %r!' %
|
errors.append('%s: value %r does not match %r!' %
|
||||||
(name, key, value, self.propertyDict[key].datatype))
|
(key, value, self.propertyDict[key].datatype))
|
||||||
|
|
||||||
# 3) set automatic properties
|
# 3) set automatic properties
|
||||||
mycls = self.__class__
|
mycls = self.__class__
|
||||||
@ -317,21 +317,21 @@ class Module(HasAccessibles):
|
|||||||
try:
|
try:
|
||||||
paramobj.setProperty(propname, propvalue)
|
paramobj.setProperty(propname, propvalue)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
errors.append('module %s: %s.%s does not exist' %
|
errors.append("'%s.%s' does not exist" %
|
||||||
(self.name, paramname, propname))
|
(paramname, propname))
|
||||||
except BadValueError as e:
|
except BadValueError as e:
|
||||||
errors.append('module %s: %s.%s: %s' %
|
errors.append('%s.%s: %s' %
|
||||||
(self.name, paramname, propname, str(e)))
|
(paramname, propname, str(e)))
|
||||||
else:
|
else:
|
||||||
errors.append('module %s: %s not found' % (self.name, paramname))
|
errors.append('%r not found' % paramname)
|
||||||
|
|
||||||
# 3) check config for problems:
|
# 3) check config for problems:
|
||||||
# only accept remaining config items specified in parameters
|
# only accept remaining config items specified in parameters
|
||||||
bad = [k for k in cfgdict if k not in self.parameters]
|
bad = [k for k in cfgdict if k not in self.parameters]
|
||||||
if bad:
|
if bad:
|
||||||
errors.append(
|
errors.append(
|
||||||
'module %s: %s does not exist (use one of %s)' %
|
'%s does not exist (use one of %s)' %
|
||||||
(self.name, ', '.join(bad), ', '.join(list(self.parameters) +
|
(', '.join(bad), ', '.join(list(self.parameters) +
|
||||||
list(self.propertyDict))))
|
list(self.propertyDict))))
|
||||||
|
|
||||||
# 4) complain if a Parameter entry has no default value and
|
# 4) complain if a Parameter entry has no default value and
|
||||||
@ -349,13 +349,12 @@ class Module(HasAccessibles):
|
|||||||
pobj.value = pobj.datatype(cfgdict[pname])
|
pobj.value = pobj.datatype(cfgdict[pname])
|
||||||
self.writeDict[pname] = pobj.value
|
self.writeDict[pname] = pobj.value
|
||||||
except BadValueError as e:
|
except BadValueError as e:
|
||||||
errors.append('module %s, parameter %s: %s' % (name, pname, e))
|
errors.append('%s: %s' % (pname, e))
|
||||||
else:
|
else:
|
||||||
if pobj.default is None:
|
if pobj.default is None:
|
||||||
if pobj.needscfg:
|
if pobj.needscfg:
|
||||||
errors.append('module %s, parameter %s has no default '
|
errors.append('%r has no default '
|
||||||
'value and was not given in config!' %
|
'value and was not given in config!' % pname)
|
||||||
(self.name, pname))
|
|
||||||
# we do not want to call the setter for this parameter for now,
|
# we do not want to call the setter for this parameter for now,
|
||||||
# this should happen on the first read
|
# this should happen on the first read
|
||||||
pobj.readerror = ConfigError('not initialized')
|
pobj.readerror = ConfigError('not initialized')
|
||||||
@ -383,7 +382,7 @@ class Module(HasAccessibles):
|
|||||||
try:
|
try:
|
||||||
# this checks also for the proper datatype
|
# this checks also for the proper datatype
|
||||||
# note: this will NOT call write_* methods!
|
# 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)
|
setattr(self, k, v)
|
||||||
cfgdict.pop(k)
|
cfgdict.pop(k)
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
@ -401,14 +400,14 @@ class Module(HasAccessibles):
|
|||||||
try:
|
try:
|
||||||
self.checkProperties()
|
self.checkProperties()
|
||||||
except ConfigError as e:
|
except ConfigError as e:
|
||||||
errors.append('module %s: %s' % (name, e))
|
errors.append(str(e))
|
||||||
for pname, p in self.parameters.items():
|
for pname, p in self.parameters.items():
|
||||||
try:
|
try:
|
||||||
p.checkProperties()
|
p.checkProperties()
|
||||||
except ConfigError:
|
except ConfigError:
|
||||||
errors.append('module %s, parameter %s: %s' % (name, pname, e))
|
errors.append('%s: %s' % (pname, e))
|
||||||
if errors:
|
if errors:
|
||||||
raise ConfigError('\n'.join(errors))
|
raise ConfigError(errors)
|
||||||
|
|
||||||
# helper cfg-editor
|
# helper cfg-editor
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
@ -522,10 +521,12 @@ class Module(HasAccessibles):
|
|||||||
with proper error handling
|
with proper error handling
|
||||||
"""
|
"""
|
||||||
for pname in list(self.writeDict):
|
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:
|
try:
|
||||||
self.log.debug('initialize parameter %s', pname)
|
self.log.debug('initialize parameter %s', pname)
|
||||||
getattr(self, 'write_' + pname)(self.writeDict.pop(pname))
|
getattr(self, 'write_' + pname)(value)
|
||||||
except SilentError:
|
except SilentError:
|
||||||
pass
|
pass
|
||||||
except SECoPError as e:
|
except SECoPError as e:
|
||||||
|
@ -245,12 +245,8 @@ class Server:
|
|||||||
continue
|
continue
|
||||||
cls = get_class(classname)
|
cls = get_class(classname)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if pymodule is None:
|
if str(e) == 'no such class':
|
||||||
if str(e) == 'no such class':
|
errors.append('%s not found' % classname)
|
||||||
errors.append('%s not found' % classname)
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
errors.append(repr(e))
|
|
||||||
else:
|
else:
|
||||||
failed.add(pymodule)
|
failed.add(pymodule)
|
||||||
failure_traceback = traceback.format_exc()
|
failure_traceback = traceback.format_exc()
|
||||||
@ -262,9 +258,13 @@ class Server:
|
|||||||
if opts:
|
if opts:
|
||||||
errors.append(self.unknown_options(cls, opts))
|
errors.append(self.unknown_options(cls, opts))
|
||||||
self.modules[modname] = modobj
|
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()
|
failure_traceback = traceback.format_exc()
|
||||||
errors.append('error creating %s: %r' % (modname, e))
|
errors.append('error creating %s' % modname)
|
||||||
|
|
||||||
poll_table = dict()
|
poll_table = dict()
|
||||||
# all objs created, now start them up and interconnect
|
# all objs created, now start them up and interconnect
|
||||||
|
Loading…
x
Reference in New Issue
Block a user