diff --git a/test/test_metaconfig.py b/test/test_metaconfig.py index 449228a..adc46fe 100644 --- a/test/test_metaconfig.py +++ b/test/test_metaconfig.py @@ -56,6 +56,13 @@ def test_unknown_config(): raises(ConfigError, "meta.config('unknown')") +def test_path(): + meta = make_metaconfig() + assert meta.config.path() == 'meta' + assert meta.config('conf1').config.path() == 'meta.conf1' + assert meta.config('conf2').config.path() == 'meta.conf2' + + #FIXME ne pas mettre 2 meta dans une config #FIXME ne pas mettre 2 OD differents dans un meta def test_none(): @@ -335,6 +342,20 @@ def test_group_group(): assert grp2.config('grp.conf9').option('od1.i1').owner.get() is owners.user +def test_group_group_path(): + i1 = IntOption('i1', '') + od1 = OptionDescription('od1', '', [i1]) + od2 = OptionDescription('od2', '', [od1]) + conf1 = Config(od2, session_id='conf9') + conf2 = Config(od2, session_id='conf10') + grp = GroupConfig([conf1, conf2], 'grp') + grp2 = GroupConfig([grp], 'grp2') + assert grp2.config.path() == 'grp2' + assert grp2.config('grp').config.path() == 'grp' + assert grp2.config('grp.conf9').config.path() == 'conf9' + assert grp2.config('grp.conf10').config.path() == 'conf10' + + def test_meta_unconsistent(): i1 = IntOption('i1', '') i2 = IntOption('i2', '', default=1) diff --git a/test/test_mixconfig.py b/test/test_mixconfig.py index f996d6a..4418eaf 100644 --- a/test/test_mixconfig.py +++ b/test/test_mixconfig.py @@ -90,6 +90,14 @@ def make_mixconfig(double=False): return mix +def test_mix_name(): + mix = make_mixconfig(True) + assert mix.config.path() == 'doublemix' + assert mix.config('mix').config.path() == 'doublemix.mix' + assert mix.config('mix.conf1').config.path() == 'doublemix.mix.conf1' + assert mix.config('mix.conf2').config.path() == 'doublemix.mix.conf2' + + def test_mix_not_group(): i1 = IntOption('i1', '') od1 = OptionDescription('od1', '', [i1]) diff --git a/tiramisu/api.py b/tiramisu/api.py index 65f4be6..bc96533 100644 --- a/tiramisu/api.py +++ b/tiramisu/api.py @@ -1167,6 +1167,9 @@ class _TiramisuContextConfig(TiramisuContext, _TiramisuContextConfigReset): def metaconfig(self): return Config(self._config_bag.context.cfgimpl_get_meta()) + def path(self): + return self._config_bag.context.cfgimpl_get_path() + class _TiramisuContextGroupConfig(TiramisuContext): """Actions to GroupConfig""" @@ -1198,6 +1201,9 @@ class _TiramisuContextGroupConfig(TiramisuContext): config = config.getconfig(spath) return Config(config) + def path(self): + return self._config_bag.context.cfgimpl_get_path() + class _TiramisuContextMixConfig(_TiramisuContextGroupConfig, _TiramisuContextConfigReset): """Actions to MixConfig""" diff --git a/tiramisu/config.py b/tiramisu/config.py index 383bd8b..228b419 100644 --- a/tiramisu/config.py +++ b/tiramisu/config.py @@ -618,7 +618,9 @@ class _CommonConfig(SubConfig): descr.impl_build_force_store_values(config_bag) def cfgimpl_get_path(self, dyn=True): - return None + if self._impl_meta is None or self._impl_meta() is None: + return self._impl_name + return self._impl_meta().cfgimpl_get_path() + '.' + self._impl_name def cfgimpl_get_meta(self): if self._impl_meta is not None: