From 7d032a72b2b7c51f3c4b4fad304ac7db9f8f7c13 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Tue, 7 Jul 2020 20:03:02 +0200 Subject: [PATCH] refactor --- src/rougail/annotator.py | 49 +++++++------------ .../result/00-base.xml | 1 + .../80hidden_if_in_filelist/00-base.xml | 33 +++++++++++++ 3 files changed, 53 insertions(+), 30 deletions(-) create mode 100644 tests/flattener_dicos/80hidden_if_in_filelist/00-base.xml diff --git a/src/rougail/annotator.py b/src/rougail/annotator.py index be5a0df7..3d4b8c74 100644 --- a/src/rougail/annotator.py +++ b/src/rougail/annotator.py @@ -933,13 +933,8 @@ class SpaceAnnotator(object): def filter_targets(self): # pylint: disable=C0111 for condition_idx, condition in enumerate(self.space.constraints.condition): namespace = condition.namespace - del_idx = [] for idx, target in enumerate(condition.target): if target.type == 'variable': - if (hasattr(target, 'optional') and target.optional is True and - not self.paths.path_is_defined(target.name)): - del_idx.append(idx) - continue if condition.source == target.name: raise CreoleDictConsistencyError(_('target name and source name must be different: {}').format(condition.source)) target.name = self.paths.get_variable_path(target.name, namespace) @@ -948,10 +943,6 @@ class SpaceAnnotator(object): target.name = self.paths.get_family_path(target.name, namespace) except KeyError: raise CreoleDictConsistencyError(_('cannot found family {}').format(target.name)) - del_idx = list(set(del_idx)) - del_idx.sort(reverse=True) - for idx in del_idx: - condition.target.pop(idx) def convert_xxxlist_to_variable(self): # pylint: disable=C0111 # transform *list to variable or family @@ -1001,10 +992,11 @@ class SpaceAnnotator(object): if target.type.endswith('list') and condition.name not in ['disabled_if_in', 'disabled_if_not_in']: raise CreoleDictConsistencyError(_(f'target in condition for {target.type} not allow in {condition.name}')) - def check_condition_fallback_not_exists(self): + def check_condition_fallback_optional(self): # a condition with a fallback **and** the source variable doesn't exist remove_conditions = [] for idx, condition in enumerate(self.space.constraints.condition): + remove_targets = [] if condition.fallback is True and not self.paths.path_is_defined(condition.source): for target in condition.target: if target.type in ['variable', 'family']: @@ -1033,12 +1025,19 @@ class SpaceAnnotator(object): variable.value[0].name = False del self.objectspace.list_conditions[listname][target.name] remove_conditions.append(idx) + for idx, target in enumerate(condition.target): + if target.optional is True and not self.paths.path_is_defined(target.name): + remove_targets.append(idx) + remove_targets = list(set(remove_targets)) + remove_targets.sort(reverse=True) + for idx in remove_targets: + condition.target.pop(idx) remove_conditions = list(set(remove_conditions)) remove_conditions.sort(reverse=True) for idx in remove_conditions: self.space.constraints.condition.pop(idx) - def check_choice_option_condition(self, force_remove_targets): + def check_choice_option_condition(self): # remove condition for ChoiceOption that don't have param remove_conditions = [] for condition_idx, condition in enumerate(self.space.constraints.condition): @@ -1060,6 +1059,7 @@ class SpaceAnnotator(object): for idx in remove_param: del condition.param[idx] if condition.param == []: + remove_targets = [] for target in condition.target: if target.name.startswith(f'{VARIABLE_NAMESPACE}.'): name = target.name.split('.')[-1] @@ -1071,29 +1071,24 @@ class SpaceAnnotator(object): variable = self.paths.get_family_obj(name) if condition.name == 'disabled_if_not_in': variable.disabled = True - force_remove_targets.setdefault(condition.name, - []).append(target.name) elif condition.name == 'hidden_if_not_in': variable.hidden = True - force_remove_targets.setdefault(condition.name, - []).append(target.name) elif condition.name == 'mandatory_if_not_in': variable.mandatory = True - force_remove_targets.setdefault(condition.name, - []).append(target.name) + remove_targets = list(set(remove_targets)) + remove_targets.sort(reverse=True) + for target_idx in remove_targets: + condition.target.pop(target_idx) remove_conditions.append(condition_idx) remove_conditions = list(set(remove_conditions)) remove_conditions.sort(reverse=True) for idx in remove_conditions: self.space.constraints.condition.pop(idx) - def manage_variable_property(self, force_remove_targets): + def manage_variable_property(self): for condition in self.space.constraints.condition: - remove_targets = [] #parse each variable and family for target_idx, target in enumerate(condition.target): - if target.name in force_remove_targets.get(condition.name, []): - remove_targets.append(target_idx) if target.name.startswith(f'{VARIABLE_NAMESPACE}.'): name = target.name.split('.')[-1] else: @@ -1112,11 +1107,6 @@ class SpaceAnnotator(object): if condition.name in ['mandatory_if_in', 'mandatory_if_not_in']: self.force_not_mandatory.append(target.name) - remove_targets = list(set(remove_targets)) - remove_targets.sort(reverse=True) - for target_idx in remove_targets: - condition.target.pop(target_idx) - def remove_condition_with_empty_target(self): remove_conditions = [] for condition_idx, condition in enumerate(self.space.constraints.condition): @@ -1130,15 +1120,14 @@ class SpaceAnnotator(object): def filter_condition(self): # pylint: disable=C0111 if not hasattr(self.space, 'constraints') or not hasattr(self.space.constraints, 'condition'): return - force_remove_targets = {} self.check_condition() self.check_params() self.check_target() - self.check_condition_fallback_not_exists() + self.check_condition_fallback_optional() self.filter_targets() self.convert_xxxlist_to_variable() - self.check_choice_option_condition(force_remove_targets) - self.manage_variable_property(force_remove_targets) + self.check_choice_option_condition() + self.manage_variable_property() self.remove_condition_with_empty_target() for condition in self.space.constraints.condition: inverse = condition.name.endswith('_if_not_in') diff --git a/tests/flattener_dicos/11disabledifnotin_filelist_notexist_multi/result/00-base.xml b/tests/flattener_dicos/11disabledifnotin_filelist_notexist_multi/result/00-base.xml index 9bc7934c..d9bb80b3 100644 --- a/tests/flattener_dicos/11disabledifnotin_filelist_notexist_multi/result/00-base.xml +++ b/tests/flattener_dicos/11disabledifnotin_filelist_notexist_multi/result/00-base.xml @@ -25,6 +25,7 @@ disabled + disabled True diff --git a/tests/flattener_dicos/80hidden_if_in_filelist/00-base.xml b/tests/flattener_dicos/80hidden_if_in_filelist/00-base.xml new file mode 100644 index 00000000..1944491b --- /dev/null +++ b/tests/flattener_dicos/80hidden_if_in_filelist/00-base.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + non + + + + + + + + non + afilllist + + + + + + +