fix: ParamDynOption with disabled properties

This commit is contained in:
egarette@silique.fr 2026-02-19 20:47:35 +01:00
parent dc1aba2ce9
commit 3ed96ef2ad
2 changed files with 29 additions and 10 deletions

View file

@ -3130,3 +3130,15 @@ def test_dynoption_duplicate_5():
cfg.value.get() cfg.value.get()
with pytest.raises(ConflictError): with pytest.raises(ConflictError):
cfg.option('od.od_val').value.get() cfg.option('od.od_val').value.get()
def test_dyn_disabled():
var1 = StrOption("var1", "var1", default=["val1", "val2"], multi=True)
var = StrOption("var", "var", properties=frozenset({"disabled"}))
dyn = DynOptionDescription("dyn", "dyn", identifiers=Calculation(calc_value, Params((ParamOption(var1)))), children=[var])
var2 = StrOption(name="var2", doc="A variable calculated", default=Calculation(calc_value, Params((ParamDynOption(var, ["val1"])))))
od = OptionDescription('od', '', [var1, dyn, var2])
cfg = Config(od)
cfg.property.read_write()
with pytest.raises(ConfigError):
cfg.value.get()

View file

@ -462,7 +462,7 @@ def manager_callback(
or param.raisepropertyerror or param.raisepropertyerror
): ):
raise err from err raise err from err
raise ConfigError(err, subconfig=subconfig) raise ConfigError(str(err), subconfig=subconfig) from err
except ValueError as err: except ValueError as err:
display_name = subconfig.option.impl_get_display_name( display_name = subconfig.option.impl_get_display_name(
subconfig, with_quote=True subconfig, with_quote=True
@ -751,6 +751,7 @@ def manager_callback(
) )
) )
else: else:
try:
new_parents.append( new_parents.append(
parent.get_child( parent.get_child(
doption, doption,
@ -759,13 +760,19 @@ def manager_callback(
name=name, name=name,
) )
) )
except PropertiesOptionError as err:
# raise PropertiesOptionError (which is catched) because must not add value None in carry_out_calculation
if (
param.notraisepropertyerror
or param.raisepropertyerror
):
raise err from err
raise ConfigError(str(err), subconfig=subconfig) from err
parents = new_parents parents = new_parents
if subconfigs_is_a_list: if subconfigs_is_a_list:
subconfigs = parents subconfigs = parents
else: else:
subconfigs = parents[0] subconfigs = parents[0]
else: else:
search_option = param.option search_option = param.option
subconfigs = subconfig.get_common_child( subconfigs = subconfig.get_common_child(