diff --git a/src/rougail/convert/convert.py b/src/rougail/convert/convert.py index bfd479edd..efa3cb016 100644 --- a/src/rougail/convert/convert.py +++ b/src/rougail/convert/convert.py @@ -409,7 +409,7 @@ class ParserVariable: exists = obj.pop("exists", None) else: exists = None - redefine = obj.pop("redefine", False) or (force_redefine is True and path in self.paths) + redefine = self.is_redefine(path, obj, force_redefine) obj_type = self.get_family_or_variable_type(obj) family_obj, children_obj = self.split_param_family_children(path, sources, obj_type, obj) if self.version != "1.0" and not family_obj and comment: @@ -430,7 +430,7 @@ class ParserVariable: copy_before_set=True, custom_type=True, ) - force_redefine=True + force_redefine = True family_obj, children_obj = self.split_param_family_children(path, sources, obj_type, obj) family_obj["type"] = self.paths[path].type if path in self.paths: @@ -522,6 +522,10 @@ class ParserVariable: copy_before_set=copy_before_set, custom_type=custom_type, ) + + def is_redefine(self, path: str, obj, force_redefine: bool): + return obj.pop("redefine", False) or (force_redefine is True and path in self.paths and list(obj) in [[], ["default"]]) + def split_param_family_children(self, path, sources, obj_type, obj): family_obj = {} children_obj = {} @@ -716,7 +720,7 @@ class ParserVariable: self.parse_params(path, obj, sources) self.parse_secret_manager(path, obj, sources, family_is_dynamic, copy_before_set) exists = obj.pop("exists", None) - redefine = obj.pop("redefine", False) or (force_redefine is True and path in self.paths) + redefine = self.is_redefine(path, obj, force_redefine) if not redefine and not exists: obj_type = obj.get("type") if obj_type in self.custom_variable_types: diff --git a/tests/types/structures/leadership/00_structure.yml b/tests/types/structures/leadership/00_structure.yml index e0e02f29f..39e4989d2 100644 --- a/tests/types/structures/leadership/00_structure.yml +++ b/tests/types/structures/leadership/00_structure.yml @@ -24,7 +24,10 @@ my_leadership_4: my_leadership: - a_leader: # a description - - a value leader - - a second leader + a_leader: + description: a description + redefine: true + default: + - a value leader + - a second leader ...