Compare commits

...

2 commits

4 changed files with 12 additions and 5 deletions

View file

@ -536,6 +536,10 @@ def test_callback_dyndescription_subdyn():
cfg = Config(od2) cfg = Config(od2)
cfg.property.read_write() cfg.property.read_write()
assert parse_od_get(cfg.value.get()) == {'od.dod2val1.dodval1.st': 'val1', 'od.dod2val1.dodval2.st': 'val1', 'od.dod2val1.out': ['val1', 'val1'], 'od.dod2val2.dodval1.st': 'val1', 'od.dod2val2.dodval2.st': 'val1', 'od.dod2val2.out': ['val1', 'val1'], 'lst': ['val1', 'val2']} assert parse_od_get(cfg.value.get()) == {'od.dod2val1.dodval1.st': 'val1', 'od.dod2val1.dodval2.st': 'val1', 'od.dod2val1.out': ['val1', 'val1'], 'od.dod2val2.dodval1.st': 'val1', 'od.dod2val2.dodval2.st': 'val1', 'od.dod2val2.out': ['val1', 'val1'], 'lst': ['val1', 'val2']}
cfg.option('lst').value.set(["val1", "val3"])
assert parse_od_get(cfg.value.get()) == {'od.dod2val1.dodval1.st': 'val1', 'od.dod2val1.dodval3.st': 'val1', 'od.dod2val1.out': ['val1', 'val1'], 'od.dod2val3.dodval1.st': 'val1', 'od.dod2val3.dodval3.st': 'val1', 'od.dod2val3.out': ['val1', 'val1'], 'lst': ['val1', 'val3']}
cfg.option('lst').value.set(["val1", "val3", None])
assert parse_od_get(cfg.value.get()) == {'od.dod2val1.dodval1.st': 'val1', 'od.dod2val1.dodval3.st': 'val1', 'od.dod2val1.out': ['val1', 'val1'], 'od.dod2val3.dodval1.st': 'val1', 'od.dod2val3.dodval3.st': 'val1', 'od.dod2val3.out': ['val1', 'val1'], 'lst': ['val1', 'val3', None]}
def test_callback_list_dyndescription(): def test_callback_list_dyndescription():

View file

@ -275,6 +275,7 @@ class _TiramisuOptionWalk:
validate_properties, validate_properties,
uncalculated=uncalculated, uncalculated=uncalculated,
with_index=with_index, with_index=with_index,
check_dynamic_without_identifiers=False,
): ):
options.append( options.append(
TiramisuOption( TiramisuOption(

View file

@ -396,6 +396,7 @@ class SubConfig:
*, *,
uncalculated: bool = False, uncalculated: bool = False,
with_index: bool = True, with_index: bool = True,
check_dynamic_without_identifiers: bool = True,
): ):
if self.option.impl_is_leadership() and not uncalculated and with_index: if self.option.impl_is_leadership() and not uncalculated and with_index:
yield from self.get_leadership_children(validate_properties) yield from self.get_leadership_children(validate_properties)
@ -426,8 +427,7 @@ class SubConfig:
child, child,
None, None,
validate_properties, validate_properties,
allow_dynoption=uncalculated, check_dynamic_without_identifiers=check_dynamic_without_identifiers,
check_dynamic_without_identifiers=not uncalculated,
) )
except PropertiesOptionError as err: except PropertiesOptionError as err:
if err.proptype in (["mandatory"], ["empty"]): if err.proptype in (["mandatory"], ["empty"]):
@ -452,7 +452,6 @@ class SubConfig:
validate_properties: bool, validate_properties: bool,
*, *,
properties=undefined, properties=undefined,
allow_dynoption: bool = False,
identifier: Optional[str] = None, identifier: Optional[str] = None,
name: Optional[str] = None, name: Optional[str] = None,
check_index: bool = True, check_index: bool = True,
@ -743,9 +742,11 @@ class _Config(CCache):
len_path = len(paths) - 1 len_path = len(paths) - 1
for idx, name in enumerate(paths): for idx, name in enumerate(paths):
if idx != len_path: if idx != len_path:
check_dynamic_without_identifiers=True
index_ = None index_ = None
true_path_ = None true_path_ = None
else: else:
check_dynamic_without_identifiers=not allow_dynoption
index_ = index index_ = index
true_path_ = true_path true_path_ = true_path
@ -796,8 +797,7 @@ class _Config(CCache):
name=name, name=name,
identifier=identifier, identifier=identifier,
true_path=true_path_, true_path=true_path_,
allow_dynoption=allow_dynoption, check_dynamic_without_identifiers=check_dynamic_without_identifiers,
check_dynamic_without_identifiers=not allow_dynoption,
) )
return subconfig return subconfig

View file

@ -402,6 +402,8 @@ class Values:
for option in options: for option in options:
parent = option.parent parent = option.parent
for identifier in identifier_values: for identifier in identifier_values:
if identifier is None:
continue
name = option.option.impl_getname(identifier) name = option.option.impl_getname(identifier)
opt_subconfig = parent.get_child( opt_subconfig = parent.get_child(
option.option, option.option,