diff options
author | Flaper Fesp <flaper87@gmail.com> | 2013-08-14 09:31:37 +0200 |
---|---|---|
committer | Flaper Fesp <flaper87@gmail.com> | 2013-08-14 10:27:08 +0200 |
commit | c280f6060c6bbc50e9f5f74232b3c45bccee2ec4 (patch) | |
tree | 50187f85763c8d0532b0d5d2fddcaf3b11b06788 | |
parent | c85c8e6c4d5a921aa36a4774fe6bd8ab07d58fb3 (diff) | |
download | oslo-config-c280f6060c6bbc50e9f5f74232b3c45bccee2ec4.tar.gz |
Add auto-create support for OptGroup instances
Currently, it is possible to auto-create groups by passing a group name
to register_opt or register_opts. However, it is not possible to
auto-register groups when a OptGroup instance is passed instead.
This patch adds support for that to the _get_group method. There are
some advantages introduced by this patch:
* It keeps consistency of oslo.config's public API.
* It allow users to auto-register a group a group and
re-use the instance:
group = cfg.OptGroup("test")
cfg.register_opts(..., group=group)
# do something with the group
* It allows users to auto-register groups with descriptions.
DocImpact
Change-Id: I9b9a74688c906d6bdea9c42044b47dc52e48c19d
-rw-r--r-- | oslo/config/cfg.py | 8 | ||||
-rw-r--r-- | tests/test_cfg.py | 17 |
2 files changed, 17 insertions, 8 deletions
diff --git a/oslo/config/cfg.py b/oslo/config/cfg.py index 8092df1..7e74651 100644 --- a/oslo/config/cfg.py +++ b/oslo/config/cfg.py @@ -2038,6 +2038,10 @@ class ConfigOpts(collections.Mapping): objects, which will be a copy of any OptGroup object that users of the API have access to. + If autocreate is True, the group will be created if it's not found. If + group is an instance of OptGroup, that same instance will be + registered, otherwise a new instance of OptGroup will be created. + :param group_or_name: the group's name or the OptGroup object itself :param autocreate: whether to auto-create the group if it's not found :raises: NoSuchGroupError @@ -2046,10 +2050,10 @@ class ConfigOpts(collections.Mapping): group_name = group.name if group else group_or_name if group_name not in self._groups: - if group is not None or not autocreate: + if not autocreate: raise NoSuchGroupError(group_name) - self.register_group(OptGroup(name=group_name)) + self.register_group(group or OptGroup(name=group_name)) return self._groups[group_name] diff --git a/tests/test_cfg.py b/tests/test_cfg.py index 086e55b..785a57e 100644 --- a/tests/test_cfg.py +++ b/tests/test_cfg.py @@ -1347,7 +1347,7 @@ class OptGroupsTestCase(BaseTestCase): self.assertTrue(hasattr(self.conf.blaa, 'foo')) self.assertEqual(self.conf.blaa.foo, 'bar') - def test_autocreate_group(self): + def test_autocreate_group_by_name(self): self.conf.register_cli_opt(cfg.StrOpt('foo'), group='blaa') self.conf(['--blaa-foo', 'bar']) @@ -1356,6 +1356,16 @@ class OptGroupsTestCase(BaseTestCase): self.assertTrue(hasattr(self.conf.blaa, 'foo')) self.assertEqual(self.conf.blaa.foo, 'bar') + def test_autocreate_group_by_group(self): + group = cfg.OptGroup(name='blaa', title='Blaa options') + self.conf.register_cli_opt(cfg.StrOpt('foo'), group=group) + + self.conf(['--blaa-foo', 'bar']) + + self.assertTrue(hasattr(self.conf, 'blaa')) + self.assertTrue(hasattr(self.conf.blaa, 'foo')) + self.assertEqual(self.conf.blaa.foo, 'bar') + def test_autocreate_title(self): blaa_group = cfg.OptGroup('blaa') self.assertEqual(blaa_group.title, 'blaa options') @@ -2200,11 +2210,6 @@ class SadPathTestCase(BaseTestCase): self.conf.register_cli_opt(cfg.StrOpt('bar', short='f')) self.assertRaises(cfg.DuplicateOptError, self.conf, []) - def test_no_such_group(self): - group = cfg.OptGroup('blaa') - self.assertRaises(cfg.NoSuchGroupError, self.conf.register_cli_opt, - cfg.StrOpt('foo'), group=group) - def test_already_parsed(self): self.conf([]) |