Support template substitution of DictOpt
Closes-Bug: #1590274 Change-Id: Idc07e92b06d2ef0a09834bd19f74282081e545f7 Signed-off-by: Yibo Cai <yibo.cai@linaro.org>
This commit is contained in:
parent
bb0f7e3880
commit
5ee4092665
@ -2678,6 +2678,11 @@ class ConfigOpts(collections.Mapping):
|
||||
ret = tmpl.safe_substitute(
|
||||
self.StrSubWrapper(self, group=group, namespace=namespace))
|
||||
return ret
|
||||
elif isinstance(value, dict):
|
||||
# Substitute template variables in both key and value
|
||||
return {self._substitute(key, group=group, namespace=namespace):
|
||||
self._substitute(val, group=group, namespace=namespace)
|
||||
for key, val in value.items()}
|
||||
else:
|
||||
return value
|
||||
|
||||
|
@ -2491,6 +2491,69 @@ class TemplateSubstitutionTestCase(BaseTestCase):
|
||||
self.assertEqual(self.conf.ba.foo, '4242')
|
||||
self.assertEqual(self.conf.ba.r, 4242)
|
||||
|
||||
def test_dict_sub_default_from_default(self):
|
||||
self.conf.register_cli_opt(cfg.StrOpt('foo', default='floo'))
|
||||
self.conf.register_cli_opt(cfg.StrOpt('bar', default='blaa'))
|
||||
self.conf.register_cli_opt(cfg.DictOpt('dt', default={'$foo': '$bar'}))
|
||||
|
||||
self.conf([])
|
||||
|
||||
self.assertEqual(self.conf.dt['floo'], 'blaa')
|
||||
|
||||
def test_dict_sub_default_from_default_multi(self):
|
||||
self.conf.register_cli_opt(cfg.StrOpt('foo', default='floo'))
|
||||
self.conf.register_cli_opt(cfg.StrOpt('bar', default='blaa'))
|
||||
self.conf.register_cli_opt(cfg.StrOpt('goo', default='gloo'))
|
||||
self.conf.register_cli_opt(cfg.StrOpt('har', default='hlaa'))
|
||||
self.conf.register_cli_opt(cfg.DictOpt('dt', default={'$foo': '$bar',
|
||||
'$goo': 'goo',
|
||||
'har': '$har',
|
||||
'key1': 'str',
|
||||
'key2': 12345}))
|
||||
|
||||
self.conf([])
|
||||
|
||||
self.assertEqual(self.conf.dt['floo'], 'blaa')
|
||||
self.assertEqual(self.conf.dt['gloo'], 'goo')
|
||||
self.assertEqual(self.conf.dt['har'], 'hlaa')
|
||||
self.assertEqual(self.conf.dt['key1'], 'str')
|
||||
self.assertEqual(self.conf.dt['key2'], 12345)
|
||||
|
||||
def test_dict_sub_default_from_default_recurse(self):
|
||||
self.conf.register_cli_opt(cfg.StrOpt('foo', default='$foo2'))
|
||||
self.conf.register_cli_opt(cfg.StrOpt('foo2', default='floo'))
|
||||
self.conf.register_cli_opt(cfg.StrOpt('bar', default='$bar2'))
|
||||
self.conf.register_cli_opt(cfg.StrOpt('bar2', default='blaa'))
|
||||
self.conf.register_cli_opt(cfg.DictOpt('dt', default={'$foo': '$bar'}))
|
||||
|
||||
self.conf([])
|
||||
|
||||
self.assertEqual(self.conf.dt['floo'], 'blaa')
|
||||
|
||||
def test_dict_sub_default_from_arg(self):
|
||||
self.conf.register_cli_opt(cfg.StrOpt('foo', default=None))
|
||||
self.conf.register_cli_opt(cfg.StrOpt('bar', default=None))
|
||||
self.conf.register_cli_opt(cfg.DictOpt('dt', default={'$foo': '$bar'}))
|
||||
|
||||
self.conf(['--foo', 'floo', '--bar', 'blaa'])
|
||||
|
||||
self.assertTrue(hasattr(self.conf, 'dt'))
|
||||
self.assertEqual(self.conf.dt['floo'], 'blaa')
|
||||
|
||||
def test_dict_sub_default_from_config_file(self):
|
||||
self.conf.register_cli_opt(cfg.StrOpt('foo', default='floo'))
|
||||
self.conf.register_cli_opt(cfg.StrOpt('bar', default='blaa'))
|
||||
self.conf.register_cli_opt(cfg.DictOpt('dt', default={}))
|
||||
|
||||
paths = self.create_tempfiles([('test',
|
||||
'[DEFAULT]\n'
|
||||
'dt = $foo:$bar\n')])
|
||||
|
||||
self.conf(['--config-file', paths[0]])
|
||||
|
||||
self.assertTrue(hasattr(self.conf, 'dt'))
|
||||
self.assertEqual(self.conf.dt['floo'], 'blaa')
|
||||
|
||||
|
||||
class ConfigDirTestCase(BaseTestCase):
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user