Compare commits

..

No commits in common. "d3477d62417c8353714a04ca534ba73f9e9c6ea0" and "192325e9e00702788f69baaadcc745873f290b8b" have entirely different histories.

19 changed files with 152 additions and 303 deletions

View file

@ -1,16 +1,3 @@
## 1.2.0a39 (2025-10-29)
### Feat
- add tags support
### Fix
- load config leadership
- do not load secrets if not allowed
- update translation
- add test
## 1.2.0a38 (2025-10-22)
## 1.2.0a37 (2025-10-16)

View file

@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2025-10-26 15:26+0100\n"
"PO-Revision-Date: 2025-10-26 15:28+0100\n"
"POT-Creation-Date: 2025-10-04 16:06+0200\n"
"PO-Revision-Date: 2025-10-04 16:06+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: fr\n"
@ -16,31 +16,31 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n"
"X-Generator: Poedit 3.7\n"
#: src/rougail/annotator/family.py:151
#: src/rougail/annotator/family.py:150
msgid "default variable mode \"{0}\" is not a valid mode, valid modes are {1}"
msgstr ""
"le mode d'une variable par défaut \"{0}\" n'est pas un mode valide, les "
"modes valides sont {1}"
#: src/rougail/annotator/family.py:157
#: src/rougail/annotator/family.py:156
msgid "default family mode \"{0}\" is not a valid mode, valid modes are {1}"
msgstr ""
"le mode d'une famille par défaut \"{0}\" n'est pas un mode valide, les modes "
"valides sont {1}"
#: src/rougail/annotator/family.py:189
#: src/rougail/annotator/family.py:188
msgid "mode \"{0}\" for \"{1}\" is not a valid mode, valid modes are {2}"
msgstr ""
"le mode \"{0}\" pour \"{1}\" n'est pas un mode valide, les modes valides "
"sont {2}"
#: src/rougail/annotator/family.py:193
#: src/rougail/annotator/family.py:192
msgid "mode \"{0}\" for \"{1}\" is not a valid mode, no modes are available"
msgstr ""
"le mode \"{0}\" pour \"{1}\" n'est pas un mode valide, aucun mode ne sont "
"définis"
#: src/rougail/annotator/family.py:257
#: src/rougail/annotator/family.py:256
msgid ""
"the variable \"{0}\" is mandatory so in \"{1}\" mode but family has the "
"higher family mode \"{2}\""
@ -48,7 +48,7 @@ msgstr ""
"la variable \"{0}\" est obligatoire, donc en mode \"{1}\", mais la famille a "
"un mode supérieur \"{2}\""
#: src/rougail/annotator/family.py:295
#: src/rougail/annotator/family.py:294
msgid ""
"the follower \"{0}\" is in \"{1}\" mode but leader have the higher mode "
"\"{2}\""
@ -56,7 +56,7 @@ msgstr ""
"la variable suiveuse \"{0}\" a le mode \"{1}\" mais la variable leader a un "
"mode supérieur \"{2}\""
#: src/rougail/annotator/family.py:328
#: src/rougail/annotator/family.py:327
msgid ""
"the family \"{0}\" is in \"{1}\" mode but variables and families inside have "
"the higher modes \"{2}\""
@ -64,7 +64,7 @@ msgstr ""
"la famille \"{0}\" a le mode \"{1}\" mais les variables et les familles à "
"l'intérieur ont des modes supérieurs \"{2}\""
#: src/rougail/annotator/family.py:346
#: src/rougail/annotator/family.py:345
msgid ""
"the variable \"{0}\" is in \"{1}\" mode but family has the higher family "
"mode \"{2}\""
@ -72,28 +72,6 @@ msgstr ""
"la variable \"{0}\" est dans le mode \"{1}\" mais la famille a le mode "
"supérieur \"{2}\""
#: src/rougail/annotator/property.py:158
msgid ""
"invalid tag name \"{0}\" should only contains lowercase ascii character, "
"number or _"
msgstr ""
"nom de l'étiquette invalide \"{0}\" doit seulement contenir des caractères "
"ascii minuscule, nombre or _"
#: src/rougail/annotator/property.py:163
msgid "invalid tag name \"{0}\" should not be a name of an existing mode"
msgstr ""
"nom de l'étiquette invalide \"{0}\" ne doit pas être un nom de mode existant"
#: src/rougail/annotator/property.py:168
#, fuzzy
#| msgid ""
#| "invalid tag name \"{0}\" should not be name of an available proprerties"
msgid "invalid tag name \"{0}\" should not be name of an available properties"
msgstr ""
"nom de l'étiquette invalide \"{0}\" ne doit pas être le nom d'une propriétés "
"existantes"
#: src/rougail/annotator/value.py:78
msgid ""
"the follower \"{0}\" is not multi, so cannot have a list has default value"
@ -139,129 +117,129 @@ msgstr ""
"la variable \"{0}\" a l'attribut \"secret_manager\" donc ne devrait pas "
"avoir de valeur par défaut"
#: src/rougail/annotator/variable.py:254
#: src/rougail/annotator/variable.py:253
msgid ""
"the variable \"{0}\" has regexp attribut but has not the \"regexp\" type"
msgstr ""
"la variable \"{0}\" a un attribut regexp mais n'a pas le type \"regexp\""
#: src/rougail/annotator/variable.py:297
#: src/rougail/annotator/variable.py:296
msgid ""
"the variable \"{0}\" has choices attribut but has not the \"choice\" type"
msgstr ""
"la variable \"{0}\" a un attribut choices mais n'a pas le type \"choice\""
#: src/rougail/annotator/variable.py:325
#: src/rougail/annotator/variable.py:324
msgid ""
"the variable \"{0}\" has an unvalid default value \"{1}\" should be in {2}"
msgstr ""
"la variable \"{0}\" a la valeur par défaut invalide \"{1}\" devrait être {2}"
#: src/rougail/config/__init__.py:235
#: src/rougail/config/__init__.py:226
msgid "Structure format version by default, if not specified in structure file"
msgstr ""
"La version du format de la structure par défaut, si non spécifier dans le "
"fichier de structure"
#: src/rougail/config/__init__.py:243
#: src/rougail/config/__init__.py:234
msgid "File with functions"
msgstr "Fichier avec les fonctions"
#: src/rougail/config/__init__.py:255
#: src/rougail/config/__init__.py:246
msgid "All modes level available"
msgstr "Tous les niveaux de modes valides"
#: src/rougail/config/__init__.py:267
#: src/rougail/config/__init__.py:258
msgid "Default mode for a family"
msgstr "Mode par défaut pour une famille"
#: src/rougail/config/__init__.py:287
#: src/rougail/config/__init__.py:278
msgid "Default mode for a variable"
msgstr "Mode par défaut pour une variable"
#: src/rougail/config/__init__.py:311
#: src/rougail/config/__init__.py:302
msgid "Option name for the base option"
msgstr "Nom de l'option pour l'option de base"
#: src/rougail/config/__init__.py:316
#: src/rougail/config/__init__.py:307
msgid "In cache file, do not importation of Tiramisu and other dependencies"
msgstr ""
"Dans le fichier de cache, ne pas importer Tiramisu et autres dépendances"
#: src/rougail/config/__init__.py:321
#: src/rougail/config/__init__.py:312
msgid "Tiramisu cache filename"
msgstr "Nom du fichier du cache Tiramisu"
#: src/rougail/config/__init__.py:329
#: src/rougail/config/__init__.py:320
msgid "Name of internal functions that we can use as a function"
msgstr ""
"Nom des fonctions internes qu'il est possible d'utiliser comme fonction"
#: src/rougail/config/__init__.py:335
#: src/rougail/config/__init__.py:326
msgid "Name of extra annotators"
msgstr "Nom des annotators supplémentaires"
#: src/rougail/config/__init__.py:341
#: src/rougail/config/__init__.py:332
msgid "Suffix add to generated options name"
msgstr "Suffix ajouté pour généré le nom des options"
#: src/rougail/config/__init__.py:347
#: src/rougail/config/__init__.py:338
msgid "Every variables in calculation are optionals"
msgstr "Toutes les variables dans un calcul sont optionnelles"
#: src/rougail/config/__init__.py:351
#: src/rougail/config/__init__.py:342
msgid "Loads redefine variables even if there don't already exists"
msgstr "Charger les variables redéfinis même si elles n'existe pas"
#: src/rougail/config/__init__.py:358
#: src/rougail/config/__init__.py:349
msgid "The secret pattern to build item name in Bitwarden"
msgstr "Le patron de secret pour construire le nom de l'élément dans Bitwarden"
#: src/rougail/config/__init__.py:359
#: src/rougail/config/__init__.py:350
msgid "The pattern is in Jinja format"
msgstr "Le patron est au format Jinja"
#: src/rougail/config/__init__.py:387
#: src/rougail/config/__init__.py:378
msgid "Select for {0}"
msgstr "Sélection pour {0}"
#: src/rougail/config/__init__.py:467
#: src/rougail/config/__init__.py:458
msgid "Override default parameters for option type"
msgstr "Sur charger les paramètre par défaut pour le type d'option"
#: src/rougail/config/__init__.py:470
#: src/rougail/config/__init__.py:461
msgid "Default parameters for option type"
msgstr "Paramètre par défaut pour le type d'option"
#: src/rougail/convert/convert.py:281
#: src/rougail/convert/convert.py:280
msgid "unknown type {0} for {1}"
msgstr "type {0} inconnu pour {1}"
#: src/rougail/convert/convert.py:419
#: src/rougail/convert/convert.py:418
msgid "family \"{0}\" define multiple time"
msgstr "la famille \"{0}\" est définit plusieurs fois"
#: src/rougail/convert/convert.py:672
#: src/rougail/convert/convert.py:671
msgid "variable \"{0}\" define multiple time"
msgstr "la variable \"{0}\" est définit plusieurs fois"
#: src/rougail/convert/convert.py:770
#: src/rougail/convert/convert.py:769
msgid "params must be a dict for {0}"
msgstr "params doit être une dict pour {0}"
#: src/rougail/convert/convert.py:791
#: src/rougail/convert/convert.py:790
msgid "\"{0}\" has an invalid \"params\" for {1}: {2}"
msgstr "\"{0}\" a un attribut \"params\" invalide pour {1}: {2}"
#: src/rougail/convert/convert.py:805
#: src/rougail/convert/convert.py:804
msgid "secret_manager must be a dict for {0}"
msgstr "secret_manager doit être une dict pour {0}"
#: src/rougail/convert/convert.py:1134
#: src/rougail/convert/convert.py:1133
msgid "Cannot execute annotate multiple time"
msgstr "Ne peut exécuter l'annotation plusieurs fois"
#: src/rougail/convert/convert.py:1141
#: src/rougail/convert/convert.py:1140
msgid ""
"invalid \"structural\" definition ({0}), we cannot load any structural file!"
msgstr ""
@ -282,7 +260,7 @@ msgstr ""
"\"{2}\""
#: src/rougail/convert/object_model.py:133
#: src/rougail/convert/object_model.py:479
#: src/rougail/convert/object_model.py:468
msgid "unknown object \"{0}\" in attribute \"{1}\" for \"{2}\""
msgstr "objet inconnu \"{0}\" dans l'attribut \"{1}\" pour \"{2}\""
@ -311,15 +289,7 @@ msgstr ""
"la variable \"{0}\" n'est pas suiveuse, donc ne peut avoir de type index "
"comme paramètre dans \"{1}\""
#: src/rougail/convert/object_model.py:405
msgid ""
"variable \"{0}\" has a calculating \"{1}\" with an invalid return_type, "
"should be boolean or string, not \"{2}\""
msgstr ""
"la variable \"{0}\" a un calcul \"{1}\" avec un return_type invalide, "
"devrait être un booléen ou une chaîne de caractère, et pas \"{2}\""
#: src/rougail/convert/object_model.py:474
#: src/rougail/convert/object_model.py:463
msgid ""
"a variable \"{0}\" is needs in attribute \"{1}\" for \"{2}\" but it's a "
"family"
@ -327,7 +297,7 @@ msgstr ""
"une variable \"{0}\" est nécessaire pour l'attribut \"{1}\" pour \"{2}\" "
"mais c'est une famille"
#: src/rougail/convert/object_model.py:499
#: src/rougail/convert/object_model.py:488
msgid ""
"variable \"{0}\" has an attribute \"{1}\" calculated with the unknown "
"variable \"{2}\""
@ -335,7 +305,7 @@ msgstr ""
"la variable \"{0}\" a un attribut invalide \"{1}\" calculé avec la variable "
"inconnue \"{2}\""
#: src/rougail/convert/object_model.py:551
#: src/rougail/convert/object_model.py:540
msgid ""
"the variable \"{0}\" has an invalid \"{1}\" the variable \"{2}\" is in a sub "
"dynamic option"
@ -343,14 +313,14 @@ msgstr ""
"la variable \"{0}\" a un attribut invalide \"{1}\", la variable \"{2}\" est "
"dans une sous option dynamique"
#: src/rougail/convert/object_model.py:560
#: src/rougail/convert/object_model.py:549
msgid ""
"the leader \"{0}\" has an invalid \"{1}\" the follower \"{2}\" is a multi"
msgstr ""
"la variable meneuse \"{0}\" a un attribut invalide \"{1}\", la variable "
"suiveuse \"{2}\" est multiple"
#: src/rougail/convert/object_model.py:602
#: src/rougail/convert/object_model.py:591
msgid ""
"the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" "
"must not be multi"
@ -358,7 +328,7 @@ msgstr ""
"la variable \"{0}\" a un attribut invalide \"{1}\", la variable \"{2}\" ne "
"doit pas être multiple"
#: src/rougail/convert/object_model.py:616
#: src/rougail/convert/object_model.py:605
msgid ""
"the variable \"{0}\" has an invalid attribute \"{1}\", the variable must not "
"be a multi or the variable \"{2}\" must be multi"
@ -366,7 +336,7 @@ msgstr ""
"la variable \"{0}\" a un attribut invalide \"{1}\", la variable ne doit pas "
"être multiple ou la variable \"{2}\" doit être multiple"
#: src/rougail/convert/object_model.py:630
#: src/rougail/convert/object_model.py:619
msgid ""
"the variable \"{0}\" has an invalid attribute \"{1}\", the variable must be "
"a multi or the variable \"{2}\" must not be multi"
@ -374,7 +344,7 @@ msgstr ""
"la variable \"{0}\" a un attribut invalide \"{1}\", la variable doit être "
"multiple ou la variable \"{2}\" ne doit pas être multiple"
#: src/rougail/convert/object_model.py:644
#: src/rougail/convert/object_model.py:633
msgid ""
"the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" "
"is multi but is inside a list"
@ -382,7 +352,7 @@ msgstr ""
"la variable \"{0}\" a un attribut invalide \"{1}\", la variable \"{2}\" est "
"multiple mais est dans une liste"
#: src/rougail/convert/object_model.py:666
#: src/rougail/convert/object_model.py:655
msgid ""
"the variable \"{0}\" is waiting for a list as \"{1}\" but the attribute "
"\"default\" is not a list (\"{2}\")"
@ -390,7 +360,7 @@ msgstr ""
"la variable \"{0}\" attend une liste comme \"{1}\" mais l'attribut "
"\"default\" n'est pas une liste \"{2}\""
#: src/rougail/convert/object_model.py:668
#: src/rougail/convert/object_model.py:657
msgid ""
"the variable \"{0}\" is not waiting for a list as \"{1}\" but the attribute "
"\"default\" is a list (\"{2}\")"
@ -398,7 +368,7 @@ msgstr ""
"la variable \"{0}\" n'attend pas une liste comme \"{1}\" mais l'attribut "
"\"default\" est une liste \"{2}\""
#: src/rougail/convert/object_model.py:684
#: src/rougail/convert/object_model.py:673
msgid ""
"\"{0}\" attribut shall not have an \"optional\" attribute without the "
"\"default\" attribute for variable \"{1}\""
@ -406,7 +376,7 @@ msgstr ""
"l'attribut \"{0}\" ne devrait pas avoir d'attribut \"optional\" sans "
"l'attribut \"default\" pour la variable \"{1}\""
#: src/rougail/convert/object_model.py:708
#: src/rougail/convert/object_model.py:697
msgid ""
"variable \"{0}\" has a default value calculated with \"{1}\" which has "
"incompatible type"
@ -414,7 +384,7 @@ msgstr ""
"la variable \"{0}\" a une valeur par défaut calculé a partir de \"{1}\" "
"laquelle a un type incompatible"
#: src/rougail/convert/object_model.py:751
#: src/rougail/convert/object_model.py:740
msgid ""
"the variable \"{0}\" is waiting for a boolean as \"{1}\" but the attribute "
"\"default\" is not a boolean (\"{2}\")"
@ -422,7 +392,7 @@ msgstr ""
"la variable \"{0}\" attend un booléan comme \"{1}\" mais l'attribut "
"\"default\" n'est pas une booléan (\"{2}\")"
#: src/rougail/convert/object_model.py:771
#: src/rougail/convert/object_model.py:760
msgid ""
"\"when\" is not allowed in format version 1.0 for attribute \"{0}\" for "
"variable \"{1}\""
@ -430,7 +400,7 @@ msgstr ""
"\"when\" n'est pas autorisé avec le format en version 1.0 pour l'attribut "
"\"{0}\" pour la variable \"{1}\""
#: src/rougail/convert/object_model.py:776
#: src/rougail/convert/object_model.py:765
msgid ""
"the variable \"{0}\" has an invalid attribute \"{1}\", \"when\" and "
"\"when_not\" cannot set together"
@ -438,7 +408,7 @@ msgstr ""
"la variable \"{0}\" a un attribut invalide \"{1}\", \"when\" et \"when_not\" "
"ne peuvent pas être défini ensemble"
#: src/rougail/convert/object_model.py:784
#: src/rougail/convert/object_model.py:773
msgid ""
"\"when_not\" is not allowed in format version 1.0 for attribute \"{0}\" for "
"variable \"{1}\""
@ -446,7 +416,7 @@ msgstr ""
"\"when_not\" n'est pas autorisé au format 1.0 pour l'attribut \"{0}\" pour "
"la variable variable \"{1}\""
#: src/rougail/convert/object_model.py:840
#: src/rougail/convert/object_model.py:829
msgid ""
"cannot find variable \"{0}\" for the information \"{1}\" when calculating "
"\"{2}\""
@ -454,19 +424,19 @@ msgstr ""
"ne peut trouver la variable \"{0}\" pour l'information \"{1}\" lors du "
"calcul de \"{2}\""
#: src/rougail/convert/object_model.py:845
#: src/rougail/convert/object_model.py:834
msgid ""
"identifier not allowed for the information \"{0}\" when calculating \"{1}\""
msgstr ""
"identifier n'est pas autorisé pour l'information \"{0}\" lors du calcul de "
"\"{1}\""
#: src/rougail/convert/object_model.py:897
#: src/rougail/convert/object_model.py:886
msgid "\"when\" is not allowed in format version 1.0 for attribute \"{0}\""
msgstr "\"when\" n'est pas autorisé au format 1.0 pour l'attribut \"{0}\""
#: src/rougail/convert/object_model.py:903
#: src/rougail/convert/object_model.py:913
#: src/rougail/convert/object_model.py:892
#: src/rougail/convert/object_model.py:902
msgid ""
"the identifier has an invalid attribute \"{0}\", \"when\" and \"when_not\" "
"cannot set together"
@ -474,14 +444,14 @@ msgstr ""
"l'identifiant a un attribut invalide \"{0}\", \"when\" et \"when_not\" ne "
"peuvent pas être défini ensemble"
#: src/rougail/convert/object_model.py:939
#: src/rougail/convert/object_model.py:928
msgid ""
"the variable \"{0}\" is not a follower, so cannot have index type for \"{1}\""
msgstr ""
"la variable \"{0}\" n'est pas suiveuse, donc ne peut avoir de type index "
"pour \"{1}\""
#: src/rougail/convert/path.py:211
#: src/rougail/convert/path.py:207
msgid ""
"A variable or a family located in the \"{0}\" namespace shall not be used in "
"the \"{1}\" namespace"
@ -494,7 +464,7 @@ msgid "internal error, {0} is not a dynamic variable"
msgstr "erreur interne, \"{0}\" n'est pas une variable dynamique"
#: src/rougail/error.py:61 src/rougail/tiramisu.py:157
#: src/rougail/user_datas.py:392 src/rougail/user_datas.py:395
#: src/rougail/user_datas.py:377 src/rougail/user_datas.py:380
msgid "{0} in {1}"
msgstr "{0} dans {1}"
@ -506,7 +476,7 @@ msgstr "alternative_name \"{0}\" est en conflit avec \"--help\""
msgid "conflict alternative_name \"{0}\": \"{1}\" and \"{2}\""
msgstr "conflit dans les \"alternative_name\" \"{0}\": \"{1}\" et \"{2}\""
#: src/rougail/structural_directory/__init__.py:129
#: src/rougail/structural_directory/__init__.py:127
msgid "duplicate structural file name {0}"
msgstr "nom de fichier {0} de structure dupliqué"
@ -523,18 +493,14 @@ msgid "Main namespace name"
msgstr "Nom de l'espace de nom principal"
#: src/rougail/structural_directory/config.py:69
msgid "Namespaces are isolated"
msgstr "Les espaces de noms sont isolés"
#: src/rougail/structural_directory/config.py:78
msgid "Extra namespaces"
msgstr "Espaces de nom supplémentaires"
#: src/rougail/structural_directory/config.py:87
#: src/rougail/structural_directory/config.py:78
msgid "Extra namespace name"
msgstr "Nom de l'espace de nom supplémentaire"
#: src/rougail/structural_directory/config.py:93
#: src/rougail/structural_directory/config.py:84
msgid "Directories where extra structural files are placed"
msgstr ""
"Répertoires où sont placés les fichiers de structure de l'espace de nom "
@ -552,7 +518,7 @@ msgstr ""
"ne peut calculer l'attribut \"{0}\" pour la variable \"{1}\" dans {2} avec "
"les paramètres \"{3}\" : {4}"
#: src/rougail/user_datas.py:135
#: src/rougail/user_datas.py:137
msgid ""
"cannot load variable path \"{0}\", the identifier \"{1}\" is not valid in {2}"
msgstr ""
@ -565,19 +531,19 @@ msgstr ""
"la variable \"{0}\" contient des secrets et ne devrait pas être défini dans "
"{1}"
#: src/rougail/user_datas.py:257
#: src/rougail/user_datas.py:250
msgid "loaded from {0}"
msgstr "chargée depuis {0}"
#: src/rougail/user_datas.py:297
#: src/rougail/user_datas.py:280
msgid ""
"cannot set the value \"{0}\" to the family {1}, it will be ignored when "
"loading from {2}"
msgstr ""
"impossible de définir la valeur \"{0}\" à la famille {1}, elle sera ignorée "
"lors du chargement depuis {2}"
"lors du chargement depuis {0}"
#: src/rougail/user_datas.py:309
#: src/rougail/user_datas.py:292
msgid ""
"variable or family \"{0}\" does not exist, it will be ignored when loading "
"from {1}"
@ -585,7 +551,7 @@ msgstr ""
"la variable ou la famille \"{0}\" n'existe pas, elle sera ignorée lors du "
"chargement depuis {1}"
#: src/rougail/user_datas.py:315
#: src/rougail/user_datas.py:298
msgid ""
"\"{0}\" is the name of a dynamic family, it will be ignored when loading "
"from {1}"
@ -593,11 +559,11 @@ msgstr ""
"\"{0}\" est le nom d'une famille dynamique, il sera ignoré lors du "
"chargement depuis {1}"
#: src/rougail/user_datas.py:321
#: src/rougail/user_datas.py:304
msgid "{0} loaded from {1}"
msgstr "{0} chargée depuis {1}"
#: src/rougail/user_datas.py:349
#: src/rougail/user_datas.py:334
msgid ""
"variable {0} at index \"{1}\" is {2}, it will be ignored when loading from "
"{3}"
@ -605,23 +571,23 @@ msgstr ""
"la variable {0} à l'index \"{1}\" est {2}, elle sera ignorée lors du "
"chargement depuis {3}"
#: src/rougail/user_datas.py:360
#: src/rougail/user_datas.py:345
msgid ""
"family {0} is {1}, {2} at index \"{3}\" will be ignored when loading from {4}"
msgstr ""
"la famille {0} est {1}, {2} à l'index \"{3}\" sera ignorée lors du "
"chargement depuis {4}"
#: src/rougail/user_datas.py:373
#: src/rougail/user_datas.py:358
msgid "variable {0} is {1}, it will be ignored when loading from {2}"
msgstr ""
"la variable {0} est {1}, elle sera ignorée lors du chargement depuis {2}"
#: src/rougail/user_datas.py:381
#: src/rougail/user_datas.py:366
msgid "family {0} is {1}, {2} will be ignored when loading from {3}"
msgstr "la famille {0} est {1}, {2} sera ignorée lors du chargement depuis {3}"
#: src/rougail/user_datas.py:401
#: src/rougail/user_datas.py:386
msgid ""
"the value \"{0}\" is an invalid {1} for {2} at index \"{3}\", {4}, it will "
"be ignored when loading from {5}"
@ -629,7 +595,7 @@ msgstr ""
"la valeur \"{0}\" est un invalide {1} pour {2} à l'index \"{3}\", {4}, elle "
"sera ignorée lors du chargement depuis {5}"
#: src/rougail/user_datas.py:415
#: src/rougail/user_datas.py:401
msgid ""
"the value \"{0}\" is an invalid {1} for {2}, {3}, it will be ignored when "
"loading from {4}"

View file

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2025-10-26 15:29+0100\n"
"POT-Creation-Date: 2025-10-05 21:37+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -15,50 +15,38 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n"
#: src/rougail/annotator/family.py:151
#: src/rougail/annotator/family.py:150
msgid "default variable mode \"{0}\" is not a valid mode, valid modes are {1}"
msgstr ""
#: src/rougail/annotator/family.py:157
#: src/rougail/annotator/family.py:156
msgid "default family mode \"{0}\" is not a valid mode, valid modes are {1}"
msgstr ""
#: src/rougail/annotator/family.py:189
#: src/rougail/annotator/family.py:188
msgid "mode \"{0}\" for \"{1}\" is not a valid mode, valid modes are {2}"
msgstr ""
#: src/rougail/annotator/family.py:193
#: src/rougail/annotator/family.py:192
msgid "mode \"{0}\" for \"{1}\" is not a valid mode, no modes are available"
msgstr ""
#: src/rougail/annotator/family.py:257
#: src/rougail/annotator/family.py:256
msgid "the variable \"{0}\" is mandatory so in \"{1}\" mode but family has the higher family mode \"{2}\""
msgstr ""
#: src/rougail/annotator/family.py:295
#: src/rougail/annotator/family.py:294
msgid "the follower \"{0}\" is in \"{1}\" mode but leader have the higher mode \"{2}\""
msgstr ""
#: src/rougail/annotator/family.py:328
#: src/rougail/annotator/family.py:327
msgid "the family \"{0}\" is in \"{1}\" mode but variables and families inside have the higher modes \"{2}\""
msgstr ""
#: src/rougail/annotator/family.py:346
#: src/rougail/annotator/family.py:345
msgid "the variable \"{0}\" is in \"{1}\" mode but family has the higher family mode \"{2}\""
msgstr ""
#: src/rougail/annotator/property.py:158
msgid "invalid tag name \"{0}\" should only contains lowercase ascii character, number or _"
msgstr ""
#: src/rougail/annotator/property.py:163
msgid "invalid tag name \"{0}\" should not be a name of an existing mode"
msgstr ""
#: src/rougail/annotator/property.py:168
msgid "invalid tag name \"{0}\" should not be name of an available properties"
msgstr ""
#: src/rougail/annotator/value.py:78
msgid "the follower \"{0}\" is not multi, so cannot have a list has default value"
msgstr ""
@ -87,15 +75,15 @@ msgstr ""
msgid "the variable \"{0}\" has attribute \"secret_manager\" so must not have default value"
msgstr ""
#: src/rougail/annotator/variable.py:254
#: src/rougail/annotator/variable.py:253
msgid "the variable \"{0}\" has regexp attribut but has not the \"regexp\" type"
msgstr ""
#: src/rougail/annotator/variable.py:297
#: src/rougail/annotator/variable.py:296
msgid "the variable \"{0}\" has choices attribut but has not the \"choice\" type"
msgstr ""
#: src/rougail/annotator/variable.py:325
#: src/rougail/annotator/variable.py:324
msgid "the variable \"{0}\" has an unvalid default value \"{1}\" should be in {2}"
msgstr ""
@ -171,35 +159,35 @@ msgstr ""
msgid "Default parameters for option type"
msgstr ""
#: src/rougail/convert/convert.py:281
#: src/rougail/convert/convert.py:280
msgid "unknown type {0} for {1}"
msgstr ""
#: src/rougail/convert/convert.py:419
#: src/rougail/convert/convert.py:418
msgid "family \"{0}\" define multiple time"
msgstr ""
#: src/rougail/convert/convert.py:672
#: src/rougail/convert/convert.py:671
msgid "variable \"{0}\" define multiple time"
msgstr ""
#: src/rougail/convert/convert.py:770
#: src/rougail/convert/convert.py:769
msgid "params must be a dict for {0}"
msgstr ""
#: src/rougail/convert/convert.py:791
#: src/rougail/convert/convert.py:790
msgid "\"{0}\" has an invalid \"params\" for {1}: {2}"
msgstr ""
#: src/rougail/convert/convert.py:805
#: src/rougail/convert/convert.py:804
msgid "secret_manager must be a dict for {0}"
msgstr ""
#: src/rougail/convert/convert.py:1134
#: src/rougail/convert/convert.py:1133
msgid "Cannot execute annotate multiple time"
msgstr ""
#: src/rougail/convert/convert.py:1141
#: src/rougail/convert/convert.py:1140
msgid "invalid \"structural\" definition ({0}), we cannot load any structural file!"
msgstr ""
@ -212,7 +200,7 @@ msgid "the variable \"{0}\" is in fact a family in attribute \"{1}\" for \"{2}\"
msgstr ""
#: src/rougail/convert/object_model.py:133
#: src/rougail/convert/object_model.py:479
#: src/rougail/convert/object_model.py:468
msgid "unknown object \"{0}\" in attribute \"{1}\" for \"{2}\""
msgstr ""
@ -232,96 +220,92 @@ msgstr ""
msgid "the variable \"{0}\" is not a follower, so cannot have index type for param in \"{1}\""
msgstr ""
#: src/rougail/convert/object_model.py:405
msgid "variable \"{0}\" has a calculating \"{1}\" with an invalid return_type, should be boolean or string, not \"{2}\""
msgstr ""
#: src/rougail/convert/object_model.py:474
#: src/rougail/convert/object_model.py:463
msgid "a variable \"{0}\" is needs in attribute \"{1}\" for \"{2}\" but it's a family"
msgstr ""
#: src/rougail/convert/object_model.py:499
#: src/rougail/convert/object_model.py:488
msgid "variable \"{0}\" has an attribute \"{1}\" calculated with the unknown variable \"{2}\""
msgstr ""
#: src/rougail/convert/object_model.py:551
#: src/rougail/convert/object_model.py:540
msgid "the variable \"{0}\" has an invalid \"{1}\" the variable \"{2}\" is in a sub dynamic option"
msgstr ""
#: src/rougail/convert/object_model.py:560
#: src/rougail/convert/object_model.py:549
msgid "the leader \"{0}\" has an invalid \"{1}\" the follower \"{2}\" is a multi"
msgstr ""
#: src/rougail/convert/object_model.py:602
#: src/rougail/convert/object_model.py:591
msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" must not be multi"
msgstr ""
#: src/rougail/convert/object_model.py:616
#: src/rougail/convert/object_model.py:605
msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable must not be a multi or the variable \"{2}\" must be multi"
msgstr ""
#: src/rougail/convert/object_model.py:630
#: src/rougail/convert/object_model.py:619
msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable must be a multi or the variable \"{2}\" must not be multi"
msgstr ""
#: src/rougail/convert/object_model.py:644
#: src/rougail/convert/object_model.py:633
msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" is multi but is inside a list"
msgstr ""
#: src/rougail/convert/object_model.py:666
#: src/rougail/convert/object_model.py:655
msgid "the variable \"{0}\" is waiting for a list as \"{1}\" but the attribute \"default\" is not a list (\"{2}\")"
msgstr ""
#: src/rougail/convert/object_model.py:668
#: src/rougail/convert/object_model.py:657
msgid "the variable \"{0}\" is not waiting for a list as \"{1}\" but the attribute \"default\" is a list (\"{2}\")"
msgstr ""
#: src/rougail/convert/object_model.py:684
#: src/rougail/convert/object_model.py:673
msgid "\"{0}\" attribut shall not have an \"optional\" attribute without the \"default\" attribute for variable \"{1}\""
msgstr ""
#: src/rougail/convert/object_model.py:708
#: src/rougail/convert/object_model.py:697
msgid "variable \"{0}\" has a default value calculated with \"{1}\" which has incompatible type"
msgstr ""
#: src/rougail/convert/object_model.py:751
#: src/rougail/convert/object_model.py:740
msgid "the variable \"{0}\" is waiting for a boolean as \"{1}\" but the attribute \"default\" is not a boolean (\"{2}\")"
msgstr ""
#: src/rougail/convert/object_model.py:771
#: src/rougail/convert/object_model.py:760
msgid "\"when\" is not allowed in format version 1.0 for attribute \"{0}\" for variable \"{1}\""
msgstr ""
#: src/rougail/convert/object_model.py:776
#: src/rougail/convert/object_model.py:765
msgid "the variable \"{0}\" has an invalid attribute \"{1}\", \"when\" and \"when_not\" cannot set together"
msgstr ""
#: src/rougail/convert/object_model.py:784
#: src/rougail/convert/object_model.py:773
msgid "\"when_not\" is not allowed in format version 1.0 for attribute \"{0}\" for variable \"{1}\""
msgstr ""
#: src/rougail/convert/object_model.py:840
#: src/rougail/convert/object_model.py:829
msgid "cannot find variable \"{0}\" for the information \"{1}\" when calculating \"{2}\""
msgstr ""
#: src/rougail/convert/object_model.py:845
#: src/rougail/convert/object_model.py:834
msgid "identifier not allowed for the information \"{0}\" when calculating \"{1}\""
msgstr ""
#: src/rougail/convert/object_model.py:897
#: src/rougail/convert/object_model.py:886
msgid "\"when\" is not allowed in format version 1.0 for attribute \"{0}\""
msgstr ""
#: src/rougail/convert/object_model.py:903
#: src/rougail/convert/object_model.py:913
#: src/rougail/convert/object_model.py:892
#: src/rougail/convert/object_model.py:902
msgid "the identifier has an invalid attribute \"{0}\", \"when\" and \"when_not\" cannot set together"
msgstr ""
#: src/rougail/convert/object_model.py:939
#: src/rougail/convert/object_model.py:928
msgid "the variable \"{0}\" is not a follower, so cannot have index type for \"{1}\""
msgstr ""
#: src/rougail/convert/path.py:211
#: src/rougail/convert/path.py:207
msgid "A variable or a family located in the \"{0}\" namespace shall not be used in the \"{1}\" namespace"
msgstr ""
@ -330,7 +314,7 @@ msgid "internal error, {0} is not a dynamic variable"
msgstr ""
#: src/rougail/error.py:61 src/rougail/tiramisu.py:157
#: src/rougail/user_datas.py:392 src/rougail/user_datas.py:395
#: src/rougail/user_datas.py:399 src/rougail/user_datas.py:402
msgid "{0} in {1}"
msgstr ""
@ -342,7 +326,7 @@ msgstr ""
msgid "conflict alternative_name \"{0}\": \"{1}\" and \"{2}\""
msgstr ""
#: src/rougail/structural_directory/__init__.py:129
#: src/rougail/structural_directory/__init__.py:127
msgid "duplicate structural file name {0}"
msgstr ""
@ -359,18 +343,14 @@ msgid "Main namespace name"
msgstr ""
#: src/rougail/structural_directory/config.py:69
msgid "Namespaces are isolated"
msgstr ""
#: src/rougail/structural_directory/config.py:78
msgid "Extra namespaces"
msgstr ""
#: src/rougail/structural_directory/config.py:87
#: src/rougail/structural_directory/config.py:78
msgid "Extra namespace name"
msgstr ""
#: src/rougail/structural_directory/config.py:93
#: src/rougail/structural_directory/config.py:84
msgid "Directories where extra structural files are placed"
msgstr ""
@ -382,55 +362,55 @@ msgstr ""
msgid "cannot calculating \"{0}\" attribute for variable \"{1}\" in {2} with parameters \"{3}\": {4}"
msgstr ""
#: src/rougail/user_datas.py:135
#: src/rougail/user_datas.py:141
msgid "cannot load variable path \"{0}\", the identifier \"{1}\" is not valid in {2}"
msgstr ""
#: src/rougail/user_datas.py:218
#: src/rougail/user_datas.py:227
msgid "the variable \"{0}\" contains secrets and should not be defined in {1}"
msgstr ""
#: src/rougail/user_datas.py:257
#: src/rougail/user_datas.py:265
msgid "loaded from {0}"
msgstr ""
#: src/rougail/user_datas.py:297
#: src/rougail/user_datas.py:304
msgid "cannot set the value \"{0}\" to the family {1}, it will be ignored when loading from {2}"
msgstr ""
#: src/rougail/user_datas.py:309
#: src/rougail/user_datas.py:316
msgid "variable or family \"{0}\" does not exist, it will be ignored when loading from {1}"
msgstr ""
#: src/rougail/user_datas.py:315
#: src/rougail/user_datas.py:322
msgid "\"{0}\" is the name of a dynamic family, it will be ignored when loading from {1}"
msgstr ""
#: src/rougail/user_datas.py:321
#: src/rougail/user_datas.py:328
msgid "{0} loaded from {1}"
msgstr ""
#: src/rougail/user_datas.py:349
#: src/rougail/user_datas.py:356
msgid "variable {0} at index \"{1}\" is {2}, it will be ignored when loading from {3}"
msgstr ""
#: src/rougail/user_datas.py:360
#: src/rougail/user_datas.py:367
msgid "family {0} is {1}, {2} at index \"{3}\" will be ignored when loading from {4}"
msgstr ""
#: src/rougail/user_datas.py:373
#: src/rougail/user_datas.py:380
msgid "variable {0} is {1}, it will be ignored when loading from {2}"
msgstr ""
#: src/rougail/user_datas.py:381
#: src/rougail/user_datas.py:388
msgid "family {0} is {1}, {2} will be ignored when loading from {3}"
msgstr ""
#: src/rougail/user_datas.py:401
#: src/rougail/user_datas.py:408
msgid "the value \"{0}\" is an invalid {1} for {2} at index \"{3}\", {4}, it will be ignored when loading from {5}"
msgstr ""
#: src/rougail/user_datas.py:415
#: src/rougail/user_datas.py:422
msgid "the value \"{0}\" is an invalid {1} for {2}, {3}, it will be ignored when loading from {4}"
msgstr ""

View file

@ -1,6 +1,6 @@
[project]
name = "rougail"
version = "1.2.0a39"
version = "1.2.0a38"
[tool.commitizen]
name = "cz_conventional_commits"

View file

@ -4,7 +4,7 @@ requires = ["flit_core >=3.8.0,<4"]
[project]
name = "rougail-base"
version = "1.2.0a39"
version = "1.2.0a38"
authors = [{name = "Emmanuel Garette", email = "gnunux@gnunux.info"}]
readme = "README.md"
description = "A consistency handling system that was initially designed in the configuration management"

View file

@ -4,7 +4,7 @@ requires = ["flit_core >=3.8.0,<4"]
[project]
name = "rougail"
version = "1.2.0a39"
version = "1.2.0a38"
authors = [{name = "Emmanuel Garette", email = "gnunux@gnunux.info"}]
description = "A consistency handling system that was initially designed in the configuration management"
classifiers = [
@ -18,7 +18,7 @@ classifiers = [
dependencies = [
"ruamel.yaml ~= 0.18.6",
"pydantic ~= 2.9.2",
"rougail-base == 1.2.0a39",
"rougail-base == 1.2.0a38",
]
[tool.flit.sdist]

View file

@ -1 +1 @@
__version__ = "1.2.0a39"
__version__ = "1.2.0a38"

View file

@ -166,7 +166,7 @@ class Annotator(Walk):
raise DictConsistencyError(msg, 82, xmlfiles)
if tag in PROPERTIES_MAKE_SENSE:
msg = _(
'invalid tag name "{0}" should not be name of an available properties'
'invalid tag name "{0}" should not be name of an available proprerties'
).format(tag)
raise DictConsistencyError(msg, 82, xmlfiles)

View file

@ -25,6 +25,7 @@ details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
from pathlib import Path
from tiramisu import Config
from ruamel.yaml import YAML
@ -128,16 +129,11 @@ class _RougailConfig:
key = RENAMED.get(key, key)
option = self.config.option(key)
if option.isoptiondescription() and option.isleadership():
if isinstance(value, RConfigLeadership):
leader = value.leader
followers = value.followers
else:
leader = list(value)
followers = value.values()
leader = list(value)
option.leader().value.reset()
option.leader().value.set(leader)
follower = option.followers()[0]
for idx, val in enumerate(followers):
for idx, val in enumerate(value.values()):
self.config.option(follower.path(), idx).value.set(val)
elif key == "not_export_with_import":
option.value.set(not value)
@ -182,7 +178,7 @@ class _RougailConfig:
leader = value
else:
followers.append(value)
return RConfigLeadership(self.config, option, leader, followers)
return dict(zip(leader, followers))
def parse(self, config) -> str:
for option in config:
@ -203,42 +199,6 @@ class _RougailConfig:
return values
class RConfigLeadership():
def __init__(self, config, option, leader, followers):
self.config = config
self.option = option
self.leader = leader
self.followers = followers
def items(self):
return dict(zip(self.leader, self.followers)).items()
def __setitem__(
self,
key,
value,
) -> None:
self.config.property.read_write()
names = self.option.option('names')
leader = names.value.get()
leader.append(key)
names.value.set(leader)
directories = self.option.option('directories', len(leader) - 1)
directories.value.set(value)
self.leader.append(key)
self.followers.append(value)
self.config.property.read_only()
def __getitem__(self, key):
option = self.option.option(key)
if option.isleader():
return option.value.get()
return [option.index(idx).value.get() for idx in range(option.value.len())]
def __repr__(self):
return dict(zip(self.leader, self.followers))
class FakeRougailConvert(RougailConvert):
def __init__(
self,

View file

@ -28,6 +28,7 @@ from pydantic import (
ConfigDict,
)
import tiramisu
from tiramisu.config import get_common_path
from ..utils import (
get_jinja_variable_to_param,
calc_multi_for_type_variable,

View file

@ -219,7 +219,6 @@ class UserDatas:
'the variable "{0}" contains secrets and should not be defined in {1}'
).format(path, self.values[values_path]["source"])
)
self.values.pop(path)
continue
value = self.convert_value(
path, option, options, self.values[values_path]["values"]

View file

@ -1,6 +0,0 @@
{
"rougail.var": {
"owner": "default",
"value": []
}
}

View file

@ -1,3 +0,0 @@
{
"rougail.var": []
}

View file

@ -1,6 +0,0 @@
{
"rougail.var": {
"owner": "default",
"value": []
}
}

View file

@ -1,3 +0,0 @@
{
"rougail.var": []
}

View file

@ -1,15 +0,0 @@
from tiramisu import *
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
from re import compile as re_compile
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
load_functions('../rougail-tests/funcs/test.py')
try:
groups.namespace
except:
groups.addgroup('namespace')
ALLOWED_LEADER_PROPERTIES.add("basic")
ALLOWED_LEADER_PROPERTIES.add("standard")
ALLOWED_LEADER_PROPERTIES.add("advanced")
option_2 = IntOption(name="var", doc="the first variable", multi=True, properties=frozenset({"basic", "mandatory"}), informations={'ymlfiles': ['../rougail-tests/structures/01_6integer_multi_mandatory/rougail/00-base.yml'], 'type': 'integer'})
optiondescription_1 = OptionDescription(name="rougail", doc="Rougail", group_type=groups.namespace, children=[option_2], properties=frozenset({"basic"}), informations={'ymlfiles': ['']})
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1])

View file

@ -1,10 +0,0 @@
from tiramisu import *
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
from re import compile as re_compile
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
load_functions('../rougail-tests/funcs/test.py')
ALLOWED_LEADER_PROPERTIES.add("basic")
ALLOWED_LEADER_PROPERTIES.add("standard")
ALLOWED_LEADER_PROPERTIES.add("advanced")
option_1 = IntOption(name="var", doc="the first variable", multi=True, properties=frozenset({"basic", "mandatory"}), informations={'ymlfiles': ['../rougail-tests/structures/01_6integer_multi_mandatory/rougail/00-base.yml'], 'type': 'integer'})
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1])