diff --git a/src/rougail/annotator.py b/src/rougail/annotator.py
index 97719d60..4455b6b3 100644
--- a/src/rougail/annotator.py
+++ b/src/rougail/annotator.py
@@ -299,18 +299,14 @@ class SpaceAnnotator(object):
self.objectspace = objectspace
self.valid_enums = {}
self.force_value = {}
- self.has_calc = []
- self.force_no_value = []
self.force_not_mandatory = []
if eosfunc_file:
self.eosfunc = imp.load_source('eosfunc', eosfunc_file)
else:
self.eosfunc = None
if HIGH_COMPATIBILITY:
- self.default_has_no_value = []
self.has_frozen_if_in_condition = []
- self.default_variable_options()
- self.variable_submulti()
+ self.convert_variable()
self.convert_auto_freeze()
self.convert_groups()
self.filter_check()
@@ -519,53 +515,35 @@ class SpaceAnnotator(object):
varpath = self.paths.get_variable_path(family.dynamic, namespace)
family.dynamic = varpath
- def _annotate_variable(self, variable, family_mode, path, is_follower=False):
- if (HIGH_COMPATIBILITY and variable.type == 'choice' and variable.mode != modes_level[-1] and variable.mandatory is True and path in self.default_has_no_value):
- variable.mode = modes_level[0]
- if variable.type == 'choice' and is_follower and family_mode == modes_level[0] and variable.mandatory is True:
- variable.mode = modes_level[0]
+ def annotate_variable(self, variable, family_mode, path, is_follower=False):
# if the variable is mandatory and doesn't have any value
# then the variable's mode is set to 'basic'
- has_value = hasattr(variable, 'value') and variable.value != None
- if (path not in self.has_calc and variable.mandatory is True and
- (not has_value or is_follower) and variable.type != 'choice'):
+ has_value = hasattr(variable, 'value')
+ if variable.mandatory is True and (not has_value or is_follower):
variable.mode = modes_level[0]
- if has_value:
- if not HIGH_COMPATIBILITY or (not path.startswith(f'{VARIABLE_NAMESPACE}.services.') \
- and path not in self.force_no_value and path not in self.force_not_mandatory):
- variable.mandatory = True
+ if variable.mode != None and modes[variable.mode] < modes[family_mode] and (not is_follower or variable.mode != modes_level[0]):
+ variable.mode = family_mode
+ if has_value and path not in self.force_not_mandatory:
+ variable.mandatory = True
if variable.hidden is True:
variable.frozen = True
if not variable.auto_save is True and 'force_default_on_freeze' not in vars(variable):
variable.force_default_on_freeze = True
- if variable.name == 'frozen' and not variable.auto_save is True:
- variable.force_default_on_freeze = True
- if variable.mode != None and not is_follower and modes[variable.mode] < modes[family_mode]:
- variable.mode = family_mode
- if variable.mode != None and variable.mode != modes_level[0] and modes[variable.mode] < modes[family_mode]:
- variable.mode = family_mode
- def default_variable_options(self):
- if hasattr(self.space, 'variables'):
- for families in self.space.variables.values():
- if hasattr(families, 'family'):
- for family in families.family.values():
- if hasattr(family, 'variable'):
- for variable in family.variable.values():
- if not hasattr(variable, 'type'):
- variable.type = 'string'
- if variable.type != 'symlink' and not hasattr(variable, 'description'):
- variable.description = variable.name
-
- def variable_submulti(self):
- if hasattr(self.space, 'variables'):
- for families in self.space.variables.values():
- if hasattr(families, 'family'):
- for family in families.family.values():
- if hasattr(family, 'variable'):
- for variable in family.variable.values():
- if variable.submulti:
- variable.multi = 'submulti'
+ def convert_variable(self):
+ if not hasattr(self.space, 'variables'):
+ return
+ for families in self.space.variables.values():
+ if hasattr(families, 'family'):
+ for family in families.family.values():
+ if hasattr(family, 'variable'):
+ for variable in family.variable.values():
+ if not hasattr(variable, 'type'):
+ variable.type = 'string'
+ if variable.type != 'symlink' and not hasattr(variable, 'description'):
+ variable.description = variable.name
+ if variable.submulti:
+ variable.multi = 'submulti'
def convert_auto_freeze(self): # pylint: disable=C0111
if hasattr(self.space, 'variables'):
@@ -584,7 +562,6 @@ class SpaceAnnotator(object):
new_condition.param = [new_param]
new_target = self.objectspace.target()
new_target.type = 'variable'
- print(variables.name, VARIABLE_NAMESPACE)
if variables.name == VARIABLE_NAMESPACE:
path = variable.name
else:
@@ -596,41 +573,37 @@ class SpaceAnnotator(object):
self.space.constraints.condition.append(new_condition)
def _set_valid_enum(self, variable, values, type_):
- if isinstance(values, list):
- variable.mandatory = True
- variable.choice = []
- choices = []
- for value in values:
- choice = self.objectspace.choice()
- try:
- if type_ in CONVERSION:
- choice.name = CONVERSION[type_](value)
- else:
- choice.name = str(value)
- except:
- raise CreoleDictConsistencyError(_(f'unable to change type of a valid_enum entry "{value}" is not a valid "{type_}" for "{variable.name}"'))
- choices.append(choice.name)
- choice.type = type_
- variable.choice.append(choice)
- if not variable.choice:
- raise CreoleDictConsistencyError(_('empty valid enum is not allowed for variable {}').format(variable.name))
- if hasattr(variable, 'value'):
- for value in variable.value:
- value.type = type_
- if type_ in CONVERSION:
- cvalue = CONVERSION[type_](value.name)
- else:
- cvalue = value.name
- if cvalue not in choices:
- raise CreoleDictConsistencyError(_('value "{}" of variable "{}" is not in list of all expected values ({})').format(value.name, variable.name, choices))
- else:
- new_value = self.objectspace.value()
- new_value.name = values[0]
- new_value.type = type_
- variable.value = [new_value]
+ variable.mandatory = True
+ variable.choice = []
+ choices = []
+ for value in values:
+ choice = self.objectspace.choice()
+ try:
+ if type_ in CONVERSION:
+ choice.name = CONVERSION[type_](value)
+ else:
+ choice.name = str(value)
+ except:
+ raise CreoleDictConsistencyError(_(f'unable to change type of a valid_enum entry "{value}" is not a valid "{type_}" for "{variable.name}"'))
+ choices.append(choice.name)
+ choice.type = type_
+ variable.choice.append(choice)
+ if not variable.choice:
+ raise CreoleDictConsistencyError(_('empty valid enum is not allowed for variable {}').format(variable.name))
+ if hasattr(variable, 'value'):
+ for value in variable.value:
+ value.type = type_
+ if type_ in CONVERSION:
+ cvalue = CONVERSION[type_](value.name)
+ else:
+ cvalue = value.name
+ if cvalue not in choices:
+ raise CreoleDictConsistencyError(_('value "{}" of variable "{}" is not in list of all expected values ({})').format(value.name, variable.name, choices))
else:
- # probe choice
- variable.choice = values
+ new_value = self.objectspace.value()
+ new_value.name = values[0]
+ new_value.type = type_
+ variable.value = [new_value]
variable.type = 'choice'
def _convert_valid_enum(self, variable, path):
@@ -694,7 +667,7 @@ class SpaceAnnotator(object):
else:
is_follower = False
path = '{}.{}.{}'.format(family.path, variable.name, follower.name)
- self._annotate_variable(follower, family_mode, path, is_follower)
+ self.annotate_variable(follower, family_mode, path, is_follower)
# leader's mode is minimum level
if modes[variable.variable[0].mode] > modes[follower.mode]:
follower.mode = variable.variable[0].mode
@@ -707,7 +680,7 @@ class SpaceAnnotator(object):
if variable.auto_freeze is True and variable.mode != modes_level[-1]:
variable.mode = modes_level[0]
path = '{}.{}'.format(family.path, variable.name)
- self._annotate_variable(variable, family_mode, path)
+ self.annotate_variable(variable, family_mode, path)
def convert_fill(self): # pylint: disable=C0111,R0912
if not hasattr(self.space, 'constraints') or not hasattr(self.space.constraints, 'fill'):
@@ -764,8 +737,6 @@ class SpaceAnnotator(object):
value.param = fill.param
variable = self.paths.get_variable_obj(fill.target)
variable.value = [value]
- self.force_not_mandatory.append(fill.target)
- self.has_calc.append(fill.target)
del self.space.constraints.fill
def filter_separators(self): # pylint: disable=C0111,R0201
diff --git a/tests/flattener_dicos/01fill_number/result/00-base.xml b/tests/flattener_dicos/01fill_number/result/00-base.xml
index 54dbe833..f5cee6a4 100644
--- a/tests/flattener_dicos/01fill_number/result/00-base.xml
+++ b/tests/flattener_dicos/01fill_number/result/00-base.xml
@@ -7,6 +7,7 @@
force_default_on_freeze
frozen
hidden
+ mandatory
normal
3
diff --git a/tests/flattener_dicos/10autosave_hidden/result/00-base.xml b/tests/flattener_dicos/10autosave_hidden/result/00-base.xml
index d7603fff..200c4b01 100644
--- a/tests/flattener_dicos/10autosave_hidden/result/00-base.xml
+++ b/tests/flattener_dicos/10autosave_hidden/result/00-base.xml
@@ -17,6 +17,7 @@
force_store_value
frozen
hidden
+ mandatory
basic
oui
diff --git a/tests/flattener_dicos/10autosave_hidden_frozenifin/result/00-base.xml b/tests/flattener_dicos/10autosave_hidden_frozenifin/result/00-base.xml
index 35929cce..c7708ec4 100644
--- a/tests/flattener_dicos/10autosave_hidden_frozenifin/result/00-base.xml
+++ b/tests/flattener_dicos/10autosave_hidden_frozenifin/result/00-base.xml
@@ -15,6 +15,7 @@
force_store_value
+ mandatory
basic
frozen
hidden
diff --git a/tests/flattener_dicos/10leadership_append/result/00-base.xml b/tests/flattener_dicos/10leadership_append/result/00-base.xml
index a760ca7d..2d519e4a 100644
--- a/tests/flattener_dicos/10leadership_append/result/00-base.xml
+++ b/tests/flattener_dicos/10leadership_append/result/00-base.xml
@@ -17,12 +17,14 @@
normal
+ mandatory
normal
valfill
+ mandatory
normal
rougail.general1.leader.follower1
diff --git a/tests/flattener_dicos/10leadership_auto/result/00-base.xml b/tests/flattener_dicos/10leadership_auto/result/00-base.xml
index d4ec7ef4..f1bee238 100644
--- a/tests/flattener_dicos/10leadership_auto/result/00-base.xml
+++ b/tests/flattener_dicos/10leadership_auto/result/00-base.xml
@@ -17,6 +17,7 @@
force_default_on_freeze
frozen
hidden
+ mandatory
normal
valfill
@@ -26,6 +27,7 @@
force_default_on_freeze
frozen
hidden
+ mandatory
normal
rougail.general.leader.follower1
@@ -35,6 +37,7 @@
force_default_on_freeze
frozen
hidden
+ mandatory
normal
rougail.general.leader.leader
diff --git a/tests/flattener_dicos/10leadership_autoleader/result/00-base.xml b/tests/flattener_dicos/10leadership_autoleader/result/00-base.xml
index e752e967..c4752b18 100644
--- a/tests/flattener_dicos/10leadership_autoleader/result/00-base.xml
+++ b/tests/flattener_dicos/10leadership_autoleader/result/00-base.xml
@@ -17,6 +17,7 @@
force_default_on_freeze
frozen
hidden
+ mandatory
normal
valfill
@@ -26,6 +27,7 @@
force_default_on_freeze
frozen
hidden
+ mandatory
normal
rougail.general.leader.leader
diff --git a/tests/flattener_dicos/10leadership_autoleader_expert/result/00-base.xml b/tests/flattener_dicos/10leadership_autoleader_expert/result/00-base.xml
index 62ebc334..6ca4885a 100644
--- a/tests/flattener_dicos/10leadership_autoleader_expert/result/00-base.xml
+++ b/tests/flattener_dicos/10leadership_autoleader_expert/result/00-base.xml
@@ -19,6 +19,7 @@
force_default_on_freeze
frozen
+ mandatory
valfill
diff --git a/tests/flattener_dicos/10leadership_autosaveexpert/result/00-base.xml b/tests/flattener_dicos/10leadership_autosaveexpert/result/00-base.xml
index 25901650..8d235df7 100644
--- a/tests/flattener_dicos/10leadership_autosaveexpert/result/00-base.xml
+++ b/tests/flattener_dicos/10leadership_autosaveexpert/result/00-base.xml
@@ -14,12 +14,14 @@
normal
+ mandatory
normal
valfill
+ mandatory
expert
rougail.general.leader.follower1
diff --git a/tests/flattener_dicos/10leadership_familyaccent/result/00-base.xml b/tests/flattener_dicos/10leadership_familyaccent/result/00-base.xml
index 123f4b34..73166207 100644
--- a/tests/flattener_dicos/10leadership_familyaccent/result/00-base.xml
+++ b/tests/flattener_dicos/10leadership_familyaccent/result/00-base.xml
@@ -14,12 +14,14 @@
normal
+ mandatory
normal
valfill
+ mandatory
normal
rougail.general.leader.follower1
diff --git a/tests/flattener_dicos/10leadership_leadermandatory/result/00-base.xml b/tests/flattener_dicos/10leadership_leadermandatory/result/00-base.xml
index 111ee0dc..b5a99075 100644
--- a/tests/flattener_dicos/10leadership_leadermandatory/result/00-base.xml
+++ b/tests/flattener_dicos/10leadership_leadermandatory/result/00-base.xml
@@ -16,12 +16,14 @@
mandatory
+ mandatory
normal
valfill
+ mandatory
normal
rougail.general.leader.follower1
diff --git a/tests/flattener_dicos/10leadership_mandatory/result/00-base.xml b/tests/flattener_dicos/10leadership_mandatory/result/00-base.xml
index 657e8c46..f5f20e6f 100644
--- a/tests/flattener_dicos/10leadership_mandatory/result/00-base.xml
+++ b/tests/flattener_dicos/10leadership_mandatory/result/00-base.xml
@@ -21,6 +21,7 @@
+ mandatory
normal
rougail.general.leader.follower1
diff --git a/tests/flattener_dicos/10leadership_multi/result/00-base.xml b/tests/flattener_dicos/10leadership_multi/result/00-base.xml
index c9cfb9c5..99360f4d 100644
--- a/tests/flattener_dicos/10leadership_multi/result/00-base.xml
+++ b/tests/flattener_dicos/10leadership_multi/result/00-base.xml
@@ -17,12 +17,14 @@
normal
+ mandatory
normal
valfill
+ mandatory
normal
rougail.general1.leader.follower1
diff --git a/tests/flattener_dicos/10load_leadership/result/00-base.xml b/tests/flattener_dicos/10load_leadership/result/00-base.xml
index 529f2263..33cbdd10 100644
--- a/tests/flattener_dicos/10load_leadership/result/00-base.xml
+++ b/tests/flattener_dicos/10load_leadership/result/00-base.xml
@@ -17,12 +17,14 @@
normal
+ mandatory
normal
valfill
+ mandatory
normal
rougail.general1.leader.follower1
diff --git a/tests/flattener_dicos/10load_leadership_description/result/00-base.xml b/tests/flattener_dicos/10load_leadership_description/result/00-base.xml
index a9f4468d..1a137963 100644
--- a/tests/flattener_dicos/10load_leadership_description/result/00-base.xml
+++ b/tests/flattener_dicos/10load_leadership_description/result/00-base.xml
@@ -17,12 +17,14 @@
normal
+ mandatory
normal
valfill
+ mandatory
normal
rougail.general1.leader.follower1
diff --git a/tests/flattener_dicos/10load_leadership_submulti/result/00-base.xml b/tests/flattener_dicos/10load_leadership_submulti/result/00-base.xml
index db7f01ec..b1a3d46b 100644
--- a/tests/flattener_dicos/10load_leadership_submulti/result/00-base.xml
+++ b/tests/flattener_dicos/10load_leadership_submulti/result/00-base.xml
@@ -17,12 +17,14 @@
normal
+ mandatory
normal
valfill
+ mandatory
normal
rougail.general1.leader.follower1
diff --git a/tests/flattener_dicos/20family_dynamic_calc/result/00-base.xml b/tests/flattener_dicos/20family_dynamic_calc/result/00-base.xml
index fe07045c..41519464 100644
--- a/tests/flattener_dicos/20family_dynamic_calc/result/00-base.xml
+++ b/tests/flattener_dicos/20family_dynamic_calc/result/00-base.xml
@@ -21,6 +21,7 @@
normal
+ mandatory
normal
rougail.dyn.vardyn
diff --git a/tests/flattener_dicos/30mandatory_withoutvaluecalc/result/00-base.xml b/tests/flattener_dicos/30mandatory_withoutvaluecalc/result/00-base.xml
index b9fb0424..e1f65fa9 100644
--- a/tests/flattener_dicos/30mandatory_withoutvaluecalc/result/00-base.xml
+++ b/tests/flattener_dicos/30mandatory_withoutvaluecalc/result/00-base.xml
@@ -7,6 +7,7 @@
force_default_on_freeze
frozen
hidden
+ mandatory
normal
value
diff --git a/tests/flattener_dicos/30mandatory_withvaluecalc/result/00-base.xml b/tests/flattener_dicos/30mandatory_withvaluecalc/result/00-base.xml
index 140532b8..6b482d0a 100644
--- a/tests/flattener_dicos/30mandatory_withvaluecalc/result/00-base.xml
+++ b/tests/flattener_dicos/30mandatory_withvaluecalc/result/00-base.xml
@@ -4,6 +4,7 @@
normal
+ mandatory
normal
value
diff --git a/tests/flattener_dicos/40ifin_leadershipauto/result/00-base.xml b/tests/flattener_dicos/40ifin_leadershipauto/result/00-base.xml
index aa18f6cb..0a5ba7b3 100644
--- a/tests/flattener_dicos/40ifin_leadershipauto/result/00-base.xml
+++ b/tests/flattener_dicos/40ifin_leadershipauto/result/00-base.xml
@@ -24,6 +24,7 @@
force_default_on_freeze
frozen
hidden
+ mandatory
normal
disabled
diff --git a/tests/flattener_dicos/60action_external/result/00-base.xml b/tests/flattener_dicos/60action_external/result/00-base.xml
index 7d87498d..796210be 100644
--- a/tests/flattener_dicos/60action_external/result/00-base.xml
+++ b/tests/flattener_dicos/60action_external/result/00-base.xml
@@ -28,6 +28,7 @@
force_default_on_freeze
frozen
hidden
+ mandatory
normal
http://localhost/