diff --git a/src/rougail/annotator/group.py b/src/rougail/annotator/group.py index 93ca76b4f..499c0667f 100644 --- a/src/rougail/annotator/group.py +++ b/src/rougail/annotator/group.py @@ -55,6 +55,8 @@ class Annotator(Walk): if hasattr(family, 'dynamic'): msg = _(f'the family "{family.name}" cannot be leadership and dynamic together') raise DictConsistencyError(msg, 31, family.xmlfiles) + if not hasattr(family, 'variable'): + continue for idx, variable in enumerate(family.variable.values()): if idx == 0: # it's a leader diff --git a/tests/dictionaries/10leadership_empty/00_base.xml b/tests/dictionaries/10leadership_empty/00_base.xml new file mode 100644 index 000000000..7c9afec49 --- /dev/null +++ b/tests/dictionaries/10leadership_empty/00_base.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/tests/dictionaries/10leadership_empty/__init__.py b/tests/dictionaries/10leadership_empty/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/dictionaries/10leadership_empty/makedict/after.json b/tests/dictionaries/10leadership_empty/makedict/after.json new file mode 100644 index 000000000..9cd2d3dde --- /dev/null +++ b/tests/dictionaries/10leadership_empty/makedict/after.json @@ -0,0 +1,10 @@ +{ + "services.tata_service.activate": { + "owner": "default", + "value": true + }, + "services.tata_service.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/10leadership_empty/makedict/base.json b/tests/dictionaries/10leadership_empty/makedict/base.json new file mode 100644 index 000000000..2bcec6972 --- /dev/null +++ b/tests/dictionaries/10leadership_empty/makedict/base.json @@ -0,0 +1,4 @@ +{ + "services.tata_service.activate": true, + "services.tata_service.manage": true +} diff --git a/tests/dictionaries/10leadership_empty/makedict/before.json b/tests/dictionaries/10leadership_empty/makedict/before.json new file mode 100644 index 000000000..9cd2d3dde --- /dev/null +++ b/tests/dictionaries/10leadership_empty/makedict/before.json @@ -0,0 +1,10 @@ +{ + "services.tata_service.activate": { + "owner": "default", + "value": true + }, + "services.tata_service.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/10leadership_empty/tiramisu/base.py b/tests/dictionaries/10leadership_empty/tiramisu/base.py new file mode 100644 index 000000000..3bc2c1041 --- /dev/null +++ b/tests/dictionaries/10leadership_empty/tiramisu/base.py @@ -0,0 +1,22 @@ +from importlib.machinery import SourceFileLoader as _SourceFileLoader +from importlib.util import spec_from_loader as _spec_from_loader, module_from_spec as _module_from_spec +class func: + pass +_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 function in dir(_func): + if function.startswith('_'): + continue + setattr(func, function, getattr(_func, function)) +try: + from tiramisu3 import * +except: + from tiramisu import * +option_1 = OptionDescription(name="rougail", doc="rougail", children=[]) +option_4 = BoolOption(name="activate", doc="activate", default=True) +option_5 = BoolOption(name="manage", doc="manage", default=True) +option_3 = OptionDescription(name="tata_service", doc="tata.service", children=[option_4, option_5]) +option_2 = OptionDescription(name="services", doc="services", children=[option_3], properties=frozenset({"hidden"})) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, option_2])