feat: .identifiers can return convert value
This commit is contained in:
parent
d1add3dc5a
commit
47c84895f7
3 changed files with 42 additions and 1 deletions
|
|
@ -28,6 +28,8 @@ def display_name(kls, subconfig, with_quote=False) -> str:
|
|||
class ConvertDynOptionDescription(DynOptionDescription):
|
||||
def convert_identifier_to_path(self, identifier):
|
||||
# remove dot with is illegal
|
||||
if not identifier:
|
||||
return identifier
|
||||
return identifier.replace('.', '')
|
||||
|
||||
|
||||
|
|
@ -2140,6 +2142,10 @@ def test_leadership_dyndescription_convert():
|
|||
assert cfg.option('od.stval2.st1.st1').value.get() == []
|
||||
assert cfg.option('od.stval1.st1.st1').owner.isdefault()
|
||||
assert cfg.option('od.stval2.st1.st1').owner.isdefault()
|
||||
assert cfg.option('od.stval2.st1.st1').identifiers() == ["val.2"]
|
||||
assert cfg.option('od.stval2.st1.st1').identifiers(convert=True) == ["val2"]
|
||||
assert cfg.option('od.stval2').identifiers(only_self=True) == ["val.1", "val.2"]
|
||||
assert cfg.option('od.stval2').identifiers(only_self=True, convert=True) == ["val1", "val2"]
|
||||
#
|
||||
cfg.option('od.stval1.st1.st1').value.set(['yes'])
|
||||
assert parse_od_get(cfg.value.get()) == {'od.stval1.st1.st1': [{'od.stval1.st1.st1': 'yes', 'od.stval1.st1.st2': None}], 'od.stval2.st1.st1': []}
|
||||
|
|
@ -2184,6 +2190,23 @@ def test_leadership_dyndescription_convert():
|
|||
# assert not list_sessions()
|
||||
|
||||
|
||||
def test_leadership_dyndescription_convert_2():
|
||||
identifier = StrOption("identifier", "", ['val.1', 'val.2', None], multi=True)
|
||||
st1 = StrOption('st1', "", multi=True)
|
||||
st2 = StrOption('st2', "", multi=True)
|
||||
stm = Leadership('st1', '', [st1, st2])
|
||||
st = ConvertDynOptionDescription('st', '', [stm], identifiers=Calculation(calc_value, Params((ParamOption(identifier),))))
|
||||
od = OptionDescription('od', '', [st])
|
||||
od1 = OptionDescription('od', '', [od, identifier])
|
||||
cfg = Config(od1)
|
||||
owner = cfg.owner.get()
|
||||
#
|
||||
assert cfg.option('od.stval2.st1.st1').identifiers() == ["val.2"]
|
||||
assert cfg.option('od.stval2.st1.st1').identifiers(convert=True) == ["val2"]
|
||||
assert cfg.option('od.stval2').identifiers(only_self=True) == ["val.1", "val.2"]
|
||||
assert cfg.option('od.stval2').identifiers(only_self=True, convert=True) == ["val1", "val2"]
|
||||
|
||||
|
||||
def test_leadership_callback_samegroup_dyndescription_convert():
|
||||
st1 = StrOption('st1', "", multi=True)
|
||||
st2 = StrOption('st2', "", multi=True)
|
||||
|
|
|
|||
|
|
@ -569,12 +569,26 @@ class _TiramisuOptionOptionDescription:
|
|||
self,
|
||||
only_self: bool = False,
|
||||
uncalculated: bool = False,
|
||||
convert: bool = False,
|
||||
):
|
||||
"""Get identifiers for dynamic option"""
|
||||
if not only_self:
|
||||
if self._subconfig.is_dynamic_without_identifiers and not uncalculated:
|
||||
raise AttributeOptionError(self._subconfig.path, "option-dynamic")
|
||||
return self._subconfig.identifiers
|
||||
if not convert:
|
||||
return self._subconfig.identifiers
|
||||
identifiers = []
|
||||
dynconfig = None
|
||||
subconfig = self._subconfig
|
||||
while not dynconfig:
|
||||
if subconfig.option.impl_is_optiondescription() and subconfig.option.impl_is_dynoptiondescription():
|
||||
dynconfig = subconfig
|
||||
subconfig = subconfig.parent
|
||||
for identifier in self._subconfig.identifiers:
|
||||
if identifier is None:
|
||||
continue
|
||||
identifiers.append(dynconfig.option.convert_identifier_to_path(identifier))
|
||||
return identifiers
|
||||
if (
|
||||
not self._subconfig.option.impl_is_optiondescription()
|
||||
or not self._subconfig.option.impl_is_dynoptiondescription()
|
||||
|
|
@ -587,6 +601,7 @@ class _TiramisuOptionOptionDescription:
|
|||
return self._subconfig.option.get_identifiers(
|
||||
self._subconfig.parent,
|
||||
uncalculated=uncalculated,
|
||||
convert=convert,
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -108,6 +108,7 @@ class DynOptionDescription(OptionDescription):
|
|||
*,
|
||||
uncalculated: bool = False,
|
||||
from_display_name: bool = False,
|
||||
convert: bool = False,
|
||||
) -> List[str]:
|
||||
"""get dynamic identifiers"""
|
||||
subconfig = parent.get_child(
|
||||
|
|
@ -150,6 +151,8 @@ class DynOptionDescription(OptionDescription):
|
|||
cval, self.impl_get_display_name(subconfig, with_quote=True)
|
||||
)
|
||||
)
|
||||
elif convert:
|
||||
values_.append(cval)
|
||||
else:
|
||||
values_.append(val)
|
||||
if (
|
||||
|
|
|
|||
Loading…
Reference in a new issue