Make set_override/set_default with enforce_type=True by default
Consuming projects usually don't set enforce_type=True by default, and that will lead some invalid tests which don't honour Config options' type and value limits. We began to warn user about the change since Sep, 2016 in I438aeb766d663dbfe5dbd263fd166c25814204e8. This change will notify consuming project to write correct test cases with config options. This commit also fixes violations in oslo.config test: config option 'namespace' is MultiStrOpt, need pass list to conf.set_default(). Closes-Bug: #1517839 Change-Id: Ifa552de0a994e40388cbc9f7dbaa55700ca276b0
This commit is contained in:
parent
efb287a946
commit
3a8ba0f8ea
|
@ -455,7 +455,6 @@ import os
|
|||
import string
|
||||
import sys
|
||||
|
||||
import debtcollector
|
||||
from debtcollector import removals
|
||||
import six
|
||||
|
||||
|
@ -2609,8 +2608,12 @@ class ConfigOpts(collections.Mapping):
|
|||
__import__(module_str)
|
||||
self._get_group(group)
|
||||
|
||||
@removals.removed_kwarg('enforce_type', "The argument enforce_type has "
|
||||
"changed its default value to True and then will"
|
||||
" be removed completely.",
|
||||
version='3.24', removal_version='4.0')
|
||||
@__clear_cache
|
||||
def set_override(self, name, override, group=None, enforce_type=False):
|
||||
def set_override(self, name, override, group=None, enforce_type=True):
|
||||
"""Override an opt value.
|
||||
|
||||
Override the command line, config file and default values of a
|
||||
|
@ -2628,8 +2631,12 @@ class ConfigOpts(collections.Mapping):
|
|||
opt_info['override'] = self._get_enforced_type_value(
|
||||
opt_info['opt'], override, enforce_type)
|
||||
|
||||
@removals.removed_kwarg('enforce_type', "The argument enforce_type has "
|
||||
"changed its default value to True and then will"
|
||||
" be removed completely.",
|
||||
version='3.24', removal_version='4.0')
|
||||
@__clear_cache
|
||||
def set_default(self, name, default, group=None, enforce_type=False):
|
||||
def set_default(self, name, default, group=None, enforce_type=True):
|
||||
"""Override an opt's default value.
|
||||
|
||||
Override the default value of given option. A command line or
|
||||
|
@ -2655,13 +2662,6 @@ class ConfigOpts(collections.Mapping):
|
|||
except (ValueError, TypeError):
|
||||
if enforce_type:
|
||||
raise
|
||||
debtcollector.deprecate(
|
||||
"The argument enforce_type is changing its "
|
||||
"default value to True and then will be removed completely, "
|
||||
"please fix the invalid %s value '%s' for option '%s'."
|
||||
% (repr(opt.type), value, opt.name),
|
||||
version=4.0
|
||||
)
|
||||
if enforce_type:
|
||||
return converted
|
||||
else:
|
||||
|
|
|
@ -3134,20 +3134,12 @@ class OverridesTestCase(BaseTestCase):
|
|||
self.conf.clear_default('foo')
|
||||
self.assertEqual('foo', self.conf.foo)
|
||||
|
||||
@mock.patch('debtcollector.deprecate')
|
||||
def test_deprecation_wrong_type_default(self, deprecate):
|
||||
def test_enforce_type_wrong_type_default(self):
|
||||
self.conf.register_opt(cfg.IntOpt('foo', default=1))
|
||||
self.conf([])
|
||||
self.assertEqual(1, self.conf.foo)
|
||||
self.conf.set_default('foo', "not_really_a_int")
|
||||
self.assertEqual('not_really_a_int', self.conf.foo)
|
||||
self.conf.clear_default('foo')
|
||||
self.assertEqual(1, self.conf.foo)
|
||||
deprecate.assert_called_once_with(
|
||||
"The argument enforce_type is changing its default value to True "
|
||||
"and then will be removed completely, please fix the invalid "
|
||||
"Integer value 'not_really_a_int' for option 'foo'.",
|
||||
version=4.0)
|
||||
self.assertRaises(ValueError, self.conf.set_default,
|
||||
'foo', 'not_really_a_int')
|
||||
|
||||
def test_override(self):
|
||||
self.conf.register_opt(cfg.StrOpt('foo'))
|
||||
|
@ -3235,19 +3227,10 @@ class OverridesTestCase(BaseTestCase):
|
|||
self.conf.clear_override('foo')
|
||||
self.assertIsNone(self.conf.foo)
|
||||
|
||||
@mock.patch('debtcollector.deprecate')
|
||||
def test_deprecation_wrong_type_override(self, deprecate):
|
||||
def test_enforce_type_wrong_type_override(self):
|
||||
self.conf.register_opt(cfg.IntOpt('foo'))
|
||||
self.conf.set_override('foo', "not_really_a_int")
|
||||
self.conf([])
|
||||
self.assertEqual('not_really_a_int', self.conf.foo)
|
||||
self.conf.clear_override('foo')
|
||||
self.assertIsNone(self.conf.foo)
|
||||
deprecate.assert_called_once_with(
|
||||
"The argument enforce_type is changing its default value to True "
|
||||
"and then will be removed completely, please fix the invalid "
|
||||
"Integer value 'not_really_a_int' for option 'foo'.",
|
||||
version=4.0)
|
||||
self.assertRaises(ValueError, self.conf.set_override,
|
||||
'foo', "not_really_a_int")
|
||||
|
||||
def test_set_override_in_choices(self):
|
||||
self.conf.register_group(cfg.OptGroup('f'))
|
||||
|
|
|
@ -1164,7 +1164,7 @@ class GeneratorRaiseErrorTestCase(base.BaseTestCase):
|
|||
fake_ep = FakeEP()
|
||||
self.conf = cfg.ConfigOpts()
|
||||
self.conf.register_opts(generator._generator_opts)
|
||||
self.conf.set_default('namespace', fake_ep.name)
|
||||
self.conf.set_default('namespace', [fake_ep.name])
|
||||
fake_eps = mock.Mock(return_value=[fake_ep])
|
||||
with mock.patch('pkg_resources.iter_entry_points', fake_eps):
|
||||
self.assertRaises(FakeException, generator.generate, self.conf)
|
||||
|
|
Loading…
Reference in New Issue