From 5e9503bf9934f1ccc15985ee29eb76dc04ebad6a Mon Sep 17 00:00:00 2001 From: Mark McLoughlin Date: Fri, 23 Nov 2012 15:12:12 +0000 Subject: Hide the GroupAttr conf and group attributes There's no reason why an option group shouldn't have options called 'group' or 'conf'. Add a test case which would have failed because the 'conf' attribute would have been a ConfigOpts instance and fix it by making those attributes private. Change-Id: Ic3e41a546c0d1b7b6aae04e1dbac2933ac661f57 --- openstack/common/cfg.py | 12 ++++++------ tests/unit/test_cfg.py | 12 ++++++++++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/openstack/common/cfg.py b/openstack/common/cfg.py index e967c61..beba0a5 100644 --- a/openstack/common/cfg.py +++ b/openstack/common/cfg.py @@ -1572,12 +1572,12 @@ class ConfigOpts(collections.Mapping): :param conf: a ConfigOpts object :param group: an OptGroup object """ - self.conf = conf - self.group = group + self._conf = conf + self._group = group def __getattr__(self, name): """Look up an option value and perform template substitution.""" - return self.conf._get(name, self.group) + return self._conf._get(name, self._group) def __getitem__(self, key): """Look up an option value and perform string substitution.""" @@ -1585,16 +1585,16 @@ class ConfigOpts(collections.Mapping): def __contains__(self, key): """Return True if key is the name of a registered opt or group.""" - return key in self.group._opts + return key in self._group._opts def __iter__(self): """Iterate over all registered opt and group names.""" - for key in self.group._opts.keys(): + for key in self._group._opts.keys(): yield key def __len__(self): """Return the number of options and option groups.""" - return len(self.group._opts) + return len(self._group._opts) class StrSubWrapper(object): diff --git a/tests/unit/test_cfg.py b/tests/unit/test_cfg.py index 384a57a..4bfc37a 100644 --- a/tests/unit/test_cfg.py +++ b/tests/unit/test_cfg.py @@ -735,6 +735,18 @@ class OptGroupsTestCase(BaseTestCase): self.assertTrue(hasattr(self.conf.blaa, 'foo')) self.assertEquals(self.conf.blaa.foo, 'bar') + def test_arg_group_with_conf_and_group_opts(self): + self.conf.register_cli_opt(StrOpt('conf'), group='blaa') + self.conf.register_cli_opt(StrOpt('group'), group='blaa') + + self.conf(['--blaa-conf', 'foo', '--blaa-group', 'bar']) + + self.assertTrue(hasattr(self.conf, 'blaa')) + self.assertTrue(hasattr(self.conf.blaa, 'conf')) + self.assertEquals(self.conf.blaa.conf, 'foo') + self.assertTrue(hasattr(self.conf.blaa, 'group')) + self.assertEquals(self.conf.blaa.group, 'bar') + def test_arg_group_in_config_file(self): self.conf.register_group(OptGroup('blaa')) self.conf.register_opt(StrOpt('foo'), group='blaa') -- cgit