diff --git a/tests/test_metaconfig.py b/tests/test_metaconfig.py index 9ce25df..463b905 100644 --- a/tests/test_metaconfig.py +++ b/tests/test_metaconfig.py @@ -87,11 +87,14 @@ def test_none(): conf2 = meta.config('conf2') assert meta.option('od1.i3').value.get() is conf1.option('od1.i3').value.get() is conf2.option('od1.i3').value.get() is None assert meta.option('od1.i3').owner.get() is conf1.option('od1.i3').owner.get() is conf2.option('od1.i3').owner.get() is owners.default + assert meta.option('od1.i3').owner.isdefault() and conf1.option('od1.i3').owner.isdefault() # #assert meta.option('od1.i3').value.set(3) == [] meta.option('od1.i3').value.set(3) assert meta.option('od1.i3').value.get() == conf1.option('od1.i3').value.get() == conf2.option('od1.i3').value.get() == 3 assert meta.option('od1.i3').owner.get() is conf1.option('od1.i3').owner.get() is conf2.option('od1.i3').owner.get() is owners.meta1 + assert not meta.option('od1.i3').owner.isdefault() + assert conf1.option('od1.i3').owner.isdefault() # conf1.option('od1.i3').value.set(2) assert meta.option('od1.i3').value.get() == conf2.option('od1.i3').value.get() == 3 @@ -110,6 +113,8 @@ def test_none(): assert conf1.option('od1.i3').value.get() == 2 assert meta.option('od1.i3').owner.get() is conf2.option('od1.i3').owner.get() is owners.default assert conf1.option('od1.i3').owner.get() is owners.user + assert meta.option("od1.i3").owner.default() is owners.default + assert conf1.option("od1.i3").owner.default() is owners.default # conf1.option('od1.i3').value.reset() assert meta.option('od1.i3').value.get() is conf1.option('od1.i3').value.get() is conf2.option('od1.i3').value.get() is None diff --git a/tiramisu/api.py b/tiramisu/api.py index 335d6d6..553f098 100644 --- a/tiramisu/api.py +++ b/tiramisu/api.py @@ -717,10 +717,27 @@ class TiramisuOptionOwner(CommonTiramisuOption): self._subconfig, validate_meta=not only_self ) + @option_type(["symlink", "option", "with_index"]) + def default(self): + values = self._config_bag.context.get_values() + return values.get_default_owner(self._subconfig) + @option_type(["symlink", "option", "with_index"]) def isdefault(self): """Is option has defaut value""" - return self._config_bag.context.get_owner(self._subconfig) == owners.default + subconfig = self._subconfig + s_properties = subconfig.properties + if ( + "frozen" in s_properties + and "force_default_on_freeze" in s_properties + ): + return True + context = self._config_bag.context + subconfig = context._get( + subconfig, + True, + ) + return not context.get_values().hasvalue(subconfig.path, index=subconfig.index) @option_type(["option", "with_index"]) def set( @@ -1775,7 +1792,7 @@ class TiramisuContextOption(TiramisuConfig, _TiramisuOptionWalk): self, ): """Get option path""" - return None + return self._config_bag.context.get_config_path() def has_dependency( self, @@ -1840,6 +1857,9 @@ class TiramisuContextOption(TiramisuConfig, _TiramisuOptionWalk): self._load_dict() return self._tiramisu_dict.set_updates(body) + def __repr__(self): + return f'<{self.__class__.__name__} path="{self.path()}">' + class _TiramisuContextConfigReset: def reset(self): @@ -2075,9 +2095,7 @@ class TiramisuAPI(TiramisuHelp): class ConfigProp(TiramisuAPI, TiramisuContextOption): - def __repr__(self): - return f"" - + pass class Config(TiramisuAPI, TiramisuContextOption): """Root config object that enables us to handle the configuration options""" @@ -2114,9 +2132,6 @@ class Config(TiramisuAPI, TiramisuContextOption): except ConfigError: pass - def __repr__(self): - return f"" - class MetaConfig(TiramisuAPI, TiramisuContextOption): """MetaConfig object that enables us to handle the sub configuration's options diff --git a/tiramisu/config.py b/tiramisu/config.py index e9bc3b5..b484fe9 100644 --- a/tiramisu/config.py +++ b/tiramisu/config.py @@ -1881,5 +1881,5 @@ class KernelMetaConfig(KernelMixConfig): config, ): if self._impl_descr is not config.get_description(): - raise ValueError(_("metaconfig must " "have the same optiondescription")) + raise ValueError(_("metaconfig must have the same optiondescription")) super().add_config(config) diff --git a/tiramisu/value.py b/tiramisu/value.py index b40301f..a59a361 100644 --- a/tiramisu/value.py +++ b/tiramisu/value.py @@ -126,6 +126,18 @@ class Values: ) return value, has_calculation + def get_default_owner( + self, + subconfig: "SubConfig", + ) -> Any: + msubconfig = self._get_modified_parent(subconfig) + if msubconfig is not None: + # retrieved value from parent config + return msubconfig.config_bag.context.get_values().getowner( + msubconfig + ) + return owners.default + def get_default_value( self, subconfig: "SubConfig",