summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlaper Fesp <flaper87@gmail.com>2013-08-14 09:31:37 +0200
committerFlaper Fesp <flaper87@gmail.com>2013-08-14 10:27:08 +0200
commitc280f6060c6bbc50e9f5f74232b3c45bccee2ec4 (patch)
tree50187f85763c8d0532b0d5d2fddcaf3b11b06788
parentc85c8e6c4d5a921aa36a4774fe6bd8ab07d58fb3 (diff)
downloadoslo-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.py8
-rw-r--r--tests/test_cfg.py17
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([])