Implements import_group

Created import_group method in cfg.py
Added testcases

Fixes bug #1107843

Change-Id: I427d4069dacbb6e586687370adbb08b5d50f7b63
This commit is contained in:
Zhongyue Luo 2013-01-30 22:27:51 +08:00 committed by Mark McLoughlin
parent a118969fb7
commit b1730fcbc4
3 changed files with 56 additions and 0 deletions

View File

@ -1297,6 +1297,24 @@ class ConfigOpts(collections.Mapping):
__import__(module_str)
self._get_opt_info(name, group)
def import_group(self, group, module_str):
"""Import an option group from a module.
Import a module and check that a given option group 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 group
defined by another module it can use this method to explicitly
declare the dependency.
:param group: an option OptGroup object or group name
:param module_str: the name of a module to import
:raises: ImportError, NoSuchGroupError
"""
__import__(module_str)
self._get_group(group)
@__clear_cache
def set_override(self, name, override, group=None):
"""Override an opt value.

View File

@ -1241,6 +1241,23 @@ class ImportOptTestCase(BaseTestCase):
'blaa', 'tests.testmods.blaa_opt', group='blaa')
class ImportGroupTestCase(BaseTestCase):
def test_import_group(self):
self.assertFalse(hasattr(CONF, 'qux'))
CONF.import_group('qux', 'tests.testmods.baz_qux_opt')
self.assertTrue(hasattr(CONF, 'qux'))
self.assertTrue(hasattr(CONF.qux, 'baz'))
def test_import_group_import_error(self):
self.assertRaises(ImportError, CONF.import_group,
'qux', 'tests.testmods.bazzz_quxxx_opt')
def test_import_group_no_such_group(self):
self.assertRaises(NoSuchGroupError, CONF.import_group,
'quxxx', 'tests.testmods.baz_qux_opt')
class RequiredOptsTestCase(BaseTestCase):
def setUp(self):

View File

@ -0,0 +1,21 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright (c) 2013 Intel Corporation.
#
# 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 oslo.config import cfg
CONF = cfg.CONF
CONF.register_opt(cfg.StrOpt('baz'), group='qux')