diff --git a/src/rougail/template/base.py b/src/rougail/template/base.py index 455cbbfd1..bcfe82bd6 100644 --- a/src/rougail/template/base.py +++ b/src/rougail/template/base.py @@ -184,6 +184,11 @@ class RougailExtra: except KeyError: raise AttributeError(f'unable to find extra "{key}"') + def __getitem__(self, + key: str, + ) -> Any: + return self.__getattr__(key) + def __iter__(self): return iter(self._suboption.values()) diff --git a/tests/dictionaries/60extra_leadership_name_item/00-base.xml b/tests/dictionaries/60extra_leadership_name_item/00-base.xml new file mode 100644 index 000000000..e6f1ef4eb --- /dev/null +++ b/tests/dictionaries/60extra_leadership_name_item/00-base.xml @@ -0,0 +1,19 @@ + + + + + /etc/mailname + /etc/mailname2 + + + + + + + + + diff --git a/tests/dictionaries/60extra_leadership_name_item/__init__.py b/tests/dictionaries/60extra_leadership_name_item/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/60extra_leadership_name_item/extra_dirs/extra/00-base.xml b/tests/dictionaries/60extra_leadership_name_item/extra_dirs/extra/00-base.xml new file mode 100644 index 000000000..0a2a87ef6 --- /dev/null +++ b/tests/dictionaries/60extra_leadership_name_item/extra_dirs/extra/00-base.xml @@ -0,0 +1,16 @@ + + + + + + + test + + + pre + + + + + + diff --git a/tests/dictionaries/60extra_leadership_name_item/makedict/after.json b/tests/dictionaries/60extra_leadership_name_item/makedict/after.json new file mode 100644 index 000000000..706146a93 --- /dev/null +++ b/tests/dictionaries/60extra_leadership_name_item/makedict/after.json @@ -0,0 +1,48 @@ +{ + "rougail.general.mode_conteneur_actif": { + "owner": "default", + "value": "non" + }, + "rougail.general.activer_ejabberd": { + "owner": "default", + "value": "non" + }, + "extra.ejabberd.new_name.description": { + "owner": "default", + "value": [ + "test" + ] + }, + "extra.ejabberd.new_name.mode": { + "owner": [ + "default" + ], + "value": [ + "pre" + ] + }, + "services.test.files.mailname.name": { + "owner": "default", + "value": "/etc/mailname" + }, + "services.test.files.mailname.activate": { + "owner": "default", + "value": true + }, + "services.test.files.mailname2.name": { + "owner": "default", + "value": "/etc/mailname2" + }, + "services.test.files.mailname2.activate": { + "owner": "default", + "value": true + }, + "services.test.activate": { + "owner": "default", + "value": true + }, + "services.test.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/60extra_leadership_name_item/makedict/base.json b/tests/dictionaries/60extra_leadership_name_item/makedict/base.json new file mode 100644 index 000000000..5e9f4d0fc --- /dev/null +++ b/tests/dictionaries/60extra_leadership_name_item/makedict/base.json @@ -0,0 +1,16 @@ +{ + "rougail.general.mode_conteneur_actif": "non", + "rougail.general.activer_ejabberd": "non", + "extra.ejabberd.new_name.description": [ + { + "extra.ejabberd.new_name.description": "test", + "extra.ejabberd.new_name.mode": "pre" + } + ], + "services.test.files.mailname.name": "/etc/mailname", + "services.test.files.mailname.activate": true, + "services.test.files.mailname2.name": "/etc/mailname2", + "services.test.files.mailname2.activate": true, + "services.test.activate": true, + "services.test.manage": true +} diff --git a/tests/dictionaries/60extra_leadership_name_item/makedict/before.json b/tests/dictionaries/60extra_leadership_name_item/makedict/before.json new file mode 100644 index 000000000..706146a93 --- /dev/null +++ b/tests/dictionaries/60extra_leadership_name_item/makedict/before.json @@ -0,0 +1,48 @@ +{ + "rougail.general.mode_conteneur_actif": { + "owner": "default", + "value": "non" + }, + "rougail.general.activer_ejabberd": { + "owner": "default", + "value": "non" + }, + "extra.ejabberd.new_name.description": { + "owner": "default", + "value": [ + "test" + ] + }, + "extra.ejabberd.new_name.mode": { + "owner": [ + "default" + ], + "value": [ + "pre" + ] + }, + "services.test.files.mailname.name": { + "owner": "default", + "value": "/etc/mailname" + }, + "services.test.files.mailname.activate": { + "owner": "default", + "value": true + }, + "services.test.files.mailname2.name": { + "owner": "default", + "value": "/etc/mailname2" + }, + "services.test.files.mailname2.activate": { + "owner": "default", + "value": true + }, + "services.test.activate": { + "owner": "default", + "value": true + }, + "services.test.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/60extra_leadership_name_item/result/etc/mailname b/tests/dictionaries/60extra_leadership_name_item/result/etc/mailname new file mode 100644 index 000000000..dc34cc5b0 --- /dev/null +++ b/tests/dictionaries/60extra_leadership_name_item/result/etc/mailname @@ -0,0 +1,11 @@ +contain test +1 +leader: test +follower: pre +supeq +sup +diff +testpre +pretest +leader2: test +follower2: pre diff --git a/tests/dictionaries/60extra_leadership_name_item/result/etc/mailname2 b/tests/dictionaries/60extra_leadership_name_item/result/etc/mailname2 new file mode 100644 index 000000000..dc34cc5b0 --- /dev/null +++ b/tests/dictionaries/60extra_leadership_name_item/result/etc/mailname2 @@ -0,0 +1,11 @@ +contain test +1 +leader: test +follower: pre +supeq +sup +diff +testpre +pretest +leader2: test +follower2: pre diff --git a/tests/dictionaries/60extra_leadership_name_item/result/tmpfiles.d/0rougail.conf b/tests/dictionaries/60extra_leadership_name_item/result/tmpfiles.d/0rougail.conf new file mode 100644 index 000000000..7a8d00f42 --- /dev/null +++ b/tests/dictionaries/60extra_leadership_name_item/result/tmpfiles.d/0rougail.conf @@ -0,0 +1,4 @@ +C /etc/mailname 0644 root root - /usr/local/lib/etc/mailname +z /etc/mailname - - - - - +C /etc/mailname2 0644 root root - /usr/local/lib/etc/mailname2 +z /etc/mailname2 - - - - - diff --git a/tests/dictionaries/60extra_leadership_name_item/tiramisu/base.py b/tests/dictionaries/60extra_leadership_name_item/tiramisu/base.py new file mode 100644 index 000000000..13ce8ee08 --- /dev/null +++ b/tests/dictionaries/60extra_leadership_name_item/tiramisu/base.py @@ -0,0 +1,37 @@ +from importlib.machinery import SourceFileLoader +from importlib.util import spec_from_loader, module_from_spec +loader = SourceFileLoader('func', 'tests/dictionaries/../eosfunc/test.py') +spec = spec_from_loader(loader.name, loader) +func = module_from_spec(spec) +loader.exec_module(func) +for key, value in dict(locals()).items(): + if key != ['SourceFileLoader', 'func']: + setattr(func, key, value) +try: + from tiramisu3 import * +except: + from tiramisu import * +option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="non", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal"})) +option_4 = StrOption(name="activer_ejabberd", doc="No change", default="non", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal"})) +option_2 = OptionDescription(name="general", doc="général", children=[option_3, option_4], properties=frozenset({"normal"})) +option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2]) +option_8 = StrOption(name="description", doc="description", multi=True, default=['test'], properties=frozenset({"mandatory"})) +option_9 = StrOption(name="mode", doc="mode", multi=True, default_multi="pre", properties=frozenset({"mandatory", "normal"})) +option_7 = Leadership(name="new_name", doc="new_name", children=[option_8, option_9], properties=frozenset({"normal"})) +option_6 = OptionDescription(name="ejabberd", doc="ejabberd", children=[option_7], properties=frozenset({"normal"})) +option_5 = OptionDescription(name="extra", doc="extra", children=[option_6]) +option_14 = FilenameOption(name="name", doc="name", default="/etc/mailname") +option_15 = BoolOption(name="activate", doc="activate", default=True) +option_13 = OptionDescription(name="mailname", doc="mailname", children=[option_14, option_15]) +option_13.impl_set_information('source', "mailname") +option_17 = FilenameOption(name="name", doc="name", default="/etc/mailname2") +option_18 = BoolOption(name="activate", doc="activate", default=True) +option_16 = OptionDescription(name="mailname2", doc="mailname2", children=[option_17, option_18]) +option_16.impl_set_information('engine', "jinja2") +option_16.impl_set_information('source', "mailname2") +option_12 = OptionDescription(name="files", doc="files", children=[option_13, option_16]) +option_19 = BoolOption(name="activate", doc="activate", default=True) +option_20 = BoolOption(name="manage", doc="manage", default=True) +option_11 = OptionDescription(name="test", doc="test", children=[option_12, option_19, option_20]) +option_10 = OptionDescription(name="services", doc="services", children=[option_11], properties=frozenset({"hidden"})) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, option_5, option_10]) diff --git a/tests/dictionaries/60extra_leadership_name_item/tmpl/mailname b/tests/dictionaries/60extra_leadership_name_item/tmpl/mailname new file mode 100644 index 000000000..4f68721d8 --- /dev/null +++ b/tests/dictionaries/60extra_leadership_name_item/tmpl/mailname @@ -0,0 +1,35 @@ +%if 'test' in %%extra['ejabberd']['new_name'] +contain test +%end if +%%len(%%extra['ejabberd']['new_name']) +%if 'a' in %%extra['ejabberd']['new_name'] +contain a +%end if +%for %%description in %%extra['ejabberd']['new_name'] +leader: %%description +follower: %%description['mode'] +%if %%description <= %%description['mode'] +infeq +%end if +%if %%description >= %%description['mode'] +supeq +%end if +%if %%description < %%description['mode'] +inf +%end if +%if %%description > %%description['mode'] +sup +%end if +%if %%description == %%description['mode'] +eq +%end if +%if %%description != %%description['mode'] +diff +%end if +%set %%var = %%description + %%description['mode'] +%%var +%set %%var = %%description['mode'] + %%description +%%var +%end for +leader2: %%extra['ejabberd']['new_name'][0]['description'] +follower2: %%extra['ejabberd']['new_name'][0]['mode'] diff --git a/tests/dictionaries/60extra_leadership_name_item/tmpl/mailname2 b/tests/dictionaries/60extra_leadership_name_item/tmpl/mailname2 new file mode 100644 index 000000000..4860700df --- /dev/null +++ b/tests/dictionaries/60extra_leadership_name_item/tmpl/mailname2 @@ -0,0 +1,33 @@ +{% if 'test' in extra.ejabberd.new_name -%} +contain test +{% endif -%} +{{ extra.ejabberd.new_name |length }} +{% if 'a' in extra.ejabberd.new_name -%} +contain a +{% endif -%} +{% for description in extra.ejabberd.new_name -%} +leader: {{ description }} +follower: {{ description.mode }} +{% if description <= description.mode -%} +infeq +{% endif -%} +{% if description >= description.mode -%} +supeq +{% endif -%} +{% if description < description.mode -%} +inf +{% endif -%} +{% if description > description.mode -%} +sup +{% endif -%} +{% if description == description.mode -%} +eq +{% endif -%} +{% if description != description.mode -%} +diff +{% endif -%} +{{ description + description.mode }} +{{ description.mode + description }} +{% endfor -%} +leader2: {{ extra.ejabberd.new_name[0].description }} +follower2: {{ extra.ejabberd.new_name[0].mode }}