diff options
author | Jenkins <jenkins@review.openstack.org> | 2015-07-24 18:39:53 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2015-07-24 18:39:53 +0000 |
commit | ac505d83e4eeb7f4d0e813e4b33cf97d2d1613a2 (patch) | |
tree | f45c70bbab53f0de84b0ca34e47252f6dd62a370 | |
parent | f00408cb04c8acf330e07ee2ae44c420cc348d46 (diff) | |
parent | 67c3abb048402e4910f18386091a4ccf68448dcf (diff) | |
download | oslo-config-ac505d83e4eeb7f4d0e813e4b33cf97d2d1613a2.tar.gz |
Merge "Add enforce_type option when setting an override"2.1.0
-rw-r--r-- | oslo_config/cfg.py | 10 | ||||
-rw-r--r-- | oslo_config/tests/test_cfg.py | 31 |
2 files changed, 39 insertions, 2 deletions
diff --git a/oslo_config/cfg.py b/oslo_config/cfg.py index e406431..0cf1c50 100644 --- a/oslo_config/cfg.py +++ b/oslo_config/cfg.py @@ -2089,7 +2089,7 @@ class ConfigOpts(collections.Mapping): self._get_group(group) @__clear_cache - def set_override(self, name, override, group=None): + def set_override(self, name, override, group=None, enforce_type=False): """Override an opt value. Override the command line, config file and default values of a @@ -2098,10 +2098,16 @@ class ConfigOpts(collections.Mapping): :param name: the name/dest of the opt :param override: the override value :param group: an option OptGroup object or group name + :param enforce_type: a boolean whether to convert the override + value to the option's type :raises: NoSuchOptError, NoSuchGroupError """ opt_info = self._get_opt_info(name, group) - opt_info['override'] = override + if enforce_type: + opt_info['override'] = self._convert_value(override, + opt_info['opt']) + else: + opt_info['override'] = override @__clear_cache def set_default(self, name, default, group=None): diff --git a/oslo_config/tests/test_cfg.py b/oslo_config/tests/test_cfg.py index 080ee33..f4cdb00 100644 --- a/oslo_config/tests/test_cfg.py +++ b/oslo_config/tests/test_cfg.py @@ -2513,6 +2513,37 @@ class OverridesTestCase(BaseTestCase): self.conf.clear_override('foo') self.assertIsNone(self.conf.foo) + def test_enforce_type_str_override(self): + self.conf.register_opt(cfg.StrOpt('foo')) + self.conf.set_override('foo', True, enforce_type=True) + self.conf([]) + self.assertEqual(self.conf.foo, 'True') + self.conf.clear_override('foo') + self.assertIsNone(self.conf.foo) + + def test_set_override_in_choices(self): + self.conf.register_group(cfg.OptGroup('f')) + self.conf.register_cli_opt(cfg.StrOpt('oo', choices=('a', 'b')), + group='f') + self.conf.set_override('oo', 'b', 'f', enforce_type=True) + self.assertEqual('b', self.conf.f.oo) + + def test_set_override_not_in_choices(self): + self.conf.register_group(cfg.OptGroup('f')) + self.conf.register_cli_opt(cfg.StrOpt('oo', choices=('a', 'b')), + group='f') + self.assertRaises(ValueError, + self.conf.set_override, 'oo', 'c', 'f', + enforce_type=True) + + def test_enforce_type_bool_override(self): + self.conf.register_opt(cfg.BoolOpt('foo')) + self.conf.set_override('foo', 'True', enforce_type=True) + self.conf([]) + self.assertEqual(self.conf.foo, True) + self.conf.clear_override('foo') + self.assertIsNone(self.conf.foo) + class ResetAndClearTestCase(BaseTestCase): |