From ac35f2428b61fda39c60e93906d04e352ad22d18 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Fri, 23 May 2025 17:58:35 +0200 Subject: [PATCH] fix: add dependency for calculation in choice values --- tests/test_choice_option.py | 4 ++++ tiramisu/option/choiceoption.py | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/tests/test_choice_option.py b/tests/test_choice_option.py index a5ac271..1e46fec 100644 --- a/tests/test_choice_option.py +++ b/tests/test_choice_option.py @@ -162,6 +162,10 @@ def test_choiceoption_calc_opt_function(config_type): cfg = get_config(cfg, config_type) assert cfg.option('choice').owner.isdefault() # + dep = cfg.option('str').dependencies() + assert len(dep) == 1 + assert dep[0].path() == 'choice' + # cfg.option('choice').value.set('val1') assert cfg.option('choice').owner.get() == owner # diff --git a/tiramisu/option/choiceoption.py b/tiramisu/option/choiceoption.py index 797dd2e..fa5b0d9 100644 --- a/tiramisu/option/choiceoption.py +++ b/tiramisu/option/choiceoption.py @@ -21,11 +21,12 @@ """ChoiceOption """ from typing import Any +from itertools import chain from ..setting import undefined from ..i18n import _ from .option import Option -from ..autolib import Calculation, get_calculated_value +from ..autolib import Calculation, get_calculated_value, ParamOption from ..error import ConfigError, display_list @@ -42,7 +43,11 @@ class ChoiceOption(Option): """ :param values: is a list of values the option can possibly take """ - if not isinstance(values, (Calculation, tuple)): + if isinstance(values, Calculation): + for param in chain(values.params.args, values.params.kwargs.values()): + if isinstance(param, ParamOption): + param.option._add_dependency(self) + elif not isinstance(values, tuple): raise TypeError( _("values must be a tuple or a calculation for {0}").format(name) )