refactor (warnings_only)
This commit is contained in:
parent
3073940ca4
commit
162ae02df8
@ -230,3 +230,9 @@ def test_duplicated_option():
|
||||
root = OptionDescription('root', '', [d1, d2])
|
||||
#in different OptionDescription
|
||||
raises(ConflictError, "config = Config(root)")
|
||||
|
||||
def test_cannot_assign_value_to_option_description():
|
||||
descr = make_description()
|
||||
cfg = Config(descr)
|
||||
raises(TypeError, "cfg.gc = 3")
|
||||
|
||||
|
@ -72,9 +72,9 @@ def test_validator_multi():
|
||||
|
||||
|
||||
def test_validator_warning():
|
||||
opt1 = StrOption('opt1', '', validator=return_true, default='val', only_warning=True)
|
||||
opt2 = StrOption('opt2', '', validator=return_false, only_warning=True)
|
||||
opt3 = StrOption('opt3', '', validator=return_if_val, multi=True, only_warning=True)
|
||||
opt1 = StrOption('opt1', '', validator=return_true, default='val', warnings_only=True)
|
||||
opt2 = StrOption('opt2', '', validator=return_false, warnings_only=True)
|
||||
opt3 = StrOption('opt3', '', validator=return_if_val, multi=True, warnings_only=True)
|
||||
root = OptionDescription('root', '', [opt1, opt2, opt3])
|
||||
cfg = Config(root)
|
||||
assert cfg.opt1 == 'val'
|
||||
@ -111,8 +111,8 @@ def test_validator_warning():
|
||||
|
||||
|
||||
def test_validator_warning_master_slave():
|
||||
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip reseau autorise", multi=True, validator=return_false, only_warning=True)
|
||||
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-reseau", multi=True, validator=return_if_val, only_warning=True)
|
||||
ip_admin_eth0 = StrOption('ip_admin_eth0', "ip reseau autorise", multi=True, validator=return_false, warnings_only=True)
|
||||
netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-reseau", multi=True, validator=return_if_val, warnings_only=True)
|
||||
interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
|
||||
interface1.impl_set_group_type(groups.master)
|
||||
assert interface1.impl_get_group_type() == groups.master
|
||||
|
@ -186,7 +186,7 @@ class SubConfig(object):
|
||||
return homeconfig.__setattr__(name, value)
|
||||
child = getattr(self.cfgimpl_get_description(), name)
|
||||
if isinstance(child, OptionDescription):
|
||||
raise SyntaxError(_("can't assign to an OptionDescription"))
|
||||
raise TypeError(_("can't assign to an OptionDescription"))
|
||||
elif not isinstance(child, SymLinkOption):
|
||||
if self._impl_path is None:
|
||||
path = name
|
||||
|
@ -77,7 +77,7 @@ class ValueWarning(UserWarning):
|
||||
>>> def a(val):
|
||||
... raise ValueError('pouet')
|
||||
...
|
||||
>>> s=StrOption('s', '', validator=a, only_warning=True)
|
||||
>>> s=StrOption('s', '', validator=a, warnings_only=True)
|
||||
>>> o=OptionDescription('o', '', [s])
|
||||
>>> c=Config(o)
|
||||
>>> c.s = 'val'
|
||||
|
@ -328,13 +328,13 @@ class Option(BaseOption):
|
||||
"""
|
||||
__slots__ = ('_multi', '_validator', '_default_multi', '_default',
|
||||
'_state_callback', '_callback', '_multitype',
|
||||
'_only_warning', '_master_slaves', '__weakref__')
|
||||
'_warnings_only', '_master_slaves', '__weakref__')
|
||||
_empty = ''
|
||||
|
||||
def __init__(self, name, doc, default=None, default_multi=None,
|
||||
requires=None, multi=False, callback=None,
|
||||
callback_params=None, validator=None, validator_params=None,
|
||||
properties=None, only_warning=False):
|
||||
properties=None, warnings_only=False):
|
||||
"""
|
||||
:param name: the option's name
|
||||
:param doc: the option's description
|
||||
@ -352,7 +352,7 @@ class Option(BaseOption):
|
||||
validation of the value
|
||||
:param validator_params: the validator's parameters
|
||||
:param properties: tuple of default properties
|
||||
:param only_warning: _validator and _consistencies don't raise if True
|
||||
:param warnings_only: _validator and _consistencies don't raise if True
|
||||
Values()._warning contain message
|
||||
|
||||
"""
|
||||
@ -391,7 +391,7 @@ class Option(BaseOption):
|
||||
default = []
|
||||
self._multitype = multitypes.default
|
||||
self._default_multi = default_multi
|
||||
self._only_warning = only_warning
|
||||
self._warnings_only = warnings_only
|
||||
self.impl_validate(default)
|
||||
self._default = default
|
||||
|
||||
@ -475,6 +475,8 @@ class Option(BaseOption):
|
||||
def do_validation(_value, _index=None):
|
||||
if _value is None:
|
||||
return
|
||||
# option validation
|
||||
self._validate(_value)
|
||||
try:
|
||||
# valid with self._validator
|
||||
val_validator(_value)
|
||||
@ -485,32 +487,26 @@ class Option(BaseOption):
|
||||
except ValueError as err:
|
||||
msg = _("invalid value {0} for option {1}: {2}").format(
|
||||
_value, self._name, err)
|
||||
if self._only_warning:
|
||||
if self._warnings_only:
|
||||
warnings.warn_explicit(ValueWarning(msg, self),
|
||||
ValueWarning,
|
||||
self.__class__.__name__, 0)
|
||||
else:
|
||||
raise ValueError(msg)
|
||||
# option validation
|
||||
self._validate(_value)
|
||||
|
||||
# generic calculation
|
||||
if context is not None:
|
||||
descr = context.cfgimpl_get_description()
|
||||
|
||||
ret = None
|
||||
if not self._multi or force_no_multi:
|
||||
ret = do_validation(value)
|
||||
do_validation(value)
|
||||
else:
|
||||
if not isinstance(value, list):
|
||||
raise ValueError(_("invalid value {0} for option {1} "
|
||||
"which must be a list").format(value,
|
||||
self._name))
|
||||
for index, val in enumerate(value):
|
||||
ret_ = do_validation(val, index)
|
||||
if ret_ is not None:
|
||||
ret = ret_
|
||||
return ret
|
||||
do_validation(val, index)
|
||||
|
||||
def impl_getdefault(self, default_multi=False):
|
||||
"accessing the default value"
|
||||
@ -628,7 +624,7 @@ class ChoiceOption(Option):
|
||||
def __init__(self, name, doc, values, default=None, default_multi=None,
|
||||
requires=None, multi=False, callback=None,
|
||||
callback_params=None, open_values=False, validator=None,
|
||||
validator_params=None, properties=None, only_warning=False):
|
||||
validator_params=None, properties=None, warnings_only=False):
|
||||
"""
|
||||
:param values: is a list of values the option can possibly take
|
||||
"""
|
||||
@ -648,7 +644,7 @@ class ChoiceOption(Option):
|
||||
validator=validator,
|
||||
validator_params=validator_params,
|
||||
properties=properties,
|
||||
only_warning=only_warning)
|
||||
warnings_only=warnings_only)
|
||||
|
||||
def impl_get_values(self):
|
||||
return self._values
|
||||
@ -767,7 +763,7 @@ class IPOption(Option):
|
||||
requires=None, multi=False, callback=None,
|
||||
callback_params=None, validator=None, validator_params=None,
|
||||
properties=None, only_private=False, allow_reserved=False,
|
||||
only_warning=False):
|
||||
warnings_only=False):
|
||||
self._only_private = only_private
|
||||
self._allow_reserved = allow_reserved
|
||||
super(IPOption, self).__init__(name, doc, default=default,
|
||||
@ -779,7 +775,7 @@ class IPOption(Option):
|
||||
validator=validator,
|
||||
validator_params=validator_params,
|
||||
properties=properties,
|
||||
only_warning=only_warning)
|
||||
warnings_only=warnings_only)
|
||||
|
||||
def _validate(self, value):
|
||||
try:
|
||||
@ -813,7 +809,7 @@ class PortOption(Option):
|
||||
callback_params=None, validator=None, validator_params=None,
|
||||
properties=None, allow_range=False, allow_zero=False,
|
||||
allow_wellknown=True, allow_registred=True,
|
||||
allow_private=False, only_warning=False):
|
||||
allow_private=False, warnings_only=False):
|
||||
self._allow_range = allow_range
|
||||
self._min_value = None
|
||||
self._max_value = None
|
||||
@ -846,7 +842,7 @@ class PortOption(Option):
|
||||
validator=validator,
|
||||
validator_params=validator_params,
|
||||
properties=properties,
|
||||
only_warning=only_warning)
|
||||
warnings_only=warnings_only)
|
||||
|
||||
def _validate(self, value):
|
||||
if self._allow_range and ":" in str(value):
|
||||
@ -948,7 +944,7 @@ class DomainnameOption(Option):
|
||||
requires=None, multi=False, callback=None,
|
||||
callback_params=None, validator=None, validator_params=None,
|
||||
properties=None, allow_ip=False, type_='domainname',
|
||||
only_warning=False):
|
||||
warnings_only=False):
|
||||
#netbios: for MS domain
|
||||
#hostname: to identify the device
|
||||
#domainname:
|
||||
@ -968,7 +964,7 @@ class DomainnameOption(Option):
|
||||
validator=validator,
|
||||
validator_params=validator_params,
|
||||
properties=properties,
|
||||
only_warning=only_warning)
|
||||
warnings_only=warnings_only)
|
||||
|
||||
def _validate(self, value):
|
||||
if self._allow_ip is True:
|
||||
|
Loading…
Reference in New Issue
Block a user