diff options
| -rw-r--r-- | openstack/common/cfg.py | 19 | ||||
| -rw-r--r-- | tests/testmods/__init__.py | 15 | ||||
| -rw-r--r-- | tests/testmods/bar_foo_opt.py | 21 | ||||
| -rw-r--r-- | tests/testmods/blaa_opt.py | 21 | ||||
| -rw-r--r-- | tests/unit/test_cfg.py | 26 |
5 files changed, 102 insertions, 0 deletions
diff --git a/openstack/common/cfg.py b/openstack/common/cfg.py index 728ecdc..b42c30e 100644 --- a/openstack/common/cfg.py +++ b/openstack/common/cfg.py @@ -1156,6 +1156,25 @@ class ConfigOpts(collections.Mapping): for opt in opts: self.unregister_opt(opt, group, clear_cache=False) + def import_opt(self, name, module_str, group=None): + """Import an option definition from a module. + + Import a module and check that a given option is registered. + + This is intended for use with global configuration objects + like cfg.CONF where modules commonly register options with + CONF at module load time. If one module requires an option + defined by another module it can use this method to explicitly + declare the dependency. + + :param name: the name/dest of the opt + :param module_str: the name of a module to import + :param group: an option OptGroup object or group name + :raises: NoSuchOptError, NoSuchGroupError + """ + __import__(module_str) + self._get_opt_info(name, group) + @__clear_cache def set_override(self, name, override, group=None): """Override an opt value. diff --git a/tests/testmods/__init__.py b/tests/testmods/__init__.py new file mode 100644 index 0000000..e5f41ad --- /dev/null +++ b/tests/testmods/__init__.py @@ -0,0 +1,15 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2012 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. diff --git a/tests/testmods/bar_foo_opt.py b/tests/testmods/bar_foo_opt.py new file mode 100644 index 0000000..88d0bbf --- /dev/null +++ b/tests/testmods/bar_foo_opt.py @@ -0,0 +1,21 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2012 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from openstack.common import cfg + +CONF = cfg.CONF + +CONF.register_opt(cfg.StrOpt('foo'), group='bar') diff --git a/tests/testmods/blaa_opt.py b/tests/testmods/blaa_opt.py new file mode 100644 index 0000000..b320a72 --- /dev/null +++ b/tests/testmods/blaa_opt.py @@ -0,0 +1,21 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2012 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from openstack.common import cfg + +CONF = cfg.CONF + +CONF.register_opt(cfg.StrOpt('blaa')) diff --git a/tests/unit/test_cfg.py b/tests/unit/test_cfg.py index d6286d3..14a85c9 100644 --- a/tests/unit/test_cfg.py +++ b/tests/unit/test_cfg.py @@ -1111,6 +1111,32 @@ class UnregisterOptTestCase(BaseTestCase): self.assertFalse(hasattr(self.conf.blaa, 'foo')) +class ImportOptTestCase(BaseTestCase): + + def test_import_opt(self): + self.assertFalse(hasattr(CONF, 'blaa')) + CONF.import_opt('blaa', 'tests.testmods.blaa_opt') + self.assertTrue(hasattr(CONF, 'blaa')) + + def test_import_opt_in_group(self): + self.assertFalse(hasattr(CONF, 'bar')) + CONF.import_opt('foo', 'tests.testmods.bar_foo_opt', group='bar') + self.assertTrue(hasattr(CONF, 'bar')) + self.assertTrue(hasattr(CONF.bar, 'foo')) + + def test_import_opt_import_errror(self): + self.assertRaises(ImportError, CONF.import_opt, + 'blaa', 'tests.testmods.blaablaa_opt') + + def test_import_opt_no_such_opt(self): + self.assertRaises(NoSuchOptError, CONF.import_opt, + 'blaablaa', 'tests.testmods.blaa_opt') + + def test_import_opt_no_such_group(self): + self.assertRaises(NoSuchGroupError, CONF.import_opt, + 'blaa', 'tests.testmods.blaa_opt', group='blaa') + + class RequiredOptsTestCase(BaseTestCase): def setUp(self): |
