warning is now a dict
This commit is contained in:
parent
a5587c91b8
commit
f040d3da61
|
@ -80,15 +80,20 @@ def test_validator_warning():
|
||||||
assert cfg.cfgimpl_get_values().has_warning() is False
|
assert cfg.cfgimpl_get_values().has_warning() is False
|
||||||
cfg.opt2 = 'val'
|
cfg.opt2 = 'val'
|
||||||
assert cfg.cfgimpl_get_values().has_warning() is True
|
assert cfg.cfgimpl_get_values().has_warning() is True
|
||||||
assert cfg.cfgimpl_get_values().get_last_warning() == 'invalid value val for option opt2: error'
|
assert cfg.cfgimpl_get_values().get_warnings() == {opt2: 'invalid value val for option opt2: error'}
|
||||||
assert cfg.cfgimpl_get_values().has_warning() is False
|
assert cfg.cfgimpl_get_values().has_warning() is False
|
||||||
cfg.opt3.append('val')
|
cfg.opt3.append('val')
|
||||||
assert cfg.cfgimpl_get_values().has_warning() is False
|
assert cfg.cfgimpl_get_values().has_warning() is False
|
||||||
cfg.opt3.append('val1')
|
cfg.opt3.append('val1')
|
||||||
assert cfg.cfgimpl_get_values().has_warning() is True
|
assert cfg.cfgimpl_get_values().has_warning() is True
|
||||||
assert cfg.cfgimpl_get_values().get_last_warning() == 'invalid value val1 for option opt3: error'
|
assert cfg.cfgimpl_get_values().get_warnings() == {opt3: 'invalid value val1 for option opt3: error'}
|
||||||
assert cfg.cfgimpl_get_values().has_warning() is False
|
assert cfg.cfgimpl_get_values().has_warning() is False
|
||||||
raises(ValueError, "cfg.opt2 = 1")
|
raises(ValueError, "cfg.opt2 = 1")
|
||||||
|
cfg.opt2 = 'val'
|
||||||
|
cfg.opt3.append('val')
|
||||||
|
assert cfg.cfgimpl_get_values().has_warning() is True
|
||||||
|
assert cfg.cfgimpl_get_values().get_warnings() == {opt2: 'invalid value val for option opt2: error', opt3: 'invalid value val1 for option opt3: error'}
|
||||||
|
assert cfg.cfgimpl_get_values().has_warning() is False
|
||||||
|
|
||||||
|
|
||||||
def test_validator_warning_master_slave():
|
def test_validator_warning_master_slave():
|
||||||
|
@ -104,13 +109,13 @@ def test_validator_warning_master_slave():
|
||||||
cfg.ip_admin_eth0.netmask_admin_eth0 = ['val1']
|
cfg.ip_admin_eth0.netmask_admin_eth0 = ['val1']
|
||||||
assert cfg.ip_admin_eth0.netmask_admin_eth0 == ['val1']
|
assert cfg.ip_admin_eth0.netmask_admin_eth0 == ['val1']
|
||||||
assert cfg.cfgimpl_get_values().has_warning() is True
|
assert cfg.cfgimpl_get_values().has_warning() is True
|
||||||
assert cfg.cfgimpl_get_values().get_last_warning() == 'invalid value val1 for option netmask_admin_eth0: error'
|
assert cfg.cfgimpl_get_values().get_warnings() == {netmask_admin_eth0: 'invalid value val1 for option netmask_admin_eth0: error'}
|
||||||
cfg.ip_admin_eth0.ip_admin_eth0 = ['val']
|
cfg.ip_admin_eth0.ip_admin_eth0 = ['val']
|
||||||
assert cfg.ip_admin_eth0.ip_admin_eth0 == ['val']
|
assert cfg.ip_admin_eth0.ip_admin_eth0 == ['val']
|
||||||
assert cfg.cfgimpl_get_values().get_last_warning() == 'invalid value val for option ip_admin_eth0: error'
|
assert cfg.cfgimpl_get_values().get_warnings() == {ip_admin_eth0: 'invalid value val for option ip_admin_eth0: error'}
|
||||||
cfg.ip_admin_eth0.ip_admin_eth0 = ['val', 'val1', 'val1']
|
cfg.ip_admin_eth0.ip_admin_eth0 = ['val', 'val1', 'val1']
|
||||||
assert cfg.cfgimpl_get_values().get_last_warning() == 'invalid value val for option ip_admin_eth0: error'
|
assert cfg.cfgimpl_get_values().get_warnings() == {ip_admin_eth0: 'invalid value val for option ip_admin_eth0: error'}
|
||||||
cfg.ip_admin_eth0.ip_admin_eth0 = ['val1', 'val', 'val1']
|
cfg.ip_admin_eth0.ip_admin_eth0 = ['val1', 'val', 'val1']
|
||||||
assert cfg.cfgimpl_get_values().get_last_warning() == 'invalid value val for option ip_admin_eth0: error'
|
assert cfg.cfgimpl_get_values().get_warnings() == {ip_admin_eth0: 'invalid value val for option ip_admin_eth0: error'}
|
||||||
cfg.ip_admin_eth0.ip_admin_eth0 = ['val1', 'val1', 'val']
|
cfg.ip_admin_eth0.ip_admin_eth0 = ['val1', 'val1', 'val']
|
||||||
assert cfg.cfgimpl_get_values().get_last_warning() == 'invalid value val for option ip_admin_eth0: error'
|
assert cfg.cfgimpl_get_values().get_warnings() == {ip_admin_eth0: 'invalid value val for option ip_admin_eth0: error'}
|
||||||
|
|
|
@ -45,6 +45,7 @@ class Values(object):
|
||||||
self.context = weakref.ref(context)
|
self.context = weakref.ref(context)
|
||||||
# the storage type is dictionary or sqlite3
|
# the storage type is dictionary or sqlite3
|
||||||
self._p_ = storage
|
self._p_ = storage
|
||||||
|
self._warning = {}
|
||||||
|
|
||||||
def _getdefault(self, opt):
|
def _getdefault(self, opt):
|
||||||
"""
|
"""
|
||||||
|
@ -106,9 +107,9 @@ class Values(object):
|
||||||
path = self._get_opt_path(opt)
|
path = self._get_opt_path(opt)
|
||||||
if self._p_.hasvalue(path):
|
if self._p_.hasvalue(path):
|
||||||
setting = self.context().cfgimpl_get_settings()
|
setting = self.context().cfgimpl_get_settings()
|
||||||
self._warning = opt.impl_validate(opt.impl_getdefault(),
|
self._setwarning(opt.impl_validate(opt.impl_getdefault(),
|
||||||
self.context(),
|
self.context(),
|
||||||
'validator' in setting)
|
'validator' in setting), opt)
|
||||||
self.context().cfgimpl_reset_cache()
|
self.context().cfgimpl_reset_cache()
|
||||||
if (opt.impl_is_multi() and
|
if (opt.impl_is_multi() and
|
||||||
opt.impl_get_multitype() == multitypes.master):
|
opt.impl_get_multitype() == multitypes.master):
|
||||||
|
@ -230,8 +231,8 @@ class Values(object):
|
||||||
else:
|
else:
|
||||||
value = self._getvalue(opt, path, validate)
|
value = self._getvalue(opt, path, validate)
|
||||||
if config_error is None and validate:
|
if config_error is None and validate:
|
||||||
self._warning = opt.impl_validate(value, self.context(),
|
self._setwarning(opt.impl_validate(value, self.context(),
|
||||||
'validator' in setting)
|
'validator' in setting), opt)
|
||||||
if config_error is None and self._is_default_owner(path) and \
|
if config_error is None and self._is_default_owner(path) and \
|
||||||
'force_store_value' in setting[opt]:
|
'force_store_value' in setting[opt]:
|
||||||
self.setitem(opt, value, path, is_write=False)
|
self.setitem(opt, value, path, is_write=False)
|
||||||
|
@ -252,9 +253,9 @@ class Values(object):
|
||||||
# is_write is, for example, used with "force_store_value"
|
# is_write is, for example, used with "force_store_value"
|
||||||
# user didn't change value, so not write
|
# user didn't change value, so not write
|
||||||
# valid opt
|
# valid opt
|
||||||
self._warning = opt.impl_validate(value, self.context(),
|
self._setwarning(opt.impl_validate(value, self.context(),
|
||||||
'validator' in self.context(
|
'validator' in self.context(
|
||||||
).cfgimpl_get_settings())
|
).cfgimpl_get_settings()), opt)
|
||||||
if opt.impl_is_multi() and not isinstance(value, Multi):
|
if opt.impl_is_multi() and not isinstance(value, Multi):
|
||||||
value = Multi(value, self.context, opt, path, setitem=True)
|
value = Multi(value, self.context, opt, path, setitem=True)
|
||||||
self._setvalue(opt, path, value, force_permissive=force_permissive,
|
self._setvalue(opt, path, value, force_permissive=force_permissive,
|
||||||
|
@ -373,19 +374,24 @@ class Values(object):
|
||||||
def __setstate__(self, states):
|
def __setstate__(self, states):
|
||||||
self._p_ = states['_p_']
|
self._p_ = states['_p_']
|
||||||
|
|
||||||
|
def _setwarning(self, msg, opt):
|
||||||
|
if msg is not None:
|
||||||
|
self._warning[opt] = msg
|
||||||
|
|
||||||
def has_warning(self):
|
def has_warning(self):
|
||||||
"""If option is "only_warning", validation error is store in
|
"""If option is "only_warning", validation error is store in
|
||||||
self._warning.
|
self._warning.
|
||||||
has_warning just indicate that a warning message is store
|
has_warning just indicate that a warning message is store
|
||||||
"""
|
"""
|
||||||
return self._warning is not None
|
return self._warning != {}
|
||||||
|
|
||||||
def get_last_warning(self):
|
def get_warnings(self):
|
||||||
"""Get last warning message in self._warning.
|
"""Get last warnings messages in self._warning.
|
||||||
We can get only one time this message.
|
We can get only one time those messages.
|
||||||
|
:returns: {opt: msg, opt1: msg1}
|
||||||
"""
|
"""
|
||||||
ret = self._warning
|
ret = self._warning
|
||||||
self._warning = None
|
self._warning = {}
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
@ -558,9 +564,9 @@ class Multi(list):
|
||||||
def _validate(self, value):
|
def _validate(self, value):
|
||||||
if value is not None:
|
if value is not None:
|
||||||
try:
|
try:
|
||||||
self.context().cfgimpl_get_values()._warning = \
|
self.context().cfgimpl_get_values()._setwarning(
|
||||||
self.opt.impl_validate(value, context=self.context(),
|
self.opt.impl_validate(value, context=self.context(),
|
||||||
force_no_multi=True)
|
force_no_multi=True), self.opt)
|
||||||
except ValueError as err:
|
except ValueError as err:
|
||||||
raise ValueError(_("invalid value {0} "
|
raise ValueError(_("invalid value {0} "
|
||||||
"for option {1}: {2}"
|
"for option {1}: {2}"
|
||||||
|
|
Loading…
Reference in New Issue