summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-05-14 15:20:45 +0000
committerGerrit Code Review <review@openstack.org>2012-05-14 15:20:45 +0000
commit13d2821bb7cdfeae07774026456f7daa7d8026bc (patch)
treea787f77ec4d9c4d5b04bff214e3d1c2b877d746f
parent2e1371a13205cd494dc4b9ade79ae20b607256b1 (diff)
parent05bc19d4e96052463062b6b8ca83852b4b169d48 (diff)
downloadoslo-13d2821bb7cdfeae07774026456f7daa7d8026bc.tar.gz
oslo-13d2821bb7cdfeae07774026456f7daa7d8026bc.tar.xz
oslo-13d2821bb7cdfeae07774026456f7daa7d8026bc.zip
Merge "cfg: make reset() clear defaults and overrides"
-rw-r--r--openstack/common/cfg.py24
-rw-r--r--tests/unit/test_cfg.py42
2 files changed, 62 insertions, 4 deletions
diff --git a/openstack/common/cfg.py b/openstack/common/cfg.py
index 31d727b..c50aa6a 100644
--- a/openstack/common/cfg.py
+++ b/openstack/common/cfg.py
@@ -940,7 +940,7 @@ class ConfigOpts(collections.Mapping):
:raises: SystemExit, ConfigFilesNotFoundError, ConfigFileParseError,
RequiredOptError
"""
- self.reset()
+ self.clear()
self._args = args
@@ -987,11 +987,16 @@ class ConfigOpts(collections.Mapping):
"""Return the number of options and option groups."""
return len(self._opts) + len(self._groups)
- @__clear_cache
def reset(self):
- """Reset the state of the object to before it was called."""
+ """Clear the object state and unset overrides and defaults."""
+ self._unset_defaults_and_overrides()
+ self.clear()
+
+ @__clear_cache
+ def clear(self):
+ """Clear the state of the object to before it was called."""
self._args = None
- self._cli_values = None
+ self._cli_values = {}
self._cparser = None
@__clear_cache
@@ -1098,6 +1103,17 @@ class ConfigOpts(collections.Mapping):
opt_info = self._get_opt_info(name, group)
opt_info['default'] = default
+ def _unset_defaults_and_overrides(self):
+ """Unset any default or override on all options."""
+ def unset(opts):
+ for info in opts.values():
+ info['default'] = None
+ info['override'] = None
+
+ unset(self._opts)
+ for group in self._groups.values():
+ unset(group._opts)
+
def disable_interspersed_args(self):
"""Set parsing to stop on the first non-option.
diff --git a/tests/unit/test_cfg.py b/tests/unit/test_cfg.py
index 1892c61..688f41a 100644
--- a/tests/unit/test_cfg.py
+++ b/tests/unit/test_cfg.py
@@ -880,6 +880,48 @@ class OverridesTestCase(BaseTestCase):
self.assertEquals(self.conf.blaa.foo, 'bar')
+class ResetAndClearTestCase(BaseTestCase):
+
+ def test_clear(self):
+ self.conf.register_cli_opt(StrOpt('foo'))
+ self.conf.register_cli_opt(StrOpt('bar'), group='blaa')
+
+ self.assertEquals(self.conf.foo, None)
+ self.assertEquals(self.conf.blaa.bar, None)
+
+ self.conf(['--foo', 'foo', '--blaa-bar', 'bar'])
+
+ self.assertEquals(self.conf.foo, 'foo')
+ self.assertEquals(self.conf.blaa.bar, 'bar')
+
+ self.conf.clear()
+
+ self.assertEquals(self.conf.foo, None)
+ self.assertEquals(self.conf.blaa.bar, None)
+
+ def test_reset_and_clear_with_defaults_and_overrides(self):
+ self.conf.register_cli_opt(StrOpt('foo'))
+ self.conf.register_cli_opt(StrOpt('bar'), group='blaa')
+
+ self.conf.set_default('foo', 'foo')
+ self.conf.set_override('bar', 'bar', group='blaa')
+
+ self.conf(['--foo', 'foofoo'])
+
+ self.assertEquals(self.conf.foo, 'foofoo')
+ self.assertEquals(self.conf.blaa.bar, 'bar')
+
+ self.conf.clear()
+
+ self.assertEquals(self.conf.foo, 'foo')
+ self.assertEquals(self.conf.blaa.bar, 'bar')
+
+ self.conf.reset()
+
+ self.assertEquals(self.conf.foo, None)
+ self.assertEquals(self.conf.blaa.bar, None)
+
+
class RequiredOptsTestCase(BaseTestCase):
def setUp(self):