diff --git a/locale/fr/LC_MESSAGES/rougail_output_hcl.po b/locale/fr/LC_MESSAGES/rougail_output_hcl.po index 938c1d1..182752e 100644 --- a/locale/fr/LC_MESSAGES/rougail_output_hcl.po +++ b/locale/fr/LC_MESSAGES/rougail_output_hcl.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2026-07-06 16:47+0200\n" -"PO-Revision-Date: 2026-07-06 16:47+0200\n" +"POT-Creation-Date: 2026-09-08 09:55+0200\n" +"PO-Revision-Date: 2026-09-08 09:56+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -17,15 +17,24 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" "X-Generator: Poedit 3.9\n" -#: src/rougail/output_hcl/export.py:130 +#: src/rougail/output_hcl/export.py:134 msgid "The family \"{0}\" has a hcl_type parameter but is not in a root config" msgstr "" "La famille \"{0}\" has le paramètre hcl_type mais n'est pas dans la config " "racine" -#: src/rougail/output_hcl/export.py:142 +#: src/rougail/output_hcl/export.py:146 src/rougail/output_hcl/export.py:158 msgid "" "The family \"{0}\" has a hcl_type parameter to label but is not in a block" msgstr "" "La famille \"{0}\" has le paramètre hcl_type à label mais n'est pas dans un " "block" + +#: src/rougail/structural_hcl/annotator.py:55 +#: src/rougail/structural_hcl/annotator.py:63 +msgid "" +"the family \"{0}\" is a label but there are others families which are not " +"label in same parent family" +msgstr "" +"la famille \"{0}\" est un label mais il y a d'autres familles qui ne sont " +"pas des labels dans la même famille parente" diff --git a/locale/rougail_output_hcl.pot b/locale/rougail_output_hcl.pot index b2728dd..e17d734 100644 --- a/locale/rougail_output_hcl.pot +++ b/locale/rougail_output_hcl.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2026-07-06 16:48+0200\n" +"POT-Creation-Date: 2026-09-08 09:56+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15,11 +15,16 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: src/rougail/output_hcl/export.py:130 +#: src/rougail/output_hcl/export.py:134 msgid "The family \"{0}\" has a hcl_type parameter but is not in a root config" msgstr "" -#: src/rougail/output_hcl/export.py:142 +#: src/rougail/output_hcl/export.py:146 src/rougail/output_hcl/export.py:158 msgid "The family \"{0}\" has a hcl_type parameter to label but is not in a block" msgstr "" +#: src/rougail/structural_hcl/annotator.py:55 +#: src/rougail/structural_hcl/annotator.py:63 +msgid "the family \"{0}\" is a label but there are others families which are not label in same parent family" +msgstr "" + diff --git a/src/rougail/output_hcl/export.py b/src/rougail/output_hcl/export.py index d4223e7..9017355 100644 --- a/src/rougail/output_hcl/export.py +++ b/src/rougail/output_hcl/export.py @@ -152,6 +152,15 @@ class RougailOutputHcl(RougailOutputJson): child_obj["__is_block__"] = True quote_name = True elif hcl_type == "label_with_label": + if self.config == parent or not parent.information.get( + "hcl_type", None + ): + msg = _( + 'The family "{0}" has a hcl_type parameter to label but is not in a block' + ).format(child.path()) + raise DictConsistencyError( + msg, 502, child.information.get("ymlfiles", None) + ) quote_name = True return quote_name diff --git a/src/rougail/output_hcl/locale/fr/LC_MESSAGES/rougail_output_hcl.mo b/src/rougail/output_hcl/locale/fr/LC_MESSAGES/rougail_output_hcl.mo index 070414c..25e868a 100644 Binary files a/src/rougail/output_hcl/locale/fr/LC_MESSAGES/rougail_output_hcl.mo and b/src/rougail/output_hcl/locale/fr/LC_MESSAGES/rougail_output_hcl.mo differ diff --git a/src/rougail/structural_hcl/annotator.py b/src/rougail/structural_hcl/annotator.py index ca0a345..5218383 100644 --- a/src/rougail/structural_hcl/annotator.py +++ b/src/rougail/structural_hcl/annotator.py @@ -19,6 +19,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ +from .i18n import _ from rougail.annotator.variable import Walk from rougail.error import DictConsistencyError @@ -51,12 +52,18 @@ class Annotator(Walk): information_value = None if hasattr(child, "hcl_type") and child.hcl_type == "label": if is_label == False: - raise Exception() + msg = _('the family "{0}" is a label but there are others families which are not label in same parent family').format(child.path) + raise DictConsistencyError( + msg, 504, child.xmlfiles + ) information_value = "label" is_label = True sub_is_block = True elif is_label: - raise Exception() + msg = _('the family "{0}" is a label but there are others families which are not label in same parent family').format(child.path) + raise DictConsistencyError( + msg, 503, child.xmlfiles + ) else: is_label = False if self.parse_family(child_path, sub_is_block): diff --git a/tests/errors/10-label-inside-label.yaml b/tests/errors/10-label-inside-label.yaml new file mode 100644 index 0000000..fa6ea14 --- /dev/null +++ b/tests/errors/10-label-inside-label.yaml @@ -0,0 +1,12 @@ +%YAML 1.2 +--- +version: 1.1 + +a_block: + hcl_type: label + + a_label: + hcl_type: label + + a_variable: a value +... diff --git a/tests/errors/10-label-inside-label.yaml.errno b/tests/errors/10-label-inside-label.yaml.errno new file mode 100644 index 0000000..cc5027e --- /dev/null +++ b/tests/errors/10-label-inside-label.yaml.errno @@ -0,0 +1 @@ +502 diff --git a/tests/errors/10-mix-block-label.yaml b/tests/errors/10-mix-block-label.yaml new file mode 100644 index 0000000..889749f --- /dev/null +++ b/tests/errors/10-mix-block-label.yaml @@ -0,0 +1,17 @@ +%YAML 1.2 +--- +version: 1.1 + +a_block: + hcl_type: block + + a_block: + hcl_type: block + + a_variable: a value + + a_label: + hcl_type: label + + a_variable: a value +... diff --git a/tests/errors/10-mix-block-label.yaml.errno b/tests/errors/10-mix-block-label.yaml.errno new file mode 100644 index 0000000..3091e8e --- /dev/null +++ b/tests/errors/10-mix-block-label.yaml.errno @@ -0,0 +1 @@ +504 diff --git a/tests/errors/10-mix-label-block.yaml b/tests/errors/10-mix-label-block.yaml new file mode 100644 index 0000000..74e55dc --- /dev/null +++ b/tests/errors/10-mix-label-block.yaml @@ -0,0 +1,17 @@ +%YAML 1.2 +--- +version: 1.1 + +a_block: + hcl_type: block + + a_label: + hcl_type: label + + a_variable: a value + + a_block: + hcl_type: block + + a_variable: a value +... diff --git a/tests/errors/10-mix-label-block.yaml.errno b/tests/errors/10-mix-label-block.yaml.errno new file mode 100644 index 0000000..a712e76 --- /dev/null +++ b/tests/errors/10-mix-label-block.yaml.errno @@ -0,0 +1 @@ +503 diff --git a/tests/test_error.py b/tests/test_error.py index c645646..567fdc8 100644 --- a/tests/test_error.py +++ b/tests/test_error.py @@ -29,12 +29,12 @@ def _test_structural_files(test_file, ext): rougailconfig["main_structural_directories"] = [str(test_file.absolute())] ################################## rougail = Rougail(rougailconfig) - config = rougail.run() - config.information.set("description_type", "path_and_description") - config.property.read_only() with Path(str(test_file.absolute()) + ".errno").open() as fh: error_no = int(fh.read().strip()) with raises(DictConsistencyError) as err: + config = rougail.run() + config.information.set("description_type", "path_and_description") + config.property.read_only() generated_output = RougailOutput(config, rougailconfig=rougailconfig).run()[1] assert err.value.errno == error_no, f'expected errno: {error_no}, errno: {err.value.errno}, msg: {err}'