summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-07-24 18:39:53 +0000
committerGerrit Code Review <review@openstack.org>2015-07-24 18:39:53 +0000
commitac505d83e4eeb7f4d0e813e4b33cf97d2d1613a2 (patch)
treef45c70bbab53f0de84b0ca34e47252f6dd62a370
parentf00408cb04c8acf330e07ee2ae44c420cc348d46 (diff)
parent67c3abb048402e4910f18386091a4ccf68448dcf (diff)
downloadoslo-config-ac505d83e4eeb7f4d0e813e4b33cf97d2d1613a2.tar.gz
Merge "Add enforce_type option when setting an override"2.1.0
-rw-r--r--oslo_config/cfg.py10
-rw-r--r--oslo_config/tests/test_cfg.py31
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):