Compare commits

..

No commits in common. "d76e676d4e0e83d0672a52232bb1632bc2cbf29c" and "e06c9b18291559e6ec5ea9b0b3e81fa6c997123a" have entirely different histories.

4367 changed files with 47299 additions and 61252 deletions

View file

@ -11,7 +11,7 @@ include_toc: true
> Les fichiers de structure contiennent toutes les informations relatif aux variables. Cette sortie génère la documentation pour tout ou partie de ces variables.\ > Les fichiers de structure contiennent toutes les informations relatif aux variables. Cette sortie génère la documentation pour tout ou partie de ces variables.\
> **Chemin** : doc\ > **Chemin** : doc\
> *`désactivé`*\ > *`désactivé`*\
> **Désactivé** : si "[Sélection pour sortie](#step.output)" n'est pas doc > **Désactivé** : si doc n'est pas spécifié dans "[Sélection pour sortie](#step.output)"
| Variable | Description | Valeur par défaut | Type | Contrôle des accès | Validateur | | Variable | Description | Valeur par défaut | Type | Contrôle des accès | Validateur |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------|-------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------| |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------|-------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|

View file

@ -11,7 +11,7 @@ include_toc: true
> The structural files contain all the information related to the variables. This output generates the documentation for all or some of these variables.\ > The structural files contain all the information related to the variables. This output generates the documentation for all or some of these variables.\
> **Path**: doc\ > **Path**: doc\
> *`disabled`*\ > *`disabled`*\
> **Disabled**: if "[Select for output](#step.output)" is not doc > **Disabled**: if doc is not set in "[Select for output](#step.output)"
| Variable | Description | Default value | Type | Access control | Validator | | Variable | Description | Default value | Type | Access control | Validator |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|-----------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------| |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|-----------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|

View file

@ -5,8 +5,8 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"POT-Creation-Date: 2026-03-29 10:57+0200\n" "POT-Creation-Date: 2026-01-29 08:31+0100\n"
"PO-Revision-Date: 2026-03-29 10:58+0200\n" "PO-Revision-Date: 2026-01-29 08:33+0100\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"Language: fr\n" "Language: fr\n"
@ -16,174 +16,37 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n" "Generated-By: pygettext.py 1.5\n"
"X-Generator: Poedit 3.8\n" "X-Generator: Poedit 3.8\n"
#: src/rougail/output_doc/changelog.py:153 #: src/rougail/output_doc/annotator.py:371
msgid "New variable"
msgstr "Nouvelle variable"
#: src/rougail/output_doc/changelog.py:155
msgid "New variables"
msgstr "Nouvelles variables"
#: src/rougail/output_doc/changelog.py:169
msgid "Modified variable"
msgstr "Variable modifiée"
#: src/rougail/output_doc/changelog.py:171
msgid "Modified variables"
msgstr "Variables modifiées"
#: src/rougail/output_doc/changelog.py:185
msgid "Deleted variable"
msgstr "Variable supprimée"
#: src/rougail/output_doc/changelog.py:187
msgid "Deleted variables"
msgstr "Variables supprimées"
#: src/rougail/output_doc/collect.py:52
msgid ""
"cannot find \"{0}_calculation\" information, do you have annotate this "
"configuration?"
msgstr ""
"ne peut trouver l'information \"{0}_calculation\", avez-vous annoté cette "
"configuration ?"
#: src/rougail/output_doc/collect.py:93
msgid "the value of the information \"{0}\" of the variable \"{1}\""
msgstr "la valeur de l'information \"{0}\" de la variable \"{1}\""
#: src/rougail/output_doc/collect.py:97
msgid "the value of the global information \"{0}\""
msgstr "la valeur de l'information globale \"{0}\""
#: src/rougail/output_doc/collect.py:101
msgid "the value of the {0}"
msgstr "la valeur de l'{0}"
#: src/rougail/output_doc/collect.py:108
msgid "depends on a calculation"
msgstr "dépend d'un calcul"
#: src/rougail/output_doc/collect.py:109
msgid "\"{0}\" is a calculation for {1} but has no description in {2}"
msgstr "\"{0}\" est un calcul pour {1} mais n'a pas de description dans {2}"
#: src/rougail/output_doc/collect.py:172
msgid "depends on an undocumented variable"
msgstr "dépends d'une variable non documentée"
#: src/rougail/output_doc/collect.py:190
msgid "is \"{0}\""
msgstr "est \"{0}\""
#: src/rougail/output_doc/collect.py:195
msgid "is accessible"
msgstr "est accessible"
#: src/rougail/output_doc/collect.py:197
msgid "is defined"
msgstr "est définie"
#: src/rougail/output_doc/collect.py:202
msgid "hasn't the value \"{0}\""
msgstr "n'a pas la valeur \"{0}\""
#: src/rougail/output_doc/collect.py:204
msgid "has the value \"{0}\""
msgstr "a la valeur \"{0}\""
#: src/rougail/output_doc/collect.py:208
msgid "is {0}"
msgstr "est {0}"
#: src/rougail/output_doc/collect.py:210
msgid "when the variable \"{{0}}\" {0}"
msgstr "lorsque la variable \"{{0}}\" {0}"
#: src/rougail/output_doc/collect.py:237
msgid "the value of the variable \"{0}\" if it is defined"
msgstr "la valeur de la variable \"{0}\" si elle est définie"
#: src/rougail/output_doc/collect.py:239
msgid "the value of the variable \"{0}\""
msgstr "la valeur de la variable \"{0}\""
#: src/rougail/output_doc/collect.py:255
msgid "(from an undocumented variable)"
msgstr "(issue d'une variable non documentée)"
#: src/rougail/output_doc/collect.py:261
msgid "{0} (from an undocumented variable)"
msgstr "{0} (issue d'une variable non documentée)"
#: src/rougail/output_doc/collect.py:265
msgid "the value of an undocumented variable"
msgstr "la valeur d'une variable non documentée"
#: src/rougail/output_doc/collect.py:302
msgid "when the identifier is \"{0}\"" msgid "when the identifier is \"{0}\""
msgstr "lorsque l'identifiant est \"{0}\"" msgstr "lorsque l'identifiant est \"{0}\""
#: src/rougail/output_doc/collect.py:304 #: src/rougail/output_doc/annotator.py:373
msgid "when the identifier is not \"{0}\"" msgid "when the identifier is not \"{0}\""
msgstr "lorsque l'identifiant n'est pas \"{0}\"" msgstr "lorsque l'identifiant n'est pas \"{0}\""
#: src/rougail/output_doc/collect.py:309 #: src/rougail/output_doc/changelog.py:137
msgid "the value of the identifier" msgid "New variable"
msgstr "la valeur de l'identifiant" msgstr "Nouvelle variable"
#: src/rougail/output_doc/collect.py:396 #: src/rougail/output_doc/changelog.py:139
msgid "This family contains lists of variable blocks" msgid "New variables"
msgstr "Cette famille contient des listes de bloc de variable" msgstr "Nouvelles variables"
#: src/rougail/output_doc/collect.py:400 #: src/rougail/output_doc/changelog.py:153
msgid "This family builds families dynamically" msgid "Modified variable"
msgstr "Cette famille construit des familles dynamiquement" msgstr "Variable modifiée"
#: src/rougail/output_doc/collect.py:410 #: src/rougail/output_doc/changelog.py:155
msgid "This family is a namespace" msgid "Modified variables"
msgstr "Cette famille est un espace de nom" msgstr "Variables modifiées"
#: src/rougail/output_doc/collect.py:461 #: src/rougail/output_doc/changelog.py:169
msgid "Example" msgid "Deleted variable"
msgstr "Exemple" msgstr "Variable supprimée"
#: src/rougail/output_doc/collect.py:464 #: src/rougail/output_doc/changelog.py:171
msgid "Examples" msgid "Deleted variables"
msgstr "Exemples" msgstr "Variables supprimées"
#: src/rougail/output_doc/collect.py:470
msgid "Tag"
msgstr "Étiquette"
#: src/rougail/output_doc/collect.py:473
msgid "Tags"
msgstr "Étiquettes"
#: src/rougail/output_doc/collect.py:567
msgid "text based with regular expressions \"{0}\""
msgstr "texte avec expression rationnelle \"{0}\""
#: src/rougail/output_doc/collect.py:571
#: src/rougail/output_doc/tabular/six_columns.py:83
msgid "Validator"
msgstr "Validateur"
#: src/rougail/output_doc/collect.py:574
msgid "Validators"
msgstr "Validateurs"
#: src/rougail/output_doc/collect.py:583
msgid "Choices"
msgstr "Choix"
#: src/rougail/output_doc/collect.py:633
msgid "Default"
msgstr "Défaut"
#: src/rougail/output_doc/collect.py:643
msgid "No attribute \"description\" for \"{0}\" in {1}"
msgstr "Aucun attribut \"description\" pour \"{0}\" dans {1}"
#: src/rougail/output_doc/config.py:54 #: src/rougail/output_doc/config.py:54
msgid "duplicated level rougail-output-doc for {0} \"{1}\": {2} and {3}" msgid "duplicated level rougail-output-doc for {0} \"{1}\": {2} and {3}"
@ -193,15 +56,15 @@ msgstr "niveau dupliqué pour rougail-doc pour {0} \"{1}\": {2} et {3}"
msgid "duplicated name \"{0}\" in rougail-output-doc" msgid "duplicated name \"{0}\" in rougail-output-doc"
msgstr "nom dupliqué \"{0}\" dans rougail-output-doc" msgstr "nom dupliqué \"{0}\" dans rougail-output-doc"
#: src/rougail/output_doc/config.py:116 #: src/rougail/output_doc/config.py:118
msgid "is true if doc is activate" msgid "is true if doc is activate"
msgstr "est true si doc est activé" msgstr "est true si doc est activé"
#: src/rougail/output_doc/config.py:119 #: src/rougail/output_doc/config.py:121
msgid "Generate documentation from structural files" msgid "Generate documentation from structural files"
msgstr "Générer la documentation depuis les fichiers de structure" msgstr "Générer la documentation depuis les fichiers de structure"
#: src/rougail/output_doc/config.py:120 #: src/rougail/output_doc/config.py:122
msgid "" msgid ""
"The structural files contain all the information related to the variables. " "The structural files contain all the information related to the variables. "
"This output generates the documentation for all or some of these variables." "This output generates the documentation for all or some of these variables."
@ -210,19 +73,19 @@ msgstr ""
"variables. Cette sortie génère la documentation pour tout ou partie de ces " "variables. Cette sortie génère la documentation pour tout ou partie de ces "
"variables." "variables."
#: src/rougail/output_doc/config.py:125 #: src/rougail/output_doc/config.py:127
msgid "if \"step.output\" is not doc" msgid "if doc is not set in \"step.output\""
msgstr "si \"step.output\" n'est pas doc" msgstr "si doc n'est pas spécifié dans \"step.output\""
#: src/rougail/output_doc/config.py:128 #: src/rougail/output_doc/config.py:130
msgid "The output format of the generated documentation" msgid "The output format of the generated documentation"
msgstr "Le format de sortie de la documentation générée" msgstr "Le format de sortie de la documentation générée"
#: src/rougail/output_doc/config.py:137 #: src/rougail/output_doc/config.py:139
msgid "Generate document with this tabular model" msgid "Generate document with this tabular model"
msgstr "Génère la documentation avec ce modèle de tableau" msgstr "Génère la documentation avec ce modèle de tableau"
#: src/rougail/output_doc/config.py:138 #: src/rougail/output_doc/config.py:140
msgid "" msgid ""
"The variables are documented with a tabular view. A template selection " "The variables are documented with a tabular view. A template selection "
"allows you to choose the content of each column." "allows you to choose the content of each column."
@ -230,15 +93,15 @@ msgstr ""
"Les variables sont documentées avec une vue tableau. Une sélection de modèle " "Les variables sont documentées avec une vue tableau. Une sélection de modèle "
"vous permet de choisir le contenu de chaque colonne." "vous permet de choisir le contenu de chaque colonne."
#: src/rougail/output_doc/config.py:146 #: src/rougail/output_doc/config.py:148
msgid "\"_.output_format\" in json is not compatible with this variable" msgid "\"_.output_format\" in json is not compatible with this variable"
msgstr "\"_.output_format\" en json n\\'est pas compatible avec cette variable" msgstr "\"_.output_format\" en json n\\'est pas compatible avec cette variable"
#: src/rougail/output_doc/config.py:153 #: src/rougail/output_doc/config.py:155
msgid "Generated content" msgid "Generated content"
msgstr "Contenu généré" msgstr "Contenu généré"
#: src/rougail/output_doc/config.py:154 #: src/rougail/output_doc/config.py:156
msgid "" msgid ""
"You can generate three type of document. All variables (\"variables\"), an " "You can generate three type of document. All variables (\"variables\"), an "
"example file in YAML format (\"example\") or change log (\"changelog\")." "example file in YAML format (\"example\") or change log (\"changelog\")."
@ -247,7 +110,7 @@ msgstr ""
"(\"variables\"), un exemple de fichier au format YAML (\"example\") ou le " "(\"variables\"), un exemple de fichier au format YAML (\"example\") ou le "
"journal des changements (\"changelog\")." "journal des changements (\"changelog\")."
#: src/rougail/output_doc/config.py:167 #: src/rougail/output_doc/config.py:169
msgid "" msgid ""
"\"_.output_format\" in json is not compatible with changelog or example " "\"_.output_format\" in json is not compatible with changelog or example "
"\"_.contents\"" "\"_.contents\""
@ -255,15 +118,15 @@ msgstr ""
"\"_.output_format\" en json n'est pas compatible avec \"_.contents\" " "\"_.output_format\" en json n'est pas compatible avec \"_.contents\" "
"changelog or example" "changelog or example"
#: src/rougail/output_doc/config.py:170 #: src/rougail/output_doc/config.py:172
msgid "Starting title level" msgid "Starting title level"
msgstr "Niveau de titre de départ" msgstr "Niveau de titre de départ"
#: src/rougail/output_doc/config.py:175 #: src/rougail/output_doc/config.py:177
msgid "Modify values to document all variables" msgid "Modify values to document all variables"
msgstr "Modifier les valeurs pour documenter toutes les variables" msgstr "Modifier les valeurs pour documenter toutes les variables"
#: src/rougail/output_doc/config.py:176 #: src/rougail/output_doc/config.py:178
msgid "" msgid ""
"To document leadership or dynamic family variables, it is sometimes " "To document leadership or dynamic family variables, it is sometimes "
"necessary to generate values, which can change the values in the " "necessary to generate values, which can change the values in the "
@ -274,17 +137,17 @@ msgstr ""
"valeurs de la configuration. Soyez vigilent si vous réutilisez cette " "valeurs de la configuration. Soyez vigilent si vous réutilisez cette "
"configuration." "configuration."
#: src/rougail/output_doc/config.py:180 #: src/rougail/output_doc/config.py:182
msgid "Display documentation in console always with true color terminal" msgid "Display documentation in console always with true color terminal"
msgstr "" msgstr ""
"Afficher la documentation dans la console en permanence avec un terminal en " "Afficher la documentation dans la console en permanence avec un terminal en "
"couleurs réelles" "couleurs réelles"
#: src/rougail/output_doc/config.py:187 #: src/rougail/output_doc/config.py:189
msgid "The variables in this family are documented in another file" msgid "The variables in this family are documented in another file"
msgstr "Les variables pour cette famille sont documentés dans un autre fichier" msgstr "Les variables pour cette famille sont documentés dans un autre fichier"
#: src/rougail/output_doc/config.py:188 #: src/rougail/output_doc/config.py:190
msgid "" msgid ""
"If you separate the variables into different files, the links between the " "If you separate the variables into different files, the links between the "
"variables will break. Therefore, you must define different filenames for the " "variables will break. Therefore, you must define different filenames for the "
@ -294,23 +157,23 @@ msgstr ""
"variables va être cassé. Dans ce cas, vous devez définit différents nom de " "variables va être cassé. Dans ce cas, vous devez définit différents nom de "
"fichiers pour les fichiers contenant ces variables." "fichiers pour les fichiers contenant ces variables."
#: src/rougail/output_doc/config.py:192 #: src/rougail/output_doc/config.py:194
msgid "This file contains child variables of the family" msgid "This file contains child variables of the family"
msgstr "Ce fichier contient les variables enfants de la famille" msgstr "Ce fichier contient les variables enfants de la famille"
#: src/rougail/output_doc/config.py:196 #: src/rougail/output_doc/config.py:198
msgid "Name of the file" msgid "Name of the file"
msgstr "Nom du fichier" msgstr "Nom du fichier"
#: src/rougail/output_doc/config.py:204 #: src/rougail/output_doc/config.py:206
msgid "Documentation a structural type" msgid "Documentation a structural type"
msgstr "Documenter type de structure" msgstr "Documenter type de structure"
#: src/rougail/output_doc/config.py:208 #: src/rougail/output_doc/config.py:210
msgid "Variables and changelog documentation" msgid "Variables and changelog documentation"
msgstr "Documentation des variables et journal de changements" msgstr "Documentation des variables et journal de changements"
#: src/rougail/output_doc/config.py:213 #: src/rougail/output_doc/config.py:215
msgid "" msgid ""
"if \"_.output_format\" is json or \"_.contents\" hasn't variables or " "if \"_.output_format\" is json or \"_.contents\" hasn't variables or "
"changelog" "changelog"
@ -318,45 +181,45 @@ msgstr ""
"si \"_.output_format\" en json ou si \"_.contents\" n'est pas variables ou " "si \"_.output_format\" en json ou si \"_.contents\" n'est pas variables ou "
"changelog" "changelog"
#: src/rougail/output_doc/config.py:216 #: src/rougail/output_doc/config.py:218
msgid "Do not add families in documentation" msgid "Do not add families in documentation"
msgstr "Ne pas ajouter les familles dans la documentation" msgstr "Ne pas ajouter les familles dans la documentation"
#: src/rougail/output_doc/config.py:221 #: src/rougail/output_doc/config.py:223
msgid "Add command line informations in documentation" msgid "Add command line informations in documentation"
msgstr "Ajoute les informations de la ligne de commande dans la documentation" msgstr "Ajoute les informations de la ligne de commande dans la documentation"
#: src/rougail/output_doc/config.py:226 #: src/rougail/output_doc/config.py:228
msgid "Add environment variable informations in documentation" msgid "Add environment variable informations in documentation"
msgstr "" msgstr ""
"Ajoute les informations de variable d'environnement dans la documentation" "Ajoute les informations de variable d'environnement dans la documentation"
#: src/rougail/output_doc/config.py:231 #: src/rougail/output_doc/config.py:233
msgid "Environment variables prefix name" msgid "Environment variables prefix name"
msgstr "Préfixe du nom des variables d'environnement" msgstr "Préfixe du nom des variables d'environnement"
#: src/rougail/output_doc/config.py:238 #: src/rougail/output_doc/config.py:240
msgid "should only use uppercase characters" msgid "should only use uppercase characters"
msgstr "doit seulement utilise des caractères en majuscule" msgstr "doit seulement utilise des caractères en majuscule"
#: src/rougail/output_doc/config.py:243 #: src/rougail/output_doc/config.py:245
msgid "if \"main_namespace\" is not set or \"_.with_environment\" is false" msgid "if \"main_namespace\" is not set or \"_.with_environment\" is false"
msgstr "" msgstr ""
"si \"main_namespace\" n'est pas défini ou \"_.with_environment\" est false" "si \"main_namespace\" n'est pas défini ou \"_.with_environment\" est false"
#: src/rougail/output_doc/config.py:246 #: src/rougail/output_doc/config.py:248
msgid "Changelog documentation" msgid "Changelog documentation"
msgstr "Documentation du journal des changements" msgstr "Documentation du journal des changements"
#: src/rougail/output_doc/config.py:251 #: src/rougail/output_doc/config.py:253
msgid "if changelog in not in \"_.contents\"" msgid "if changelog in not in \"_.contents\""
msgstr "changelog n'est pas défini dans \"_.contents\"" msgstr "changelog n'est pas défini dans \"_.contents\""
#: src/rougail/output_doc/config.py:254 #: src/rougail/output_doc/config.py:256
msgid "Previous description file in JSON format" msgid "Previous description file in JSON format"
msgstr "Précédent fichier de description au format JSON" msgstr "Précédent fichier de description au format JSON"
#: src/rougail/output_doc/config.py:255 #: src/rougail/output_doc/config.py:257
msgid "" msgid ""
"To generate the changelog, you need to compare the old list of variables (in " "To generate the changelog, you need to compare the old list of variables (in "
"json format) with the current variables." "json format) with the current variables."
@ -364,94 +227,217 @@ msgstr ""
"Pour générer le journal des changements, vous devez comparer l'ancienne " "Pour générer le journal des changements, vous devez comparer l'ancienne "
"liste des variables (au format json) avec les variables courantes." "liste des variables (au format json) avec les variables courantes."
#: src/rougail/output_doc/config.py:259 #: src/rougail/output_doc/config.py:261
msgid "Examples configuration" msgid "Examples configuration"
msgstr "Configuration des exemples" msgstr "Configuration des exemples"
#: src/rougail/output_doc/config.py:264 #: src/rougail/output_doc/config.py:266
msgid "if example is not in \"_.contents\"" msgid "if example is not in \"_.contents\""
msgstr "si example n'est pas défini dans \"_.contents\"" msgstr "si example n'est pas défini dans \"_.contents\""
#: src/rougail/output_doc/config.py:267 #: src/rougail/output_doc/config.py:269
msgid "Add description of variables and families when generate examples" msgid "Add description of variables and families when generate examples"
msgstr "" msgstr ""
"Ajouter la description des variables et des familles lorsqu'on génère des " "Ajouter la description des variables et des familles lorsqu'on génère des "
"exemples" "exemples"
#: src/rougail/output_doc/config.py:272 #: src/rougail/output_doc/config.py:274
msgid "Comment in examples starts at column" msgid "Comment in examples starts at column"
msgstr "Commentaire dans les exemples commence à la colonne" msgstr "Commentaire dans les exemples commence à la colonne"
#: src/rougail/output_doc/doc.py:58 #: src/rougail/output_doc/doc.py:70
msgid "{0} is not set as step.output" msgid "{0} is not set as step.output"
msgstr "{0} n'est pas défini dans step.output" msgstr "{0} n'est pas défini dans step.output"
#: src/rougail/output_doc/example.py:96 #: src/rougail/output_doc/doc.py:363
msgid "This family contains lists of variable blocks"
msgstr "Cette famille contient des listes de bloc de variable"
#: src/rougail/output_doc/doc.py:373
msgid "This family builds families dynamically"
msgstr "Cette famille construit des familles dynamiquement"
#: src/rougail/output_doc/doc.py:387
msgid "Default"
msgstr "Défaut"
#: src/rougail/output_doc/doc.py:405
msgid "Example"
msgstr "Exemple"
#: src/rougail/output_doc/doc.py:408
msgid "Examples"
msgstr "Exemples"
#: src/rougail/output_doc/doc.py:417
msgid "Tag"
msgstr "Étiquette"
#: src/rougail/output_doc/doc.py:420
msgid "Tags"
msgstr "Étiquettes"
#: src/rougail/output_doc/doc.py:452
msgid "No attribute \"description\" for \"{0}\" in {1}"
msgstr "Aucun attribut \"description\" pour \"{0}\" dans {1}"
#: src/rougail/output_doc/doc.py:587
msgid "text based with regular expressions \"{0}\""
msgstr "texte avec expression rationnelle \"{0}\""
#: src/rougail/output_doc/doc.py:591
#: src/rougail/output_doc/tabular/six_columns.py:65
msgid "Validator"
msgstr "Validateur"
#: src/rougail/output_doc/doc.py:594
msgid "Validators"
msgstr "Validateurs"
#: src/rougail/output_doc/doc.py:603
msgid "Choices"
msgstr "Choix"
#: src/rougail/output_doc/doc.py:707
msgid "the value of the identifier"
msgstr "la valeur de l'identifiant"
#: src/rougail/output_doc/doc.py:711
msgid "the value of the information \"{0}\" of the variable \"{1}\""
msgstr "la valeur de l'information \"{0}\" de la variable \"{1}\""
#: src/rougail/output_doc/doc.py:715
msgid "the value of the global information \"{0}\""
msgstr "la valeur de l'information globale \"{0}\""
#: src/rougail/output_doc/doc.py:717
msgid "the value of the {0}"
msgstr "la valeur de l'{0}"
#: src/rougail/output_doc/doc.py:724
msgid "depends on a calculation"
msgstr "dépend d'un calcul"
#: src/rougail/output_doc/doc.py:730
msgid "\"{0}\" is a calculation for {1} but has no description in {2}"
msgstr "\"{0}\" est un calcul pour {1} mais n'a pas de description dans {2}"
#: src/rougail/output_doc/doc.py:786 src/rougail/output_doc/doc.py:913
msgid "depends on an undocumented variable"
msgstr "dépends d'une variable non documentée"
#: src/rougail/output_doc/doc.py:804
msgid "is \"{0}\""
msgstr "est \"{0}\""
#: src/rougail/output_doc/doc.py:809
msgid "is accessible"
msgstr "est accessible"
#: src/rougail/output_doc/doc.py:811
msgid "is defined"
msgstr "est définie"
#: src/rougail/output_doc/doc.py:816
msgid "hasn't the value \"{0}\""
msgstr "n'a pas la valeur \"{0}\""
#: src/rougail/output_doc/doc.py:820
msgid "has the value \"{0}\""
msgstr "a la valeur \"{0}\""
#: src/rougail/output_doc/doc.py:825
msgid "is {0}"
msgstr "est {0}"
#: src/rougail/output_doc/doc.py:826
msgid "when the variable \"{{0}}\" {0}"
msgstr "lorsque la variable \"{{0}}\" {0}"
#: src/rougail/output_doc/doc.py:853
msgid "the value of the variable \"{0}\" if it is defined"
msgstr "la valeur de la variable \"{0}\" si elle est définie"
#: src/rougail/output_doc/doc.py:855
msgid "the value of the variable \"{0}\""
msgstr "la valeur de la variable \"{0}\""
#: src/rougail/output_doc/doc.py:875
msgid "the value of an undocumented variable"
msgstr "la valeur d'une variable non documentée"
#: src/rougail/output_doc/doc.py:878
msgid "the values of undocumented variables"
msgstr "les valeurs de variables non documentées"
#: src/rougail/output_doc/doc.py:901
msgid "(from an undocumented variable)"
msgstr "(issue d'une variable non documentée)"
#: src/rougail/output_doc/doc.py:909
msgid "{0} (from an undocumented variable)"
msgstr "{0} (issue d'une variable non documentée)"
#: src/rougail/output_doc/example.py:70
msgid "Example with mandatory variables not filled in" msgid "Example with mandatory variables not filled in"
msgstr "Exemple avec des variables obligatoire non renseignée" msgstr "Exemple avec des variables obligatoire non renseignée"
#: src/rougail/output_doc/example.py:98 #: src/rougail/output_doc/example.py:85
msgid "Example with all variables modifiable" msgid "Example with all variables modifiable"
msgstr "Exemple avec toutes les variables modifiable" msgstr "Exemple avec toutes les variables modifiable"
#: src/rougail/output_doc/output/asciidoc.py:156 #: src/rougail/output_doc/output/asciidoc.py:156
#: src/rougail/output_doc/output/console.py:201 #: src/rougail/output_doc/output/console.py:199
#: src/rougail/output_doc/output/gitlab.py:44 #: src/rougail/output_doc/output/gitlab.py:44
msgid "Informations" msgid "Informations"
msgstr "Informations" msgstr "Informations"
#: src/rougail/output_doc/tabular/five_columns.py:72 #: src/rougail/output_doc/tabular/five_columns.py:59
msgid "Access control" msgid "Access control"
msgstr "Contrôle des accès" msgstr "Contrôle des accès"
#: src/rougail/output_doc/tabular/four_columns.py:64 #: src/rougail/output_doc/tabular/four_columns.py:53
msgid "Type" msgid "Type"
msgstr "Type" msgstr "Type"
#: src/rougail/output_doc/tabular/three_columns.py:54 #: src/rougail/output_doc/tabular/three_columns.py:46
msgid "Default value" msgid "Default value"
msgstr "Valeur par défaut" msgstr "Valeur par défaut"
#: src/rougail/output_doc/tabular/two_columns.py:56 #: src/rougail/output_doc/tabular/two_columns.py:45
msgid "Variable" msgid "Variable"
msgstr "Variable" msgstr "Variable"
#: src/rougail/output_doc/tabular/two_columns.py:58 #: src/rougail/output_doc/tabular/two_columns.py:47
msgid "Description" msgid "Description"
msgstr "Description" msgstr "Description"
#: src/rougail/output_doc/utils.py:198 #: src/rougail/output_doc/utils.py:152
msgid "Command line" msgid "Command line"
msgstr "Ligne de commande" msgstr "Ligne de commande"
#: src/rougail/output_doc/utils.py:216 #: src/rougail/output_doc/utils.py:159
msgid "Environment variable" msgid "Environment variable"
msgstr "Variable d'environnement" msgstr "Variable d'environnement"
#: src/rougail/output_doc/utils.py:526 #: src/rougail/output_doc/utils.py:438
msgid "Path" msgid "Path"
msgstr "Chemin" msgstr "Chemin"
#: src/rougail/output_doc/utils.py:536 #: src/rougail/output_doc/utils.py:448
msgid "Identifiers" msgid "Identifiers"
msgstr "Identifiants" msgstr "Identifiants"
#: src/rougail/output_doc/utils.py:790 src/rougail/output_doc/utils.py:799 #: src/rougail/output_doc/utils.py:668 src/rougail/output_doc/utils.py:677
#: src/rougail/output_doc/utils.py:805 src/rougail/output_doc/utils.py:811 #: src/rougail/output_doc/utils.py:683 src/rougail/output_doc/utils.py:689
#: src/rougail/output_doc/utils.py:815 #: src/rougail/output_doc/utils.py:693
msgid "(default)" msgid "(default)"
msgstr "(défaut)" msgstr "(défaut)"
#: src/rougail/output_doc/utils.py:1123 #: src/rougail/output_doc/utils.py:945
msgid "{0}: {1}" msgid "{0}: {1}"
msgstr "{0} : {1}" msgstr "{0} : {1}"
#~ msgid "if doc is not set in \"step.output\""
#~ msgstr "si doc n'est pas spécifié dans \"step.output\""
#~ msgid "the values of undocumented variables"
#~ msgstr "les valeurs de variables non documentées"
#~ msgid "" #~ msgid ""
#~ "when the variable \"{{0}}\" is defined, accessible and hasn't the value " #~ "when the variable \"{{0}}\" is defined, accessible and hasn't the value "
#~ "\"{0}\"" #~ "\"{0}\""

View file

@ -5,7 +5,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2026-03-29 10:58+0200\n" "POT-Creation-Date: 2026-01-29 08:33+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -15,169 +15,36 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n" "Generated-By: pygettext.py 1.5\n"
#: src/rougail/output_doc/changelog.py:153 #: src/rougail/output_doc/annotator.py:371
msgid "New variable"
msgstr ""
#: src/rougail/output_doc/changelog.py:155
msgid "New variables"
msgstr ""
#: src/rougail/output_doc/changelog.py:169
msgid "Modified variable"
msgstr ""
#: src/rougail/output_doc/changelog.py:171
msgid "Modified variables"
msgstr ""
#: src/rougail/output_doc/changelog.py:185
msgid "Deleted variable"
msgstr ""
#: src/rougail/output_doc/changelog.py:187
msgid "Deleted variables"
msgstr ""
#: src/rougail/output_doc/collect.py:52
msgid "cannot find \"{0}_calculation\" information, do you have annotate this configuration?"
msgstr ""
#: src/rougail/output_doc/collect.py:93
msgid "the value of the information \"{0}\" of the variable \"{1}\""
msgstr ""
#: src/rougail/output_doc/collect.py:97
msgid "the value of the global information \"{0}\""
msgstr ""
#: src/rougail/output_doc/collect.py:101
msgid "the value of the {0}"
msgstr ""
#: src/rougail/output_doc/collect.py:108
msgid "depends on a calculation"
msgstr ""
#: src/rougail/output_doc/collect.py:109
msgid "\"{0}\" is a calculation for {1} but has no description in {2}"
msgstr ""
#: src/rougail/output_doc/collect.py:172
msgid "depends on an undocumented variable"
msgstr ""
#: src/rougail/output_doc/collect.py:190
msgid "is \"{0}\""
msgstr ""
#: src/rougail/output_doc/collect.py:195
msgid "is accessible"
msgstr ""
#: src/rougail/output_doc/collect.py:197
msgid "is defined"
msgstr ""
#: src/rougail/output_doc/collect.py:202
msgid "hasn't the value \"{0}\""
msgstr ""
#: src/rougail/output_doc/collect.py:204
msgid "has the value \"{0}\""
msgstr ""
#: src/rougail/output_doc/collect.py:208
msgid "is {0}"
msgstr ""
#: src/rougail/output_doc/collect.py:210
msgid "when the variable \"{{0}}\" {0}"
msgstr ""
#: src/rougail/output_doc/collect.py:237
msgid "the value of the variable \"{0}\" if it is defined"
msgstr ""
#: src/rougail/output_doc/collect.py:239
msgid "the value of the variable \"{0}\""
msgstr ""
#: src/rougail/output_doc/collect.py:255
msgid "(from an undocumented variable)"
msgstr ""
#: src/rougail/output_doc/collect.py:261
msgid "{0} (from an undocumented variable)"
msgstr ""
#: src/rougail/output_doc/collect.py:265
msgid "the value of an undocumented variable"
msgstr ""
#: src/rougail/output_doc/collect.py:302
msgid "when the identifier is \"{0}\"" msgid "when the identifier is \"{0}\""
msgstr "" msgstr ""
#: src/rougail/output_doc/collect.py:304 #: src/rougail/output_doc/annotator.py:373
msgid "when the identifier is not \"{0}\"" msgid "when the identifier is not \"{0}\""
msgstr "" msgstr ""
#: src/rougail/output_doc/collect.py:309 #: src/rougail/output_doc/changelog.py:137
msgid "the value of the identifier" msgid "New variable"
msgstr "" msgstr ""
#: src/rougail/output_doc/collect.py:396 #: src/rougail/output_doc/changelog.py:139
msgid "This family contains lists of variable blocks" msgid "New variables"
msgstr "" msgstr ""
#: src/rougail/output_doc/collect.py:400 #: src/rougail/output_doc/changelog.py:153
msgid "This family builds families dynamically" msgid "Modified variable"
msgstr "" msgstr ""
#: src/rougail/output_doc/collect.py:410 #: src/rougail/output_doc/changelog.py:155
msgid "This family is a namespace" msgid "Modified variables"
msgstr "" msgstr ""
#: src/rougail/output_doc/collect.py:461 #: src/rougail/output_doc/changelog.py:169
msgid "Example" msgid "Deleted variable"
msgstr "" msgstr ""
#: src/rougail/output_doc/collect.py:464 #: src/rougail/output_doc/changelog.py:171
msgid "Examples" msgid "Deleted variables"
msgstr ""
#: src/rougail/output_doc/collect.py:470
msgid "Tag"
msgstr ""
#: src/rougail/output_doc/collect.py:473
msgid "Tags"
msgstr ""
#: src/rougail/output_doc/collect.py:567
msgid "text based with regular expressions \"{0}\""
msgstr ""
#: src/rougail/output_doc/collect.py:571
#: src/rougail/output_doc/tabular/six_columns.py:83
msgid "Validator"
msgstr ""
#: src/rougail/output_doc/collect.py:574
msgid "Validators"
msgstr ""
#: src/rougail/output_doc/collect.py:583
msgid "Choices"
msgstr ""
#: src/rougail/output_doc/collect.py:633
msgid "Default"
msgstr ""
#: src/rougail/output_doc/collect.py:643
msgid "No attribute \"description\" for \"{0}\" in {1}"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:54 #: src/rougail/output_doc/config.py:54
@ -188,211 +55,340 @@ msgstr ""
msgid "duplicated name \"{0}\" in rougail-output-doc" msgid "duplicated name \"{0}\" in rougail-output-doc"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:116 #: src/rougail/output_doc/config.py:118
msgid "is true if doc is activate" msgid "is true if doc is activate"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:119 #: src/rougail/output_doc/config.py:121
msgid "Generate documentation from structural files" msgid "Generate documentation from structural files"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:120 #: src/rougail/output_doc/config.py:122
msgid "The structural files contain all the information related to the variables. This output generates the documentation for all or some of these variables." msgid "The structural files contain all the information related to the variables. This output generates the documentation for all or some of these variables."
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:125 #: src/rougail/output_doc/config.py:127
msgid "if \"step.output\" is not doc" msgid "if doc is not set in \"step.output\""
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:128 #: src/rougail/output_doc/config.py:130
msgid "The output format of the generated documentation" msgid "The output format of the generated documentation"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:137 #: src/rougail/output_doc/config.py:139
msgid "Generate document with this tabular model" msgid "Generate document with this tabular model"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:138 #: src/rougail/output_doc/config.py:140
msgid "The variables are documented with a tabular view. A template selection allows you to choose the content of each column." msgid "The variables are documented with a tabular view. A template selection allows you to choose the content of each column."
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:146 #: src/rougail/output_doc/config.py:148
msgid "\"_.output_format\" in json is not compatible with this variable" msgid "\"_.output_format\" in json is not compatible with this variable"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:153 #: src/rougail/output_doc/config.py:155
msgid "Generated content" msgid "Generated content"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:154 #: src/rougail/output_doc/config.py:156
msgid "You can generate three type of document. All variables (\"variables\"), an example file in YAML format (\"example\") or change log (\"changelog\")." msgid "You can generate three type of document. All variables (\"variables\"), an example file in YAML format (\"example\") or change log (\"changelog\")."
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:167 #: src/rougail/output_doc/config.py:169
msgid "\"_.output_format\" in json is not compatible with changelog or example \"_.contents\"" msgid "\"_.output_format\" in json is not compatible with changelog or example \"_.contents\""
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:170 #: src/rougail/output_doc/config.py:172
msgid "Starting title level" msgid "Starting title level"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:175 #: src/rougail/output_doc/config.py:177
msgid "Modify values to document all variables" msgid "Modify values to document all variables"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:176 #: src/rougail/output_doc/config.py:178
msgid "To document leadership or dynamic family variables, it is sometimes necessary to generate values, which can change the values in the configuration. Be careful if you reuse this configuration." msgid "To document leadership or dynamic family variables, it is sometimes necessary to generate values, which can change the values in the configuration. Be careful if you reuse this configuration."
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:180 #: src/rougail/output_doc/config.py:182
msgid "Display documentation in console always with true color terminal" msgid "Display documentation in console always with true color terminal"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:187 #: src/rougail/output_doc/config.py:189
msgid "The variables in this family are documented in another file" msgid "The variables in this family are documented in another file"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:188 #: src/rougail/output_doc/config.py:190
msgid "If you separate the variables into different files, the links between the variables will break. Therefore, you must define different filenames for the files containing these variables." msgid "If you separate the variables into different files, the links between the variables will break. Therefore, you must define different filenames for the files containing these variables."
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:192 #: src/rougail/output_doc/config.py:194
msgid "This file contains child variables of the family" msgid "This file contains child variables of the family"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:196 #: src/rougail/output_doc/config.py:198
msgid "Name of the file" msgid "Name of the file"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:204 #: src/rougail/output_doc/config.py:206
msgid "Documentation a structural type" msgid "Documentation a structural type"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:208 #: src/rougail/output_doc/config.py:210
msgid "Variables and changelog documentation" msgid "Variables and changelog documentation"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:213 #: src/rougail/output_doc/config.py:215
msgid "if \"_.output_format\" is json or \"_.contents\" hasn't variables or changelog" msgid "if \"_.output_format\" is json or \"_.contents\" hasn't variables or changelog"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:216 #: src/rougail/output_doc/config.py:218
msgid "Do not add families in documentation" msgid "Do not add families in documentation"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:221 #: src/rougail/output_doc/config.py:223
msgid "Add command line informations in documentation" msgid "Add command line informations in documentation"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:226 #: src/rougail/output_doc/config.py:228
msgid "Add environment variable informations in documentation" msgid "Add environment variable informations in documentation"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:231 #: src/rougail/output_doc/config.py:233
msgid "Environment variables prefix name" msgid "Environment variables prefix name"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:238 #: src/rougail/output_doc/config.py:240
msgid "should only use uppercase characters" msgid "should only use uppercase characters"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:243 #: src/rougail/output_doc/config.py:245
msgid "if \"main_namespace\" is not set or \"_.with_environment\" is false" msgid "if \"main_namespace\" is not set or \"_.with_environment\" is false"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:246 #: src/rougail/output_doc/config.py:248
msgid "Changelog documentation" msgid "Changelog documentation"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:251 #: src/rougail/output_doc/config.py:253
msgid "if changelog in not in \"_.contents\"" msgid "if changelog in not in \"_.contents\""
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:254 #: src/rougail/output_doc/config.py:256
msgid "Previous description file in JSON format" msgid "Previous description file in JSON format"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:255 #: src/rougail/output_doc/config.py:257
msgid "To generate the changelog, you need to compare the old list of variables (in json format) with the current variables." msgid "To generate the changelog, you need to compare the old list of variables (in json format) with the current variables."
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:259 #: src/rougail/output_doc/config.py:261
msgid "Examples configuration" msgid "Examples configuration"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:264 #: src/rougail/output_doc/config.py:266
msgid "if example is not in \"_.contents\"" msgid "if example is not in \"_.contents\""
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:267 #: src/rougail/output_doc/config.py:269
msgid "Add description of variables and families when generate examples" msgid "Add description of variables and families when generate examples"
msgstr "" msgstr ""
#: src/rougail/output_doc/config.py:272 #: src/rougail/output_doc/config.py:274
msgid "Comment in examples starts at column" msgid "Comment in examples starts at column"
msgstr "" msgstr ""
#: src/rougail/output_doc/doc.py:58 #: src/rougail/output_doc/doc.py:70
msgid "{0} is not set as step.output" msgid "{0} is not set as step.output"
msgstr "" msgstr ""
#: src/rougail/output_doc/example.py:96 #: src/rougail/output_doc/doc.py:363
msgid "This family contains lists of variable blocks"
msgstr ""
#: src/rougail/output_doc/doc.py:373
msgid "This family builds families dynamically"
msgstr ""
#: src/rougail/output_doc/doc.py:387
msgid "Default"
msgstr ""
#: src/rougail/output_doc/doc.py:405
msgid "Example"
msgstr ""
#: src/rougail/output_doc/doc.py:408
msgid "Examples"
msgstr ""
#: src/rougail/output_doc/doc.py:417
msgid "Tag"
msgstr ""
#: src/rougail/output_doc/doc.py:420
msgid "Tags"
msgstr ""
#: src/rougail/output_doc/doc.py:452
msgid "No attribute \"description\" for \"{0}\" in {1}"
msgstr ""
#: src/rougail/output_doc/doc.py:587
msgid "text based with regular expressions \"{0}\""
msgstr ""
#: src/rougail/output_doc/doc.py:591
#: src/rougail/output_doc/tabular/six_columns.py:65
msgid "Validator"
msgstr ""
#: src/rougail/output_doc/doc.py:594
msgid "Validators"
msgstr ""
#: src/rougail/output_doc/doc.py:603
msgid "Choices"
msgstr ""
#: src/rougail/output_doc/doc.py:707
msgid "the value of the identifier"
msgstr ""
#: src/rougail/output_doc/doc.py:711
msgid "the value of the information \"{0}\" of the variable \"{1}\""
msgstr ""
#: src/rougail/output_doc/doc.py:715
msgid "the value of the global information \"{0}\""
msgstr ""
#: src/rougail/output_doc/doc.py:717
msgid "the value of the {0}"
msgstr ""
#: src/rougail/output_doc/doc.py:724
msgid "depends on a calculation"
msgstr ""
#: src/rougail/output_doc/doc.py:730
msgid "\"{0}\" is a calculation for {1} but has no description in {2}"
msgstr ""
#: src/rougail/output_doc/doc.py:786 src/rougail/output_doc/doc.py:913
msgid "depends on an undocumented variable"
msgstr ""
#: src/rougail/output_doc/doc.py:804
msgid "is \"{0}\""
msgstr ""
#: src/rougail/output_doc/doc.py:809
msgid "is accessible"
msgstr ""
#: src/rougail/output_doc/doc.py:811
msgid "is defined"
msgstr ""
#: src/rougail/output_doc/doc.py:816
msgid "hasn't the value \"{0}\""
msgstr ""
#: src/rougail/output_doc/doc.py:820
msgid "has the value \"{0}\""
msgstr ""
#: src/rougail/output_doc/doc.py:825
msgid "is {0}"
msgstr ""
#: src/rougail/output_doc/doc.py:826
msgid "when the variable \"{{0}}\" {0}"
msgstr ""
#: src/rougail/output_doc/doc.py:853
msgid "the value of the variable \"{0}\" if it is defined"
msgstr ""
#: src/rougail/output_doc/doc.py:855
msgid "the value of the variable \"{0}\""
msgstr ""
#: src/rougail/output_doc/doc.py:875
msgid "the value of an undocumented variable"
msgstr ""
#: src/rougail/output_doc/doc.py:878
msgid "the values of undocumented variables"
msgstr ""
#: src/rougail/output_doc/doc.py:901
msgid "(from an undocumented variable)"
msgstr ""
#: src/rougail/output_doc/doc.py:909
msgid "{0} (from an undocumented variable)"
msgstr ""
#: src/rougail/output_doc/example.py:70
msgid "Example with mandatory variables not filled in" msgid "Example with mandatory variables not filled in"
msgstr "" msgstr ""
#: src/rougail/output_doc/example.py:98 #: src/rougail/output_doc/example.py:85
msgid "Example with all variables modifiable" msgid "Example with all variables modifiable"
msgstr "" msgstr ""
#: src/rougail/output_doc/output/asciidoc.py:156 #: src/rougail/output_doc/output/asciidoc.py:156
#: src/rougail/output_doc/output/console.py:201 #: src/rougail/output_doc/output/console.py:199
#: src/rougail/output_doc/output/gitlab.py:44 #: src/rougail/output_doc/output/gitlab.py:44
msgid "Informations" msgid "Informations"
msgstr "" msgstr ""
#: src/rougail/output_doc/tabular/five_columns.py:72 #: src/rougail/output_doc/tabular/five_columns.py:59
msgid "Access control" msgid "Access control"
msgstr "" msgstr ""
#: src/rougail/output_doc/tabular/four_columns.py:64 #: src/rougail/output_doc/tabular/four_columns.py:53
msgid "Type" msgid "Type"
msgstr "" msgstr ""
#: src/rougail/output_doc/tabular/three_columns.py:54 #: src/rougail/output_doc/tabular/three_columns.py:46
msgid "Default value" msgid "Default value"
msgstr "" msgstr ""
#: src/rougail/output_doc/tabular/two_columns.py:56 #: src/rougail/output_doc/tabular/two_columns.py:45
msgid "Variable" msgid "Variable"
msgstr "" msgstr ""
#: src/rougail/output_doc/tabular/two_columns.py:58 #: src/rougail/output_doc/tabular/two_columns.py:47
msgid "Description" msgid "Description"
msgstr "" msgstr ""
#: src/rougail/output_doc/utils.py:198 #: src/rougail/output_doc/utils.py:152
msgid "Command line" msgid "Command line"
msgstr "" msgstr ""
#: src/rougail/output_doc/utils.py:216 #: src/rougail/output_doc/utils.py:159
msgid "Environment variable" msgid "Environment variable"
msgstr "" msgstr ""
#: src/rougail/output_doc/utils.py:526 #: src/rougail/output_doc/utils.py:438
msgid "Path" msgid "Path"
msgstr "" msgstr ""
#: src/rougail/output_doc/utils.py:536 #: src/rougail/output_doc/utils.py:448
msgid "Identifiers" msgid "Identifiers"
msgstr "" msgstr ""
#: src/rougail/output_doc/utils.py:790 src/rougail/output_doc/utils.py:799 #: src/rougail/output_doc/utils.py:668 src/rougail/output_doc/utils.py:677
#: src/rougail/output_doc/utils.py:805 src/rougail/output_doc/utils.py:811 #: src/rougail/output_doc/utils.py:683 src/rougail/output_doc/utils.py:689
#: src/rougail/output_doc/utils.py:815 #: src/rougail/output_doc/utils.py:693
msgid "(default)" msgid "(default)"
msgstr "" msgstr ""
#: src/rougail/output_doc/utils.py:1123 #: src/rougail/output_doc/utils.py:945
msgid "{0}: {1}" msgid "{0}: {1}"
msgstr "" msgstr ""

View file

@ -39,11 +39,6 @@ from rougail.convert.object_model import (
CONVERT_OPTION, CONVERT_OPTION,
) )
try:
from rougail.user_data_risotto.utils import RisottoCalculation
except ImportError as err:
RisottoCalculation = None
class Annotator(Walk): class Annotator(Walk):
"""Annotate for documentation""" """Annotate for documentation"""
@ -62,7 +57,9 @@ class Annotator(Walk):
if "force_default_value" in kwargs: if "force_default_value" in kwargs:
self.default_values = kwargs["force_default_value"] self.default_values = kwargs["force_default_value"]
else: else:
self.default_values = self.objectspace.rougailconfig["doc.default_values"] self.default_values = self.objectspace.rougailconfig[
"doc.default_values"
]
self.regexp_description_get_paths = None self.regexp_description_get_paths = None
self.populate_family() self.populate_family()
self.populate_variable() self.populate_variable()
@ -155,7 +152,6 @@ class Annotator(Walk):
variable.choices, variable.choices,
variable.version, variable.version,
) )
self.manage_test(variable)
default = variable.default default = variable.default
if default is None and path in self.objectspace.default_multi: if default is None and path in self.objectspace.default_multi:
default = self.objectspace.default_multi[path] default = self.objectspace.default_multi[path]
@ -171,6 +167,12 @@ class Annotator(Walk):
variable.validators, variable.validators,
variable.version, variable.version,
) )
if (
self.default_values
and path in self.objectspace.leaders
and not default
):
self.add_examples_values(variable)
self.add_informations_from_properties(variable) self.add_informations_from_properties(variable)
if path in self.objectspace.forced_descriptions: if path in self.objectspace.forced_descriptions:
self.objectspace.informations.add( self.objectspace.informations.add(
@ -179,15 +181,6 @@ class Annotator(Walk):
True, True,
) )
def manage_test(self, variable):
# for version 1.0 and 1.1
values = self.objectspace.informations.get(variable.path).get("examples", None)
if values:
return
values = self.objectspace.informations.get(variable.path).get("test", None)
if values:
self.objectspace.informations.add(variable.path, "examples", values)
def add_informations_from_properties( def add_informations_from_properties(
self, self,
variable: dict, variable: dict,
@ -294,14 +287,16 @@ class Annotator(Walk):
"propertyerror": values.propertyerror, "propertyerror": values.propertyerror,
} }
if isinstance(values, InformationCalculation): if isinstance(values, InformationCalculation):
return self.calculation_to_information_information(values, version, path) return self.calculation_to_information_information(
if isinstance(values, IdentifierPropertyCalculation): values, version, path
ret = {} )
self.when_to_condition(values, ret) if isinstance(values, (IdentifierCalculation, IdentifierPropertyCalculation)):
ret["type"] = "identifier" return {
return ret "type": "identifier",
if isinstance(values, IdentifierCalculation): "value": self.calculation_to_information_identifier(
return {"type": "identifier"} values, prop, version
),
}
if isinstance(values, IndexCalculation): if isinstance(values, IndexCalculation):
return { return {
"type": "index", "type": "index",
@ -312,39 +307,25 @@ class Annotator(Walk):
"type": "namespace", "type": "namespace",
"value": True, "value": True,
} }
if RisottoCalculation and isinstance(values, RisottoCalculation):
# FIXME
return {
"type": "risotto",
"value": True,
}
raise Exception(f'unknown calculation {type(values)} "{values}"') raise Exception(f'unknown calculation {type(values)} "{values}"')
def calculation_to_information_variable( def calculation_to_information_variable(
self, variable_path: str, values, prop: str, version: str, path: str self, variable_path: str, values, prop: str, version: str, path: str
) -> str: ) -> str:
variable, identifiers = self.objectspace.paths.get_with_dynamic( # is optional
variable = self.objectspace.paths.get_with_dynamic(
variable_path, variable_path,
path, path,
values.version, values.version,
values.namespace, values.namespace,
values.xmlfiles, values.xmlfiles,
) )[0]
if not variable or ( if not variable or (isinstance(values, VariableCalculation) and values.optional and not variable):
isinstance(values, VariableCalculation) and values.optional and not variable
):
return None return None
values_calculation = {"path": variable.path} values_calculation = {"path": variable.path}
if identifiers:
values_calculation["identifiers"] = identifiers
if prop in PROPERTY_ATTRIBUTE: if prop in PROPERTY_ATTRIBUTE:
# get comparative value # get comparative value
self.when_to_condition(values, values_calculation) # values_calculation["transitive"] = values.propertyerror == "transitive"
else:
values_calculation["type"] = "variable"
return values_calculation
def when_to_condition(self, values, values_calculation):
if values.when_not is not undefined: if values.when_not is not undefined:
values_calculation["type"] = "condition" values_calculation["type"] = "condition"
values_calculation["value"] = values.when_not values_calculation["value"] = values.when_not
@ -359,12 +340,14 @@ class Annotator(Walk):
values_calculation["type"] = "condition" values_calculation["type"] = "condition"
values_calculation["value"] = True values_calculation["value"] = True
values_calculation["condition"] = "when" values_calculation["condition"] = "when"
else:
values_calculation["type"] = "variable"
return values_calculation
def calculation_to_information_information( def calculation_to_information_information(
self, values, version: str, path: str self, values, version: str, path: str
) -> Union[str, bool]: ) -> Union[str, bool]:
values_calculation = { values_calculation = {"type": "information",
"type": "information",
"information": values.information, "information": values.information,
} }
if values.variable: if values.variable:
@ -380,6 +363,16 @@ class Annotator(Walk):
values_calculation["path"] = variable.path values_calculation["path"] = variable.path
return values_calculation return values_calculation
def calculation_to_information_identifier(
self, values, prop: str, version: str
) -> Union[str, bool]:
if version != "1.0" and prop in PROPERTY_ATTRIBUTE:
if values.when is not undefined:
return _('when the identifier is "{0}"').format(values.when)
if values.when_not is not undefined:
return _('when the identifier is not "{0}"').format(values.when_not)
return True
def get_path_from_variable(self, values, version: str, path: str) -> str: def get_path_from_variable(self, values, version: str, path: str) -> str:
variable_path = values.variable variable_path = values.variable
paths = self.objectspace.paths paths = self.objectspace.paths

View file

@ -58,34 +58,18 @@ class Changelog: # pylint: disable=no-member,too-few-public-methods
if previous["type"] == "variable": if previous["type"] == "variable":
if "identifiers" in previous: if "identifiers" in previous:
for identifiers in previous["identifiers"]: for identifiers in previous["identifiers"]:
self._removed_variables.append( self._removed_variables.append(calc_path(previous["path"], self.formatter, identifiers))
calc_path(
previous["path"],
formatter=self.formatter,
identifiers=identifiers,
)
)
else: else:
self._removed_variables.append( self._removed_variables.append(calc_path(previous["path"], self.formatter))
calc_path(previous["path"], formatter=self.formatter)
)
else: else:
self.parser(previous["children"], {}) self.parser(previous["children"], {})
elif previous["type"] != new["type"]: elif previous["type"] != new["type"]:
if previous["type"] == "variable": if previous["type"] == "variable":
if "identifiers" in previous: if "identifiers" in previous:
for identifiers in previous["identifiers"]: for identifiers in previous["identifiers"]:
self._removed_variables.append( self._removed_variables.append(calc_path(previous["path"], self.formatter, identifiers))
calc_path(
previous["path"],
formatter=self.formatter,
identifiers=identifiers,
)
)
else: else:
self._removed_variables.append( self._removed_variables.append(calc_path(previous["path"], self.formatter))
calc_path(previous["path"], formatter=self.formatter)
)
self.parser({}, new["children"]) self.parser({}, new["children"])
else: else:
self._added_variables.append(new) self._added_variables.append(new)
@ -159,7 +143,7 @@ class Changelog: # pylint: disable=no-member,too-few-public-methods
[ [
self.formatter.title(title, self.level), self.formatter.title(title, self.level),
self.formatter.tabular(), self.formatter.tabular(),
self.formatter.end_family(self.level), self.formatter.end_family(self.level)
], ],
self.level, self.level,
dico_is_already_treated=True, dico_is_already_treated=True,
@ -175,7 +159,7 @@ class Changelog: # pylint: disable=no-member,too-few-public-methods
[ [
self.formatter.title(title, self.level), self.formatter.title(title, self.level),
self.formatter.tabular(), self.formatter.tabular(),
self.formatter.end_family(self.level), self.formatter.end_family(self.level)
], ],
self.level, self.level,
dico_is_already_treated=True, dico_is_already_treated=True,
@ -189,7 +173,7 @@ class Changelog: # pylint: disable=no-member,too-few-public-methods
[ [
self.formatter.title(title, self.level), self.formatter.title(title, self.level),
self.formatter.list(self._removed_variables, inside_tabular=False), self.formatter.list(self._removed_variables, inside_tabular=False),
self.formatter.end_family(self.level), self.formatter.end_family(self.level)
], ],
self.level, self.level,
dico_is_already_treated=True, dico_is_already_treated=True,

View file

@ -1,739 +0,0 @@
"""
Silique (https://www.silique.fr)
Copyright (C) 2024-2026
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
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 warnings import warn
from typing import Optional
from tiramisu import Calculation, groups
from tiramisu.error import display_list, PropertiesOptionError
from rougail.tiramisu import display_xmlfiles
from rougail.utils import PROPERTY_ATTRIBUTE
from rougail.error import VariableCalculationDependencyError, RougailWarning, ExtensionError
from .utils import dump, to_phrase, calc_path
from .i18n import _
HIDDEN_PROPERTIES = [
"hidden",
"disabled",
]
DISABLED_PROPERTIES = ["disabled"]
class _ToString:
def _to_string(
self,
child,
prop,
do_not_raise=False,
):
calculation = child.information.get(f"{prop}_calculation", None)
if not calculation:
if do_not_raise:
return None
raise ExtensionError(
_(
'cannot find "{0}_calculation" information, '
"do you have annotate this configuration?"
).format(prop)
)
if isinstance(calculation, list):
values = []
for cal in calculation:
value = self._calculation_to_string(child, cal, prop)
if value is not None:
values.append(value)
return values
ret = self._calculation_to_string(child, calculation, prop)
if isinstance(ret, list) and len(ret) == 1:
return ret[0]
return ret
def _calculation_to_string(self, child, calculation, attribute_type):
if "description" in calculation:
values = calculation
if self.document_a_type and "variables" in values:
for variable in list(values["variables"]):
variable["path"] = self.doc_path(variable["path"])
elif "type" not in calculation:
values = calculation["value"]
elif calculation["type"] == "jinja":
values = self._calculation_jinja_to_string(
child, calculation, attribute_type
)
elif calculation["type"] == "variable":
values = self._calculation_variable_to_string(
child, calculation, attribute_type
)
elif calculation["type"] == "identifier":
values = self._calculation_identifier_to_string(
child, calculation, attribute_type
)
elif calculation["type"] == "information":
if "path" in calculation:
variable_path = self.doc_path(calculation["path"])
values = _(
'the value of the information "{0}" of the variable "{1}"'
).format(calculation["information"], variable_path)
else:
values = _('the value of the global information "{0}"').format(
calculation["information"]
)
else:
values = _("the value of the {0}").format(calculation["type"])
return values
def _calculation_jinja_to_string(self, child, calculation, attribute_type):
if calculation["value"] is not True:
values = calculation["value"]
else:
values = _("depends on a calculation")
warning = _(
'"{0}" is a calculation for {1} but has no description in {2}'
).format(
attribute_type,
self.doc_path(child.path(uncalculated=True)),
display_xmlfiles(child.information.get("ymlfiles")),
)
warn(
warning,
RougailWarning,
)
return values
def _calculation_variable_to_string(self, child, calculation, attribute_type):
if attribute_type in PROPERTY_ATTRIBUTE:
func = self._calculation_variable_to_string_known_property
else:
func = self._calculation_variable_to_string_not_properties
return func(child, calculation, attribute_type)
def _calculation_variable_to_string_known_property(self, child, informations, prop):
condition = informations["value"]
variable_path = condition["path"]
values = []
option = self.true_config.option(variable_path)
if option.isdynamic():
variables = self._get_annotation_variable(
option, condition.get("identifiers")
)
else:
option = self.true_config.option(variable_path)
try:
is_inaccessible = self.is_inaccessible_user_data(option)
except AttributeError as err:
if err.code != "option-not-found":
raise err from err
is_inaccessible = True
if is_inaccessible:
variables = [[None, None, None]]
else:
description = self._convert_description(
option.description(uncalculated=True),
"description",
its_a_path=False,
)
variables = [[variable_path, description, None]]
for cpath, description, identifiers in variables:
if not cpath:
# we cannot access to this variable, so try with permissive
if condition["type"] == "transitive":
value = None
else:
value = condition["value"]
option = self.true_config.forcepermissive.option(variable_path)
try:
variable_value = self._get_unmodified_default_value(option)
except PropertiesOptionError as err:
if informations["propertyerror"] is True:
raise err from err
if informations["propertyerror"] == "transitive":
return True
return False
except VariableCalculationDependencyError:
values.append(_("depends on an undocumented variable"))
continue
except AttributeError as err:
return informations.get("default", False)
if condition["type"] == "transitive":
return True
if prop in HIDDEN_PROPERTIES:
condition_type = condition["condition"]
if (
condition_type == "when"
and value == variable_value
or condition_type == "when_not"
and value != variable_value
):
# always "prop"
return True
return False
if condition["type"] == "transitive":
submsg = _('is "{0}"').format(prop)
else:
condition_type = condition["condition"]
conditions = []
if not informations["propertyerror"]:
conditions.append(_("is accessible"))
if informations["optional"]:
conditions.append(_("is defined"))
value = condition["value"]
if not isinstance(value, str):
value = dump(value)
if condition_type == "when_not":
conditions.append(_('hasn\'t the value "{0}"').format(value))
else:
conditions.append(_('has the value "{0}"').format(value))
submsg = display_list(conditions, sort=False)
if informations["propertyerror"] == "transitive":
submsg = display_list(
[_("is {0}").format(prop), submsg], separator="or", sort=False
)
msg = _('when the variable "{{0}}" {0}').format(submsg)
path_obj = {
"path": self.doc_path(variable_path),
}
if identifiers:
path_obj["identifiers"] = identifiers
values.append(
{
"message": msg,
"path": path_obj,
"description": description,
}
)
if len(values) == 1:
return values[0]
return values
def _calculation_variable_to_string_not_properties(
self, child, calculation, attribute_type
):
variable = self.true_config.unrestraint.option(calculation["value"]["path"])
if calculation["optional"]:
try:
variable.get()
except AttributeError:
return None
true_msg = _('the value of the variable "{0}" if it is defined')
else:
true_msg = _('the value of the variable "{0}"')
if not variable.isdynamic():
func = self._calculation_normal_variable_to_string_not_properties
else:
func = self._calculation_dynamic_variable_to_string_not_properties
return func(variable, calculation["value"], true_msg)
def _calculation_normal_variable_to_string_not_properties(
self, child, obj, true_msg
):
isfollower = child.isfollower()
if not isfollower and self.is_inaccessible_user_data(child):
uncalculated = child.value.default(uncalculated=True)
if uncalculated and not isinstance(uncalculated, Calculation):
if isinstance(uncalculated, list):
return {
"submessage": _("(from an undocumented variable)"),
"values": uncalculated,
}
else:
if not isinstance(uncalculated, str):
uncalculated = dump(uncalculated)
true_msg = _("{0} (from an undocumented variable)").format(
uncalculated
)
else:
true_msg = _("the value of an undocumented variable")
try:
description = self._convert_description(
child.description(uncalculated=True), "description", its_a_path=False
)
except AttributeError:
description = path
return {
"message": true_msg,
"path": obj,
"description": description,
}
def _calculation_dynamic_variable_to_string_not_properties(
self, child, obj, true_msg
):
values = []
for path, description, identifiers in self._get_annotation_variable(
child, obj.get("identifiers")
):
cpath = calc_path(path, identifiers=identifiers)
variable = self.true_config.option(cpath)
path_obj = {
"path": self.doc_path(path),
}
if identifiers:
path_obj["identifiers"] = identifiers
values.append(
self._calculation_normal_variable_to_string_not_properties(
variable, path_obj, true_msg
)
)
return values
def _calculation_identifier_to_string(self, child, calculation, attribute_type):
if attribute_type in PROPERTY_ATTRIBUTE:
if calculation["condition"] == "when":
return _('when the identifier is "{0}"').format(calculation["value"])
if calculation["condition"] == "when_not":
return _('when the identifier is not "{0}"').format(
calculation["value"]
)
return True
else:
return _("the value of the identifier")
def doc_path(self, path):
if self.document_a_type:
if not "." in path:
return None
return path.split(".", 1)[-1]
return path
def _get_annotation_variable(self, child, ori_identifiers):
path = child.path(uncalculated=True)
if ori_identifiers:
if None in ori_identifiers:
all_identifiers = self.true_config.option(
calc_path(path, identifiers=ori_identifiers)
).identifiers()
else:
all_identifiers = [ori_identifiers]
else:
all_identifiers = child.identifiers()
for identifiers in all_identifiers:
cpath = calc_path(path, identifiers=identifiers)
description = self._convert_description(
child.description(uncalculated=True), "description", its_a_path=False
)
if child.isdynamic():
yield path, description, identifiers.copy()
else:
yield path, description, None
class Collect(_ToString):
def collect_families(self, family) -> dict:
informations = {}
for child in family.list(uncalculated=True):
if child.type(only_self=True) == "symlink" or (
not child.isdynamic() and self.is_inaccessible_user_data(child)
):
# do not document symlink option or inacesssible variable
# (dynamic variable could be accessible only in one context)
continue
if child.isoptiondescription():
func = self.collect_family
else:
func = self.collect_variable
func(child, informations)
return informations
def collect_family(self, family, informations: dict) -> None:
family_type = self._get_family_type(family)
family_informations = self._collect_family(family, family_type)
if family_informations is False:
return
sub_informations = self.collect_families(family)
if not sub_informations:
# a family without subfamily/subvariable
return
name = family.name(uncalculated=True)
informations[name] = {
"type": family_type,
"informations": family_informations,
"children": sub_informations,
}
def _get_family_type(self, family) -> str:
if self.support_namespace and family.group_type() is groups.namespace:
return "namespace"
if family.isleadership():
return "leadership"
if family.isdynamic(only_self=True):
return "dynamic"
return "family"
def _collect_family(
self,
family,
family_type,
*,
with_identifier: bool = True,
current_identifier_only: bool = False,
) -> dict:
path = family.path(uncalculated=True)
informations = {}
if not self._collect(family, informations, family_type=family_type):
return False, []
if family_type == "leadership":
informations.setdefault("help", []).append(
_("This family contains lists of variable blocks")
)
elif family_type == "dynamic":
informations.setdefault("help", []).append(
_("This family builds families dynamically")
)
if with_identifier:
identifier = self._to_string(family, "dynamic", do_not_raise=True)
if identifier is None:
identifier = family.identifiers(only_self=True)
if not isinstance(identifier, list):
identifier = [identifier]
informations["identifier"] = identifier
elif family_type == "namespace":
informations.setdefault("help", []).append(_("This family is a namespace"))
return informations
def collect_variable(
self,
child,
informations: dict,
*,
only_one=False,
) -> Optional[dict]:
name = child.name(uncalculated=True)
sub_informations = {}
if not self._collect_variable(
child,
sub_informations,
):
return None
informations[name] = sub_informations
if child.isleader():
# if not self.default_values:
# child.value.set(sub_informations["gen_examples"][0])
return sub_informations
return None
def _collect_variable(
self,
child,
informations: dict,
):
if not self._collect(child, informations):
return False
informations["type"] = "variable"
default = self._set_default(
child,
informations,
)
self._parse_type(
child,
informations,
)
if child.ismulti():
multi = not child.isfollower() or child.issubmulti()
else:
multi = False
if multi:
informations["multiple"] = True
examples = child.information.get("examples", None)
if examples is None:
examples = child.information.get("test", None)
if examples is not None:
if len(examples) == 1:
name = _("Example")
values = examples[0]
else:
name = _("Examples")
values = list(examples)
informations["examples"] = {"name": name, "values": values}
tags = child.information.get("tags", None)
if tags:
if len(tags) == 1:
name = _("Tag")
values = tags[0]
else:
name = _("Tags")
values = list(tags)
informations["tags"] = {
"name": name,
"values": values,
}
alternative_name = child.information.get("alternative_name", None)
if alternative_name:
informations["alternative_name"] = alternative_name
return True
def _collect(
self,
child,
informations: dict,
*,
family_type: str = None,
):
display, properties = self._get_properties(child, informations)
if not display:
return False
informations["path"] = self.doc_path(child.path(uncalculated=True))
informations["name"] = child.name(uncalculated=True)
description = self._get_description(child, family_type)
if description is not None:
informations["description"] = description
help_ = child.information.get("help", None)
if help_:
informations["help"] = [to_phrase(help_)]
if "properties" in informations:
informations["properties"].extend(properties)
else:
informations["properties"] = properties
properties = child.property.get(uncalculated=True)
for mode in self.modes_level:
if mode not in properties:
continue
informations["mode"] = mode
break
if child.isdynamic():
informations["identifiers"] = []
path = child.path(uncalculated=True)
if child.has_identifiers():
identifiers = child.identifiers()
else:
identifiers = [child.identifiers()]
for identifier in identifiers:
cpath = calc_path(path, identifiers=identifier)
child_identifier = self.true_config.option(cpath)
if not self.is_inaccessible_user_data(child_identifier):
informations["identifiers"].append(identifier)
if not informations["identifiers"]:
informations["identifiers"] = [["example"]]
return True
def _parse_type(
self,
child,
informations,
):
variable_type = child.information.get("type")
doc_type = self.convert_option.get(variable_type, {"params": {}})
informations["variable_type"] = doc_type.get("msg", variable_type)
# extra parameters for types
option = child.get()
validators = []
if "params" in doc_type:
for param, msg in doc_type["params"].items():
value = option.impl_get_extra(f"_{param}")
if value is None:
value = option.impl_get_extra(param)
if value is not None and value is not False:
if isinstance(value, set):
value = list(value)
if isinstance(value, list):
value = display_list(value, add_quote=True)
if "doc" in msg:
validators.append(msg["doc"].format(value))
else:
validators.append(msg["description"].format(value))
# get validation information from annotator
for name in child.information.list():
if not name.startswith("validators_calculation"):
continue
validators.extend(
self._to_string(
child,
"validators",
)
)
break
if variable_type == "regexp":
validators.append(
_('text based with regular expressions "{0}"').format(child.pattern())
)
if validators:
if len(validators) == 1:
key = _("Validator")
validators = validators[0]
else:
key = _("Validators")
informations["validators"] = {"name": key, "values": validators}
if variable_type == "choice":
choices = self._to_string(child, "choice", do_not_raise=True)
if choices is None:
choices = child.value.list(uncalculated=True)
for idx, val in enumerate(choices):
if isinstance(val, Calculation):
choices[idx] = self._to_string(child, "choice", f"_{idx}")
informations["choices"] = {"name": _("Choices"), "values": choices}
def _get_properties(
self,
child,
child_informations,
):
informations = []
properties = child.property.get(uncalculated=True)
if "not_for_commandline" in properties:
child_informations["not_for_commandline"] = True
for prop, translated_prop in self.property_to_string:
annotation = False
if child.information.get(f"{prop}_calculation", False):
annotation = self._to_string(child, prop)
if annotation is None and prop in HIDDEN_PROPERTIES:
return False, []
if annotation is True and prop in DISABLED_PROPERTIES:
return False, []
if not annotation:
continue
elif prop not in properties:
# this property is not in the variable so, do not comment it
continue
elif prop in HIDDEN_PROPERTIES:
return False, []
prop_obj = {
"type": "property",
"name": translated_prop,
"ori_name": prop,
"access_control": prop in HIDDEN_PROPERTIES,
}
if annotation:
prop_obj["annotation"] = annotation
informations.append(prop_obj)
return True, informations
def _set_default(
self,
child,
informations,
):
default = self._to_string(child, "default", do_not_raise=True)
if default is None and child.information.get("default_value_makes_sense", True):
default_ = child.value.default(uncalculated=True)
if not isinstance(default_, Calculation):
default = default_
if default == []:
default = None
if default is not None:
informations["default"] = {"name": _("Default"), "values": default}
def _get_description(self, child, family_type):
if child.information.get("forced_description", False):
if (
child.isoptiondescription()
or not child.isfollower()
or not child.index()
):
# all variables must have description but display error only for first slave
msg = _('No attribute "description" for "{0}" in {1}').format(
child.path(uncalculated=True),
display_xmlfiles(child.information.get("ymlfiles")),
)
warn(
msg,
RougailWarning,
)
if family_type is not None:
# it's a vaariable
return self._convert_description(
child.description(uncalculated=True), "family", its_a_path=True
)
return None
var_type = "variable" if family_type is None else "family"
return self._convert_description(
child.description(uncalculated=True), var_type, its_a_path=False
)
def _convert_description(self, description, type_, its_a_path=False):
if not its_a_path:
description = to_phrase(description, type_)
return description
def is_inaccessible_user_data(self, child, *, only_disabled=False):
"""If family is not accessible in read_write mode (to load user_data),
do not comment this family
"""
properties = child.property.get(uncalculated=True)
if only_disabled:
hidden_properties = DISABLED_PROPERTIES
else:
hidden_properties = HIDDEN_PROPERTIES
for hidden_property in hidden_properties:
if hidden_property in properties:
return True
calculation = child.information.get(f"{hidden_property}_calculation", None)
if calculation:
calculation_type = calculation.get("type")
if (
calculation_type == "variable"
and calculation["value"]["type"] == "condition"
):
condition = calculation["value"]
variable = self.true_config.forcepermissive.option(
condition["path"]
)
try:
variable.value.get()
except AttributeError:
variable = None
if variable and self.is_inaccessible_user_data(
variable, only_disabled=only_disabled
):
try:
variable_value = self._get_unmodified_default_value(
variable
)
except VariableCalculationDependencyError:
pass
else:
condition_type = condition["condition"]
value = condition["value"]
if self.calc_condition_when(
condition_type, value, variable_value
):
return True
elif calculation_type == "identifier":
if self.calc_condition_when(
calculation["condition"],
calculation["value"],
child.identifiers()[-1],
):
return True
if not child.isoptiondescription():
for hidden_property in self.disabled_modes:
if hidden_property in properties:
return True
return False
def calc_condition_when(self, condition, value, current_value):
return (condition == "when" and value == current_value) or (
condition == "when_not" and value != current_value
)
def _get_unmodified_default_value(self, child):
calculation = child.information.get(f"default_calculation", None)
if not calculation:
return child.value.get()
if calculation["type"] == "variable":
variable = self.true_config.forcepermissive.option(
calculation["value"]["path"]
)
if variable and self.is_inaccessible_user_data(variable):
return self._get_unmodified_default_value(variable)
raise VariableCalculationDependencyError()

View file

@ -51,13 +51,15 @@ def get_outputs_or_tabulars(type_) -> None:
level = obj_class.level level = obj_class.level
if level in outputs: if level in outputs:
raise ImportError( raise ImportError(
_( _('duplicated level rougail-output-doc for {0} "{1}": {2} and {3}').format(
'duplicated level rougail-output-doc for {0} "{1}": {2} and {3}' type_, level, obj_class.name, outputs[level].name
).format(type_, level, obj_class.name, outputs[level].name) )
) )
if obj_class.name in names: if obj_class.name in names:
raise ImportError( raise ImportError(
_('duplicated name "{0}" in rougail-output-doc').format(obj_class.name) _('duplicated name "{0}" in rougail-output-doc').format(
obj_class.name
)
) )
names.append(obj_class.name) names.append(obj_class.name)
outputs[level] = obj_class outputs[level] = obj_class
@ -112,7 +114,7 @@ cli:
type: boolean type: boolean
default: default:
jinja: |- jinja: |-
{{{{ step.output is not propertyerror and step.output != "doc" }}}} {{{{ __.step.output is not propertyerror and "doc" in __.step.output }}}}
description: {_('is true if doc is activate')} description: {_('is true if doc is activate')}
doc: doc:
@ -122,7 +124,7 @@ doc:
jinja: |- jinja: |-
{{{{ step.output is propertyerror or step.output != 'doc' }}}} {{{{ step.output is propertyerror or step.output != 'doc' }}}}
return_type: boolean return_type: boolean
description: {_('if "step.output" is not doc')} description: {_('if doc is not set in "step.output"')}
output_format: output_format:
description: {_('The output format of the generated documentation')} description: {_('The output format of the generated documentation')}
@ -208,7 +210,7 @@ doc:
description: {_('Variables and changelog documentation')} description: {_('Variables and changelog documentation')}
disabled: disabled:
jinja: |- jinja: |-
{{{{ step.output is propertyerror or step.output != "doc" or _.output_format == "json" or ("variables" not in _.contents and "changelog" not in _.contents) }}}} {{{{ step.output is propertyerror or "doc" not in step.output or _.output_format == "json" or ("variables" not in _.contents and "changelog" not in _.contents) }}}}
return_type: boolean return_type: boolean
description: {_('if "_.output_format" is json or "_.contents" hasn\'t variables or changelog')} description: {_('if "_.output_format" is json or "_.contents" hasn\'t variables or changelog')}
@ -246,7 +248,7 @@ doc:
description: {_('Changelog documentation')} description: {_('Changelog documentation')}
disabled: disabled:
jinja: |- jinja: |-
{{{{ step.output is propertyerror or step.output != "doc" or _.output_format == "json" or "changelog" not in _.contents }}}} {{{{ step.output is propertyerror or "doc" not in step.output or _.output_format == "json" or "changelog" not in _.contents }}}}
return_type: boolean return_type: boolean
description: {_('if changelog in not in "_.contents"')} description: {_('if changelog in not in "_.contents"')}
@ -259,7 +261,7 @@ doc:
description: {_('Examples configuration')} description: {_('Examples configuration')}
disabled: disabled:
jinja: |- jinja: |-
{{{{ step.output is propertyerror or step.output != "doc" or "example" not in _.contents }}}} {{{{ step.output is propertyerror or "doc" not in step.output or "example" not in _.contents }}}}
return_type: boolean return_type: boolean
description: {_('if example is not in "_.contents"')} description: {_('if example is not in "_.contents"')}
@ -283,5 +285,4 @@ doc:
"level": 50, "level": 50,
} }
__all__ = ("OutPuts", "get_rougail_config") __all__ = ("OutPuts", "get_rougail_config")

View file

@ -16,23 +16,36 @@ 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/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
""" """
from typing import Union from warnings import warn
from typing import Optional, Union
from itertools import chain
from re import compile
from tiramisu import groups from tiramisu import Calculation, groups
from rougail.utils import get_properties_to_string from tiramisu.error import ConfigError, display_list, PropertiesOptionError
from rougail.tiramisu import display_xmlfiles, normalize_family
from rougail.utils import undefined, get_properties_to_string, PROPERTY_ATTRIBUTE
from rougail.error import VariableCalculationDependencyError, RougailWarning
from .config import OutPuts from .config import OutPuts
from .i18n import _ from .i18n import _
from .collect import Collect from .utils import dump, to_phrase, calc_path
from .changelog import Changelog
from .example import Examples from .example import Examples
from .changelog import Changelog
class RougailOutputDoc(Collect, Examples, Changelog): HIDDEN_PROPERTIES = [
"hidden",
"disabled",
]
DISABLED_PROPERTIES = ["disabled"]
class RougailOutputDoc(Examples, Changelog):
"""Rougail Output Doc: """Rougail Output Doc:
Generate documentation from rougail description files Generate documentation from rougail description files
""" """
output_name = "doc" output_name = "doc"
def __init__( def __init__(
@ -41,7 +54,6 @@ class RougailOutputDoc(Collect, Examples, Changelog):
*, *,
rougailconfig: "RougailConfig" = None, rougailconfig: "RougailConfig" = None,
true_config: "Config" = None, true_config: "Config" = None,
root_config: "Config" = None,
**kwargs, **kwargs,
): ):
# Import here to avoid circular import # Import here to avoid circular import
@ -61,10 +73,6 @@ class RougailOutputDoc(Collect, Examples, Changelog):
self.true_config = config self.true_config = config
else: else:
self.true_config = true_config self.true_config = true_config
if root_config is None:
self.root_config = self.true_config
else:
self.root_config = root_config
self.rougailconfig = rougailconfig self.rougailconfig = rougailconfig
self.informations = None self.informations = None
self.formatter = None self.formatter = None
@ -86,9 +94,7 @@ class RougailOutputDoc(Collect, Examples, Changelog):
def load_formatter(self) -> str: def load_formatter(self) -> str:
output_format = self.rougailconfig["doc.output_format"] output_format = self.rougailconfig["doc.output_format"]
self.formatter = self.outputs[output_format]( self.formatter = self.outputs[output_format](self.rougailconfig, support_namespace=self.support_namespace)
self.rougailconfig, support_namespace=self.support_namespace
)
def print(self) -> None: def print(self) -> None:
ret, data = self.run() ret, data = self.run()
@ -98,7 +104,6 @@ class RougailOutputDoc(Collect, Examples, Changelog):
def load(self): def load(self):
self.document_a_type = self.rougailconfig["doc.document_a_type"] self.document_a_type = self.rougailconfig["doc.document_a_type"]
self.modes_level = self.rougailconfig["modes_level"] self.modes_level = self.rougailconfig["modes_level"]
self.default_values = self.rougailconfig["doc.default_values"]
self.disabled_modes = [] self.disabled_modes = []
if self.modes_level: if self.modes_level:
for mode in self.modes_level: for mode in self.modes_level:
@ -114,46 +119,854 @@ class RougailOutputDoc(Collect, Examples, Changelog):
self.property_to_string = get_properties_to_string() self.property_to_string = get_properties_to_string()
self.outputs = OutPuts().get() self.outputs = OutPuts().get()
self.dynamic_paths = {} self.dynamic_paths = {}
if self.config.isoptiondescription(): if not self.config.isoptiondescription():
informations = self.collect_families(self.config.unrestraint)
else:
informations = {} informations = {}
self.collect_variable(self.config, informations) self.parse_variable(self.config, None, informations)
else:
config = self.config.unrestraint
self.populate_dynamics(config=config)
informations = self.parse_families(config)
if informations is None: if informations is None:
informations = {} informations = {}
if self.true_config != self.config: elif self.config.type() not in ['config', 'metaconfig', 'groupconfig', 'mixconfig']:
# build cache for dyn family
root_informations = {} root_informations = {}
infos = root_informations infos = root_informations
family = self.root_config family = self.true_config
for path in self.config.path().split("."): for path in self.config.path().split('.'):
family = family.option(path) family = family.option(path)
name = family.name(uncalculated=True) name = family.name(uncalculated=True)
if family.isoptiondescription(): if family.isoptiondescription():
infos[name] = self.get_root_family(family) infos[name] = self.get_root_family(family)
infos = infos[name]["children"] infos = infos[name]["children"]
else:
if name not in informations:
informations = {}
else:
infos[name] = informations[name]
break
else:
infos.update(informations) infos.update(informations)
informations = root_informations informations = root_informations
self.informations = informations self.informations = informations
def get_root_family(self, family): def get_root_family(self, family):
family_type = self._get_family_type(family) family_informations = self._populate_family(
family_informations = self._collect_family(
family, family,
family_type,
with_identifier=False,
current_identifier_only=False,
) )
if family_informations is not False: if family_informations is not False:
return { return {
"type": family_type, "type": self._get_family_type(family),
"informations": family_informations, "informations": family_informations,
"children": {}, "children": {},
} }
def populate_dynamics(self, *, config=None, reload=False):
if config is None:
config = self.config.unrestraint
self._populate_dynamics(config, reload)
def _populate_dynamics(self, family, reload, uncalculated=False) -> None:
def populate(child, uncalculated):
if child.isoptiondescription():
type_ = "family"
else:
type_ = "variable"
if child.isdynamic():
self.populate_dynamic(child, type_, reload, uncalculated)
if child.isoptiondescription():
self._populate_dynamics(child, reload, uncalculated)
for child in family.list(uncalculated=uncalculated):
populate(child, uncalculated)
if not uncalculated:
for child in family.list(uncalculated=True):
if child.isdynamic() and child.path(uncalculated=True) not in self.dynamic_paths:
populate(family, uncalculated=True)
def populate_dynamic(self, obj, type_, reload, uncalculated) -> None:
path = obj.path(uncalculated=True)
if path not in self.dynamic_paths:
new_name = True
description = obj.description(uncalculated=True)
name = obj.name(uncalculated=True)
self.dynamic_paths[path] = {
"names": [],
"identifiers": [],
"path": self.doc_path(path),
}
if not obj.information.get("forced_description", False):
self.dynamic_paths[path]["description"] = self._convert_description(
description, type_, its_a_path=False
)
elif obj.isoptiondescription():
self.dynamic_paths[path]["description"] = self._convert_description(
description, type_, its_a_path=True
)
if uncalculated:
return
dynamic_obj = self.dynamic_paths[path]
if reload and obj.identifiers() in dynamic_obj["identifiers"]:
return
dynamic_obj["names"].append(obj.name())
dynamic_obj["identifiers"].append(obj.identifiers())
def parse_families(self, family) -> dict:
informations = {}
leader = None
for child in family.list():
if self.is_inaccessible_user_data(child):
continue
if child.type(only_self=True) == "symlink":
continue
if not child.isoptiondescription():
leader = self.parse_variable(child, leader, informations)
else:
self.parse_family(child, informations)
return informations
def is_inaccessible_user_data(self, child):
"""If family is not accessible in read_write mode (to load user_data),
do not comment this family
"""
properties = child.property.get(uncalculated=True)
for hidden_property in HIDDEN_PROPERTIES:
if hidden_property in properties:
return True
calculation = child.information.get(f"{hidden_property}_calculation", None)
if calculation and calculation.get("type") == "variable" and calculation["value"]["type"] == "condition":
condition = calculation["value"]
variable = self.true_config.forcepermissive.option(condition["path"])
try:
variable.value.get()
except AttributeError:
variable = None
if variable and self.is_inaccessible_user_data(variable):
try:
variable_value = self._get_unmodified_default_value(variable)
except VariableCalculationDependencyError:
pass
else:
condition_type = condition["condition"]
value = condition["value"]
if (condition_type == "when" and value == variable_value) or (condition_type == "when_not" and value != variable_value):
return True
if not child.isoptiondescription():
for hidden_property in self.disabled_modes:
if hidden_property in properties:
return True
return False
def parse_family(self, family, informations: dict, *, force_injection=False) -> None:
sub_informations = self.parse_families(family)
if not force_injection and not sub_informations:
return
# if self.with_family:
family_informations = self._populate_family(
family,
)
if family_informations is not False:
name = family.name(uncalculated=True)
informations[name] = {
"type": self._get_family_type(family),
"informations": family_informations,
"children": sub_informations,
}
def parse_variable(
self,
variable,
leader: dict,
informations: dict,
*,
only_one=False,
) -> Optional[dict]:
path = variable.path(uncalculated=True)
name = variable.name(uncalculated=True)
potential_leader = None
if variable.isdynamic():
# information is already set
potential_leader = self._parse_variable_dynamic(
variable, leader, name, path, informations, only_one
)
elif variable.isfollower() and variable.index():
self._parse_variable_follower_with_index(
variable, leader, name, informations
)
else:
potential_leader = self.parse_variable_normal(
variable, leader, name, path, informations
)
if potential_leader:
leader = potential_leader
return leader
def parse_variable_normal(
self, variable, leader, name: str, path: str, informations: dict
) -> Optional[dict]:
if variable.isdynamic():
sub_informations = self.dynamic_paths[path]
elif variable.isfollower() and path in informations: # variable.index():
sub_informations = informations[name]
else:
sub_informations = {}
if not self._populate_variable(
variable,
sub_informations,
):
return None
self._add_examples(variable, sub_informations, leader)
informations[name] = sub_informations
if variable.isleader():
return sub_informations
return None
def _parse_variable_follower_with_index(
self, variable, leader: dict, name: str, informations: dict
) -> None:
if (variable.index() + 1) > len(leader["gen_examples"][-1]):
return
informations[name]["gen_examples"][-1][variable.index()] = self._get_example(
variable, informations[name], None
)
def _parse_variable_dynamic(
self, variable, leader, name, path, informations, only_one
) -> None:
# if path not in self.dynamic_paths:
# self.populate_dynamic(variable, path)
dynamic_variable = self.dynamic_paths[path]
if (not only_one or path in informations) and "type" in dynamic_variable:
dynamic_variable["gen_examples"].append(
self._get_example(variable, dynamic_variable, leader)
)
if variable.isleader():
return dynamic_variable
if not only_one:
return None
return self.parse_variable_normal(variable, leader, name, path, informations)
def _get_family_type(self, family) -> str:
if self.support_namespace and family.group_type() is groups.namespace:
return "namespace"
if family.isleadership():
return "leadership"
if family.isdynamic(only_self=True):
return "dynamic"
return "family"
def _populate_family(
self,
family,
) -> dict:
path = family.path(uncalculated=True)
if family.isdynamic():
informations = self.dynamic_paths[path]
else:
informations = {}
if not self._populate(family, informations, "family"):
return False
if family.isleadership():
informations.setdefault("help", []).append(
_("This family contains lists of variable blocks")
)
if family.isdynamic(only_self=True):
identifiers = self._to_string(family, "dynamic", do_not_raise=True)
if identifiers is None:
identifiers = family.identifiers(only_self=True)
if not isinstance(identifiers, list):
identifiers = [identifiers]
informations["identifier"] = identifiers
informations.setdefault("help", []).append(
_("This family builds families dynamically")
)
return informations
def _populate_variable(
self,
variable,
informations: dict,
):
informations["type"] = "variable"
default = self._get_default(
variable,
)
if default is not None:
informations["default"] = {"name": _("Default"), "values": default}
self._parse_type(
variable,
informations,
)
if not self._populate(variable, informations, "variable"):
return False
if variable.ismulti():
multi = not variable.isfollower() or variable.issubmulti()
else:
multi = False
if multi:
informations["multiple"] = True
examples = variable.information.get("examples", None)
if examples is None:
examples = variable.information.get("test", None)
if examples is not None:
if len(examples) == 1:
name = _("Example")
values = examples[0]
else:
name = _("Examples")
values = list(examples)
informations["examples"] = {
"name": name,
"values": values
}
tags = variable.information.get("tags", None)
if tags:
if len(tags) == 1:
name = _("Tag")
values = tags[0]
else:
name = _("Tags")
values = list(tags)
informations["tags"] = {
"name": name,
"values": values,
}
alternative_name = variable.information.get("alternative_name", None)
if alternative_name:
informations["alternative_name"] = alternative_name
return True
def _populate(
self,
child,
informations: dict,
type_: str,
):
need_disabled, properties = self._parse_properties(child, informations)
if not need_disabled:
return False
name = child.name(uncalculated=True)
if child.information.get("forced_description", False):
if (
not child.isoptiondescription()
or not self.support_namespace
or child.group_type() is not groups.namespace
):
if (
child.isoptiondescription()
or not child.isfollower()
or not child.index()
):
warning = _('No attribute "description" for "{0}" in {1}').format(
child.path(uncalculated=True),
display_xmlfiles(child.information.get("ymlfiles")),
)
warn(
warning,
RougailWarning,
)
if child.isoptiondescription():
description = self._convert_description(
child.description(uncalculated=True), type_, its_a_path=True
)
else:
description = None
else:
description = self._convert_description(
child.description(uncalculated=True), type_, its_a_path=False
)
if not child.isdynamic():
informations["path"] = self.doc_path(child.path(uncalculated=True))
informations["names"] = [child.name()]
if description is not None:
informations["description"] = description
help_ = child.information.get("help", None)
if help_:
informations["help"] = [to_phrase(help_)]
if "properties" in informations:
informations["properties"].extend(properties)
else:
informations["properties"] = properties
properties = child.property.get(uncalculated=True)
for mode in self.modes_level:
if mode not in properties:
continue
informations["mode"] = mode
break
return True
def _convert_description(self, description, type_, its_a_path=False):
if not its_a_path:
description = to_phrase(description, type_)
return description
def _add_examples(self, variable, informations: dict, leader) -> None:
if not variable.index():
example = self._get_example(variable, informations, leader)
informations["gen_examples"] = [example]
informations["mandatory_without_value"] = "mandatory" in variable.property.get(
uncalculated=True
) and (
not variable.information.get("default_value_makes_sense", True)
or variable.value.get(uncalculated=True) in [None, []]
)
def _get_example(self, variable, informations: dict, leader):
example = informations.get("examples", {}).get("values")
if example is not None:
if isinstance(example, tuple):
example = list(example)
if informations.get("multiple"):
if not isinstance(example, list):
example = [example]
else:
if isinstance(example, list):
index = variable.index()
if index is None or len(example) - 1 >= index:
index = 0
example = example[index]
else:
if variable.information.get("fake_default", False):
default = None
else:
try:
default = variable.value.get()
except ConfigError:
default = None
if default not in [None, []]:
example = default
else:
example = self.get_type_default_value(
variable, informations
)
if leader is not None and variable.isfollower():
example = [example] + [undefined] * (len(leader["gen_examples"][-1]) - 1)
return example
def get_type_default_value(self, variable, informations):
example = self.convert_option.get(variable.information.get("type"), {}).get(
"example", None
)
if example is None:
example = "xxx"
if informations.get("multiple"):
example = [example]
return example
def _parse_type(
self,
child,
informations,
):
variable_type = child.information.get("type")
doc_type = self.convert_option.get(variable_type, {"params": {}})
informations["variable_type"] = doc_type.get("msg", variable_type)
# extra parameters for types
option = child.get()
validators = []
if "params" in doc_type:
for param, msg in doc_type["params"].items():
value = option.impl_get_extra(f"_{param}")
if value is None:
value = option.impl_get_extra(param)
if value is not None and value is not False:
if isinstance(value, set):
value = list(value)
if isinstance(value, list):
value = display_list(value, add_quote=True)
if "doc" in msg:
validators.append(msg['doc'].format(value))
else:
validators.append(msg['description'].format(value))
# get validation information from annotator
for name in child.information.list():
if not name.startswith("validators_calculation"):
continue
validators.extend(
self._to_string(
child,
"validators",
)
)
break
if variable_type == "regexp":
validators.append(
_('text based with regular expressions "{0}"').format(child.pattern())
)
if validators:
if len(validators) == 1:
key = _("Validator")
validators = validators[0]
else:
key = _("Validators")
informations["validators"] = {"name": key, "values": validators}
if variable_type == "choice":
choices = self._to_string(child, "choice", do_not_raise=True)
if choices is None:
choices = child.value.list()
for idx, val in enumerate(choices):
if isinstance(val, Calculation):
choices[idx] = self._to_string(child, "choice", f"_{idx}")
informations["choices"] = {"name": _("Choices"), "values": choices}
def _parse_properties(
self,
child,
child_informations,
):
informations = []
properties = child.property.get(uncalculated=True)
for prop, translated_prop in self.property_to_string:
if "not_for_commandline" in properties:
child_informations["not_for_commandline"] = True
continue
if prop in properties:
prop_obj = {
"type": "property",
"name": translated_prop,
"ori_name": prop,
"access_control": prop in HIDDEN_PROPERTIES,
}
elif child.information.get(f"{prop}_calculation", False):
annotation = self._to_string(child, prop)
if annotation is None or isinstance(annotation, bool):
if (annotation is None and prop in HIDDEN_PROPERTIES) or (annotation is True and prop in DISABLED_PROPERTIES):
return False, {}
if not annotation or prop in DISABLED_PROPERTIES:
continue
prop_obj = {
"type": "property",
"name": translated_prop,
"ori_name": prop,
"access_control": prop in HIDDEN_PROPERTIES,
}
else:
prop_obj = {
"type": "property",
"name": translated_prop,
"ori_name": prop,
"access_control": prop in HIDDEN_PROPERTIES,
"annotation": annotation,
}
else:
# this property is not in the variable so, do not comment it
continue
informations.append(prop_obj)
return True, informations
def _get_default(
self,
variable,
):
default = self._to_string(variable, "default", do_not_raise=True)
if default is not None:
if default == []:
default = None
return default
if variable.information.get("default_value_makes_sense", True):
default_ = variable.value.get(uncalculated=True)
if not isinstance(default_, Calculation):
default = default_
if default == []:
default = None
return default
def _to_string(
self,
child,
prop,
do_not_raise=False,
):
calculation = child.information.get(f"{prop}_calculation", None)
if not calculation:
if do_not_raise:
return None
raise Exception(
f'cannot find "{prop}_calculation" information, '
"do you have declare doc has a plugins?"
)
if isinstance(calculation, list):
values = []
for cal in calculation:
value = self._calculation_to_string(child, cal, prop)
if value is not None:
values.append(value)
return values
return self._calculation_to_string(child, calculation, prop)
def _calculation_to_string(self, child, calculation, attribute_type):
if "description" in calculation:
values = calculation
if self.document_a_type and "variables" in values:
for variable in list(values["variables"]):
variable["path"] = self.doc_path(variable["path"])
elif "type" not in calculation:
values = calculation["value"]
elif calculation["type"] == "jinja":
values = self._calculation_jinja_to_string(child, calculation, attribute_type)
elif calculation["type"] == "variable":
values = self._calculation_variable_to_string(child, calculation, attribute_type)
elif calculation["type"] == "identifier":
if attribute_type in PROPERTY_ATTRIBUTE:
values = calculation["value"]
else:
values = _("the value of the identifier")
elif calculation["type"] == "information":
if "path" in calculation:
variable_path = self.doc_path(calculation["path"])
values = _('the value of the information "{0}" of the variable "{1}"').format(
calculation["information"], variable_path
)
else:
values = _('the value of the global information "{0}"').format(calculation["information"])
else:
values = _("the value of the {0}").format(calculation["type"])
return values
def _calculation_jinja_to_string(self, child, calculation, attribute_type):
if calculation["value"] is not True:
values = calculation["value"]
else:
values = _("depends on a calculation")
if (
child.isoptiondescription()
or not child.isfollower()
or not child.index()
):
warning = _(
'"{0}" is a calculation for {1} but has no description in {2}'
).format(
attribute_type,
self.doc_path(child.path()),
display_xmlfiles(child.information.get("ymlfiles")),
)
warn(
warning,
RougailWarning,
)
return values
def _calculation_variable_to_string(self, child, calculation, attribute_type):
if attribute_type in PROPERTY_ATTRIBUTE:
func = self._calculation_variable_to_string_known_property
else:
func = self._calculation_variable_to_string_not_properties
return func(child, calculation, attribute_type)
def _calculation_variable_to_string_known_property(self, child, calculation, prop):
condition = calculation["value"]
variable_path = condition["path"]
values = []
if "{{ identifier }}" in calculation["ori_path"] or "{{ identifier }}" in variable_path:
variables = self.get_annotation_variable(variable_path, calculation["ori_path"])
else:
option = self.true_config.option(variable_path)
try:
is_inaccessible = self.is_inaccessible_user_data(option)
except AttributeError as err:
if err.code != "option-not-found":
raise err from err
is_inaccessible = True
if is_inaccessible:
variables = [[None, None, None]]
else:
description = self._convert_description(option.description(uncalculated=True), "description", its_a_path=False)
variables = [[variable_path, description, None]]
for cpath, description, identifiers in variables:
if not cpath:
# we cannot access to this variable, so try with permissive
if condition["type"] == "transitive":
value = None
else:
value = condition["value"]
option = self.true_config.forcepermissive.option(variable_path)
try:
variable_value = self._get_unmodified_default_value(option)
except PropertiesOptionError as err:
if calculation["propertyerror"] is True:
raise err from err
if calculation["propertyerror"] == "transitive":
return True
return False
except VariableCalculationDependencyError:
values.append(_("depends on an undocumented variable"))
continue
except AttributeError as err:
return calculation.get("default", False)
if condition["type"] == "transitive":
return True
if prop in HIDDEN_PROPERTIES:
condition_type = condition["condition"]
if (
condition_type == "when"
and value == variable_value
or condition_type == "when_not"
and value != variable_value
):
# always "prop"
return True
return False
if condition["type"] == "transitive":
submsg = _('is "{0}"').format(prop)
else:
condition_type = condition["condition"]
conditions = []
if not calculation["propertyerror"]:
conditions.append(_("is accessible"))
if calculation["optional"]:
conditions.append(_("is defined"))
value = condition["value"]
if not isinstance(value, str):
value = dump(value)
if condition_type == "when_not":
conditions.append(_(
'hasn\'t the value "{0}"'
).format(value))
else:
conditions.append(_(
'has the value "{0}"'
).format(value))
submsg = display_list(conditions, sort=False)
if calculation["propertyerror"] == "transitive":
submsg = display_list([_("is {0}").format(prop), submsg], separator="or", sort=False)
msg = _('when the variable "{{0}}" {0}').format(submsg)
path_obj = {
"path": self.doc_path(variable_path),
}
if identifiers:
path_obj["identifiers"] = identifiers
values.append({
"message": msg,
"path": path_obj,
"description": description,
})
if len(values) == 1:
return values[0]
return values
def _calculation_variable_to_string_not_properties(self, child, calculation, attribute_type):
if calculation["optional"]:
path = calculation["value"]["path"]
if "{{ identifier }}" in path:
if path not in self.dynamic_paths:
return None
else:
try:
self.true_config.forcepermissive.option(path).get()
except AttributeError:
return None
true_msg = _('the value of the variable "{0}" if it is defined')
else:
true_msg = _('the value of the variable "{0}"')
if "{{ identifier }}" in calculation["ori_path"]:
values = []
all_is_undocumented = False
for cpath, description, identifiers in self.get_annotation_variable(calculation["value"]["path"], calculation["ori_path"]):
if cpath:
all_is_undocumented = False
path_obj = {
"path": self.doc_path(cpath),
}
if identifiers:
path_obj["identifiers"] = identifiers
values.append({
"message": true_msg,
"path": path_obj,
"description": description,
})
else:
if all_is_undocumented is None:
all_is_undocumented = True
values.append(_("the value of an undocumented variable"))
if all_is_undocumented:
if len(values) > 1:
values = _("the values of undocumented variables")
else:
values = values[0]
else:
# FIXME A MUTUALISER AUSSI
variable_path = calculation["ori_path"]
variable = self.true_config.unrestraint.option(variable_path)
try:
isfollower = variable.isfollower()
except AttributeError:
pass
else:
if not isfollower and self.is_inaccessible_user_data(variable):
try:
uncalculated = variable.value.get(uncalculated=True)
except PropertiesOptionError:
true_msg = None
else:
if uncalculated and not isinstance(
uncalculated, Calculation
):
if isinstance(uncalculated, list):
true_msg = {
"submessage": _(
"(from an undocumented variable)"
),
"values": uncalculated,
}
else:
if not isinstance(uncalculated, str):
uncalculated = dump(uncalculated)
true_msg = _(
"{0} (from an undocumented variable)"
).format(uncalculated)
else:
true_msg = _("depends on an undocumented variable")
if true_msg:
if isinstance(true_msg, dict):
values = true_msg
else:
try:
description = self._convert_description(self.true_config.option(calculation["ori_path"]).description(uncalculated=True), "description", its_a_path=False)
except AttributeError:
description = calculation["ori_path"]
values = {
"message": true_msg,
"path": {
"path": self.doc_path(calculation["ori_path"]),
},
"description": description,
}
else:
values = None
return values
def get_annotation_variable(self, current_path, ori_path):
if current_path == ori_path:
regexp = None
else:
regexp = compile(
"^"
+ ori_path.replace("{{ identifier }}", "(.*)")
+ "$"
)
information = self.dynamic_paths[current_path]
path = current_path
for identifiers in information["identifiers"]:
cpath = calc_path(path, identifiers=identifiers)
if regexp and not regexp.search(cpath):
continue
if self.is_inaccessible_user_data(self.true_config.option(cpath)):
yield None, None, None
else:
description = self._convert_description(self.true_config.option(path).description(uncalculated=True), "description", its_a_path=False)
if "{{ identifier }}" in path:
yield path, description, identifiers.copy()
else:
yield path, description, None
def _get_unmodified_default_value(self, child):
calculation = child.information.get(f"default_calculation", None)
if not calculation:
return child.value.get()
if calculation["type"] == "variable":
variable = self.true_config.forcepermissive.option(calculation["value"]["path"])
if variable and self.is_inaccessible_user_data(variable):
return self._get_unmodified_default_value(variable)
raise VariableCalculationDependencyError()
def doc_path(self, path):
if self.document_a_type:
if not '.' in path:
return None
return path.split('.', 1)[-1]
return path

View file

@ -16,23 +16,20 @@ 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/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
""" """
from typing import Optional
from ruamel.yaml import CommentedMap from ruamel.yaml import CommentedMap
from ruamel.yaml.representer import RoundTripRepresenter from ruamel.yaml.representer import RoundTripRepresenter
from tiramisu import Calculation, owners
from .utils import _, calc_path, dump
from .utils import _, dump, to_phrase # XXX explicit null (see rougail-output-formatter
def represent_none(self, data):
# XXX explicit null (see rougail-output-formatter # pylint: disable=W0511
def represent_none(
self, data
): # pylint: disable=missing-function-docstring,unused-argument
return self.represent_scalar("tag:yaml.org,2002:null", "null") return self.represent_scalar("tag:yaml.org,2002:null", "null")
def represent_str(self, data): # pylint: disable=missing-function-docstring def represent_str(self, data):
if data == "": if data == "":
return self.represent_scalar("tag:yaml.org,2002:null", "") return self.represent_scalar("tag:yaml.org,2002:null", "")
return self.represent_scalar("tag:yaml.org,2002:str", data) return self.represent_scalar("tag:yaml.org,2002:str", data)
@ -40,201 +37,217 @@ def represent_str(self, data): # pylint: disable=missing-function-docstring
RoundTripRepresenter.add_representer(type(None), represent_none) RoundTripRepresenter.add_representer(type(None), represent_none)
RoundTripRepresenter.add_representer(str, represent_str) RoundTripRepresenter.add_representer(str, represent_str)
# XXX # pylint: disable=W0511 # XXX
class Examples: # pylint: disable=no-member,too-few-public-methods class Examples: # pylint: disable=no-member,too-few-public-methods
"""Build examples""" """Build examples"""
def __init__(self): def __init__(self):
self.comment_examples = None self.examples = None
self.level = None self.examples_mandatories = None
self.comment_examples_column = None
def gen_doc_examples(self): def gen_doc_examples(self):
"""Return examples""" """Return examples"""
self.comment_examples = self.rougailconfig["doc.examples.comment"] self.comment_examples = self.rougailconfig["doc.examples.comment"]
self.level = self.rougailconfig["doc.title_level"] self.level = self.rougailconfig["doc.title_level"]
if self.comment_examples: if self.comment_examples:
self.comment_examples_column = self.rougailconfig[ self.comment_examples_column = self.rougailconfig["doc.examples.comment_column"]
"doc.examples.comment_column" self._build_examples()
] return_string = ""
config = self.true_config.config.copy()
config.information.set("description_type", "description")
config.property.read_write()
self._set_mandatories(config)
datas = [] datas = []
for only_modified in [True, False]: if self.examples_mandatories:
if not only_modified: if self.document_a_type:
self._set_examples(config) col = list(self.examples_mandatories)
results = CommentedMap() if len(col) == 1:
true_results = results examples_mandatories = self.examples_mandatories[col[0]]
if self.true_config == self.config:
root_config = config
else: else:
root_config = config.option(self.config.path()) examples_mandatories = self.examples_mandatories
current_option = self.true_config
subpaths = self.config.path().split(".")
if not self.config.isoptiondescription():
subpaths = subpaths[:-1]
for subpath in subpaths:
current_option = current_option.option(subpath)
name = current_option.name()
results[name] = CommentedMap()
self._set_description(results, name, current_option)
results = results[name]
if root_config.isoptiondescription():
self._example_parse_family(
root_config.value.get(), results, only_modified
)
else: else:
self._set_example_value( examples_mandatories = self.examples_mandatories
results, root_config, root_config.value.get(), only_modified datas.extend([
) self.formatter.title(
if results: _("Example with mandatory variables not filled in"), self.level
if only_modified: ),
title = _("Example with mandatory variables not filled in") self.formatter.yaml(dump(examples_mandatories)),
else:
title = _("Example with all variables modifiable")
datas.extend(
[
self.formatter.title(title, self.level),
self.formatter.yaml(dump(true_results)),
self.formatter.end_family(self.level), self.formatter.end_family(self.level),
] ])
) if self.examples:
if self.document_a_type:
col = list(self.examples)
if len(col) == 1:
examples = self.examples[col[0]]
else:
examples = self.examples
else:
examples = self.examples
datas.extend([self.formatter.title(
_("Example with all variables modifiable"), self.level
),
self.formatter.yaml(dump(examples)),
self.formatter.end_family(self.level),
])
return self.formatter.compute(datas) return self.formatter.compute(datas)
def _set_mandatories(self, config): def _build_examples(self):
for calculated_too in [False, True]: examples, examples_mandatories = self._parse_examples(
for option in config.value.mandatory(): self.informations
if not calculated_too:
uncalculated = option.value.default(uncalculated=True)
if isinstance(uncalculated, Calculation):
continue
self._set_value_example(option, self._get_an_example(option))
def _get_an_example(self, option):
value = self._get_value_from_example(option)
if value is None:
variable_type = option.information.get("type")
if variable_type == "choice":
value = option.value.list()
if not self._is_multi(option) and value:
if value[0] is not None:
value = value[0]
elif len(value) > 1:
value = value[1]
else:
value = self.convert_option.get(option.information.get("type"), {}).get(
"example"
) )
if value is None: self.examples = examples
value = "example" self.examples_mandatories = examples_mandatories
if self._is_multi(option):
value = [value]
if option.isfollower() and option.index() and variable_type == "string":
value += str(option.index())
return value
def _set_examples(self, config): def _parse_examples(self, dico, dyn_parent: Optional[str] = None) -> tuple:
def _set_example(subconfig): if self.comment_examples:
for option in subconfig: examples = CommentedMap()
if option.isoptiondescription(): examples_mandatories = CommentedMap()
_set_example(option)
else: else:
# force examples value + do not let empty value examples = {}
examples = self._get_value_from_example(option) examples_mandatories = {}
if examples is None: for value in dico.values():
if self._is_multi(option): if value["type"] == "variable":
if not option.value.get(): parse = self._parse_examples_variable
examples = self._get_an_example(option)
elif option.value.get() is None:
examples = self._get_an_example(option)
if examples is None:
continue
self._set_value_example(option, examples)
_set_example(config)
self._set_mandatories(config)
def _set_value_example(self, option, value):
if option.isleader():
ori_len = option.value.len()
current_len = len(value)
if ori_len > current_len:
for idx in reversed(range(current_len, ori_len)):
option.value.pop(idx)
option.value.set(value)
def _get_value_from_example(self, option):
examples = option.information.get("examples", None)
if examples is None:
return None
if self._is_multi(option):
examples = list(examples)
else: else:
examples = examples[0] parse = self._parse_examples_family
return examples parse(
value, dyn_parent, examples, examples_mandatories
def _is_multi(self, option):
if option.isfollower():
return option.issubmulti()
return option.ismulti()
def _example_parse_family(self, config, results, only_modified):
for option, values in config.items():
if option.isoptiondescription():
if option.isleadership():
subresults = self._example_parse_leadership(values, only_modified)
if subresults:
name = option.name()
results[name] = subresults
self._set_description(results, name, option)
else:
subresults = CommentedMap()
self._example_parse_family(values, subresults, only_modified)
if subresults:
name = option.name()
results[name] = subresults
self._set_description(results, name, option)
else:
self._set_example_value(results, option, values, only_modified)
def _set_example_value(self, results, option, values, only_modified):
if self._is_valid_owner(option, only_modified):
name = option.name()
results[name] = values
self._set_description(results, name, option)
def _is_valid_owner(self, option, only_modified):
return (
option.type(only_self=True, translation=False) != "symlink"
and not only_modified
or (not option.owner.isdefault() and option.owner.get() != owners.forced)
) )
return examples, examples_mandatories
def _example_parse_leadership(self, values, only_modified): def _parse_examples_variable(
leadership_iter = iter(values.items()) self,
leader, leader_values = next(leadership_iter) variable,
if not self._is_valid_owner(leader, only_modified): dyn_parent: Optional[str],
return None examples: dict,
leadership = [CommentedMap() for idx in range(len(leader_values))] examples_mandatories: dict,
for idx, value in enumerate(leader_values): ) -> None:
self._set_example_value(leadership[idx], leader, value, only_modified) paths = []
for option, value in leadership_iter: ori_path = variable["path"]
idx = option.index() if "identifiers" in variable:
self._set_example_value(leadership[idx], option, value, only_modified) for idx, identifiers in enumerate(variable["identifiers"]):
return leadership paths.append(calc_path(ori_path, identifiers=identifiers))
else:
def _set_description(self, results, name, option): paths.append(ori_path)
if not self.comment_examples or option.information.get( for idx, path in enumerate(paths):
"forced_description", False path = calc_path(path)
): if dyn_parent is not None and not path.startswith(dyn_parent):
return continue
description = to_phrase(option.description()) if len(variable["names"]) == 1:
if description.endswith("."): name = variable["names"][0]
else:
name = variable["names"][idx]
value = variable["gen_examples"][idx]
examples[name] = value
if self.comment_examples and "description" in variable:
description = variable["description"]
if description.endswith('.'):
description = description[:-1] description = description[:-1]
results.yaml_add_eol_comment( examples.yaml_add_eol_comment(description, name, column=self.comment_examples_column)
description, name, column=self.comment_examples_column if variable["mandatory_without_value"]:
examples_mandatories[name] = value
if self.comment_examples and "description" in variable:
description = variable["description"]
if description.endswith('.'):
description = description[:-1]
examples_mandatories.yaml_add_eol_comment(description, name, column=self.comment_examples_column)
break
def _parse_examples_family(
self,
family,
dyn_parent: Optional[str],
examples: dict,
examples_mandatories: dict,
) -> None:
def _set_example(idx, identifiers):
path = calc_path(ori_path, identifiers=identifiers)
if dyn_parent is not None and not path.startswith(dyn_parent):
return
if len(family["informations"]["names"]) == 1:
name = family["informations"]["names"][0]
else:
name = family["informations"]["names"][idx]
if family["type"] == "leadership":
func = self._parse_examples_leadership
else:
func = self._parse_examples
ret_e, ret_m = func(
family["children"],
path + "." if family["type"] == "dynamic" else dyn_parent,
) )
if ret_m:
examples_mandatories[name] = ret_m
if self.comment_examples and "description" in family["informations"]:
description = family["informations"]["description"]
if description.endswith('.'):
description = description[:-1]
examples_mandatories.yaml_add_eol_comment(description, name, column=self.comment_examples_column)
if ret_e:
examples[name] = ret_e
if self.comment_examples and "description" in family["informations"]:
description = family["informations"]["description"]
if description.endswith('.'):
description = description[:-1]
examples.yaml_add_eol_comment(description, name, column=self.comment_examples_column)
ori_path = family["informations"]["path"]
if "identifiers" in family["informations"]:
for idx, identifiers in enumerate(family["informations"]["identifiers"]):
_set_example(idx, identifiers)
else:
_set_example(0, None)
def _parse_examples_leadership(
self, leadership, dyn_parent: Optional[str] = None
) -> tuple:
examples = []
examples_mandatories = []
leader = next(iter(leadership.values()))
paths = []
ori_path = leader["path"]
if "identifiers" in leader:
for idx, identifiers in enumerate(leader["identifiers"]):
paths.append(calc_path(ori_path, identifiers=identifiers))
else:
paths.append(ori_path)
for path_idx, path in enumerate(paths):
path = calc_path(path)
if dyn_parent is not None and not path.startswith(dyn_parent):
continue
for leader_idx in range(len(leader["gen_examples"][path_idx])):
if self.comment_examples:
followers = CommentedMap()
else:
followers = {}
for follower in leadership.values():
if len(follower["names"]) == 1:
name = follower["names"][0]
else:
name = follower["names"][path_idx]
followers[name] = follower["gen_examples"][path_idx][leader_idx]
if self.comment_examples and "description" in follower:
description = follower["description"]
if description.endswith('.'):
description = description[:-1]
followers.yaml_add_eol_comment(description, name, column=self.comment_examples_column)
examples.append(followers)
if leader["mandatory_without_value"]:
if self.comment_examples:
followers = CommentedMap()
else:
followers = {}
for follower in leadership.values():
if not follower["mandatory_without_value"]:
continue
if len(follower["names"]) == 1:
name = follower["names"][0]
else:
name = follower["names"][path_idx]
followers[name] = follower["gen_examples"][path_idx][leader_idx]
if self.comment_examples and "description" in follower:
description = follower["description"]
if description.endswith('.'):
description = description[:-1]
followers.yaml_add_eol_comment(description, name, column=self.comment_examples_column)
examples_mandatories.append(followers)
break
return examples, examples_mandatories

View file

@ -56,12 +56,10 @@ class Formatter(CommonFormatter):
def compute(self, dico): def compute(self, dico):
if self.rougailconfig["doc.true_color"]: if self.rougailconfig["doc.true_color"]:
force_terminal = "xterm-256color" force_terminal = 'xterm-256color'
else: else:
force_terminal = None force_terminal = None
console = self.rich_console( console = self.rich_console(theme=self.custom_theme, force_terminal=force_terminal)
theme=self.custom_theme, force_terminal=force_terminal
)
with console.capture() as capture: with console.capture() as capture:
for data in dico: for data in dico:
console.print(data) console.print(data)
@ -166,7 +164,7 @@ class Formatter(CommonFormatter):
def yaml(self, _dump): def yaml(self, _dump):
"""Dump yaml part of documentation""" """Dump yaml part of documentation"""
return self.rich_syntaxt(f"---\n{_dump}", "yaml") return self.rich_syntaxt(f'---\n{_dump}', 'yaml')
def link( def link(
self, self,

View file

@ -25,7 +25,7 @@ from ..i18n import _
def to_id(path): def to_id(path):
# https://www.w3.org/TR/html4/types.html#type-name # https://www.w3.org/TR/html4/types.html#type-name
return "".join(e if e in ["-", "_", ":", "."] or e.isalnum() else ":" for e in path) return ''.join(e if e in ["-", "_", ":", "."] or e.isalnum() else ":" for e in path )
class Formatter(CommonFormatter): class Formatter(CommonFormatter):
@ -55,9 +55,7 @@ class Formatter(CommonFormatter):
lst: List[str], lst: List[str],
) -> str: ) -> str:
"""Display line in tabular from a list""" """Display line in tabular from a list"""
return self.enter_tabular.join( return self.enter_tabular.join([l.replace("\n", self.enter_tabular) for l in lst])
[l.replace("\n", self.enter_tabular) for l in lst]
)
def bold( def bold(
self, self,
@ -103,7 +101,7 @@ class Formatter(CommonFormatter):
with_enter: bool = True, with_enter: bool = True,
): ):
"""Display a liste of element""" """Display a liste of element"""
if type_ == "variable": if type_ == 'variable':
if inside_tabular: if inside_tabular:
if with_enter: if with_enter:
char = first_char = f"{self.enter_tabular}•&nbsp;" char = first_char = f"{self.enter_tabular}•&nbsp;"
@ -151,8 +149,7 @@ class Formatter(CommonFormatter):
"""Dump yaml part of documentation""" """Dump yaml part of documentation"""
return f"```yaml\n---\n{_dump}\n```\n" return f"```yaml\n---\n{_dump}\n```\n"
def link_variable( def link_variable(self,
self,
path: str, path: str,
true_path: str, true_path: str,
description: str, description: str,
@ -160,13 +157,12 @@ class Formatter(CommonFormatter):
) -> str: ) -> str:
name = to_id(true_path) name = to_id(true_path)
if filename: if filename:
link = f"{filename}#{name}" link = f'{filename}#{name}'
else: else:
link = f"#{name}" link = f'#{name}'
return f"[{description}]({link})" return f"[{description}]({link})"
def anchor( def anchor(self,
self,
path: str, path: str,
true_path: str, true_path: str,
) -> str: ) -> str:
@ -205,8 +201,6 @@ class Formatter(CommonFormatter):
def family_informations_ends_line(self) -> str: def family_informations_ends_line(self) -> str:
return "\\\n" return "\\\n"
# #
# def family_to_string(self, *args, **kwargs) -> List[str]: # def family_to_string(self, *args, **kwargs) -> List[str]:
# lst = super().family_to_string(*args, **kwargs) # lst = super().family_to_string(*args, **kwargs)

View file

@ -33,33 +33,20 @@ class Tabular(FourTabular):
def _add(self) -> tuple: def _add(self) -> tuple:
first_column = self.add_first_column() first_column = self.add_first_column()
second_column = self.get_column( second_column = self.get_column(self.description, self.help_, self.validators, self.choices, self.examples, self.tags)
self.description,
self.help_,
self.validators,
self.choices,
self.examples,
self.tags,
)
if second_column: if second_column:
self.second_column = True self.second_column = True
third_column = self.get_column(self.default) third_column = self.get_column(self.default)
if third_column: if third_column:
self.third_column = True self.third_column = True
types = self.formatter.property_to_string( types = self.formatter.property_to_string(
self.informations, self.informations, self.calculated_properties, self.modified_attributes, contents=["type"],
self.calculated_properties,
self.modified_attributes,
contents=["type"],
) )
four_column = self.get_column(types) four_column = self.get_column(types)
if four_column: if four_column:
self.four_column = True self.four_column = True
mode = self.formatter.property_to_string( mode = self.formatter.property_to_string(
self.informations, self.informations, self.calculated_properties, self.modified_attributes, contents=["mode", "access_control"],
self.calculated_properties,
self.modified_attributes,
contents=["mode", "access_control"],
) )
five_column = self.get_column(mode, *self.calculated_properties) five_column = self.get_column(mode, *self.calculated_properties)
if five_column: if five_column:
@ -87,8 +74,5 @@ class Tabular(FourTabular):
def set_properties(self): def set_properties(self):
self.properties = self.formatter.property_to_string( self.properties = self.formatter.property_to_string(
self.informations, self.informations, self.calculated_properties, self.modified_attributes, contents=["properties", "validator"],
self.calculated_properties,
self.modified_attributes,
contents=["properties", "validator"],
) )

View file

@ -33,25 +33,14 @@ class Tabular(ThreeTabular):
def _add(self) -> tuple: def _add(self) -> tuple:
first_column = self.add_first_column() first_column = self.add_first_column()
second_column = self.get_column( second_column = self.get_column(self.description, self.help_, self.validators, self.choices, self.examples, self.tags, *self.calculated_properties)
self.description,
self.help_,
self.validators,
self.choices,
self.examples,
self.tags,
*self.calculated_properties,
)
if second_column: if second_column:
self.second_column = True self.second_column = True
third_column = self.get_column(self.default) third_column = self.get_column(self.default)
if third_column: if third_column:
self.third_column = True self.third_column = True
types = self.formatter.property_to_string( types = self.formatter.property_to_string(
self.informations, self.informations, self.calculated_properties, self.modified_attributes, contents="type",
self.calculated_properties,
self.modified_attributes,
contents="type",
) )
four_column = self.get_column(types) four_column = self.get_column(types)
if four_column: if four_column:
@ -77,8 +66,5 @@ class Tabular(ThreeTabular):
def set_properties(self): def set_properties(self):
self.properties = self.formatter.property_to_string( self.properties = self.formatter.property_to_string(
self.informations, self.informations, self.calculated_properties, self.modified_attributes, contents=["properties", "mode", "access_control", "validator"],
self.calculated_properties,
self.modified_attributes,
contents=["properties", "mode", "access_control", "validator"],
) )

View file

@ -33,49 +33,31 @@ class Tabular(FiveTabular):
def _add(self) -> tuple: def _add(self) -> tuple:
first_column = self.add_first_column() first_column = self.add_first_column()
second_column = self.get_column( second_column = self.get_column(self.description, self.help_, self.examples, self.tags)
self.description, self.help_, self.examples, self.tags
)
if second_column: if second_column:
self.second_column = True self.second_column = True
third_column = self.get_column(self.default) third_column = self.get_column(self.default)
if third_column: if third_column:
self.third_column = True self.third_column = True
types = self.formatter.property_to_string( types = self.formatter.property_to_string(
self.informations, self.informations, self.calculated_properties, self.modified_attributes, contents=["type"],
self.calculated_properties,
self.modified_attributes,
contents=["type"],
) )
four_column = self.get_column(types) four_column = self.get_column(types)
if four_column: if four_column:
self.four_column = True self.four_column = True
mode = self.formatter.property_to_string( mode = self.formatter.property_to_string(
self.informations, self.informations, self.calculated_properties, self.modified_attributes, contents=["mode", "access_control"],
self.calculated_properties,
self.modified_attributes,
contents=["mode", "access_control"],
) )
five_column = self.get_column(mode, *self.calculated_properties) five_column = self.get_column(mode, *self.calculated_properties)
if five_column: if five_column:
self.five_column = True self.five_column = True
validators = self.formatter.property_to_string( validators = self.formatter.property_to_string(
self.informations, self.informations, self.calculated_properties, self.modified_attributes, contents=["validator"],
self.calculated_properties,
self.modified_attributes,
contents=["validator"],
) )
six_column = self.get_column(validators, self.validators, self.choices) six_column = self.get_column(validators, self.validators, self.choices)
if six_column: if six_column:
self.six_column = True self.six_column = True
return ( return first_column, second_column, third_column, four_column, five_column, six_column
first_column,
second_column,
third_column,
four_column,
five_column,
six_column,
)
def headers(self) -> tuple: def headers(self) -> tuple:
header = super().headers() header = super().headers()
@ -100,18 +82,10 @@ class Tabular(FiveTabular):
def set_properties(self): def set_properties(self):
self.properties = self.formatter.property_to_string( self.properties = self.formatter.property_to_string(
self.informations, self.informations, self.calculated_properties, self.modified_attributes, contents=["properties"],
self.calculated_properties,
self.modified_attributes,
contents=["properties"],
) )
def set_validators(self): def set_validators(self):
self.validators = self.formatter.convert_section_to_string( self.validators = self.formatter.convert_section_to_string(
"validators", "validators", self.informations, self.modified_attributes, multi=True, section_name=False, with_to_phrase=True,
self.informations,
self.modified_attributes,
multi=True,
section_name=False,
with_to_phrase=True,
) )

View file

@ -32,15 +32,7 @@ class Tabular(TwoTabular):
def _add(self) -> tuple: def _add(self) -> tuple:
first_column = self.add_first_column() first_column = self.add_first_column()
second_column = self.get_column( second_column = self.get_column(self.description, self.help_, self.validators, self.choices, self.examples, self.tags, *self.calculated_properties)
self.description,
self.help_,
self.validators,
self.choices,
self.examples,
self.tags,
*self.calculated_properties,
)
if second_column: if second_column:
self.second_column = True self.second_column = True
third_column = self.get_column(self.default) third_column = self.get_column(self.default)
@ -66,18 +58,12 @@ class Tabular(TwoTabular):
def set_default(self): def set_default(self):
if "default" in self.informations: if "default" in self.informations:
self.default = self.formatter.convert_section_to_string( self.default = self.formatter.convert_section_to_string(
"default", "default", self.informations, self.modified_attributes, multi=self.multi, section_name=False
self.informations,
self.modified_attributes,
multi=self.multi,
section_name=False,
) )
else: else:
self.default = None self.default = None
def set_choices(self): def set_choices(self):
self.default_is_already_set, self.choices = ( self.default_is_already_set, self.choices = self.formatter.convert_choices_to_string(
self.formatter.convert_choices_to_string(
self.informations, self.modified_attributes, with_default=False self.informations, self.modified_attributes, with_default=False
) )
)

View file

@ -33,24 +33,13 @@ class Tabular(CommonTabular):
def _add(self) -> tuple: def _add(self) -> tuple:
first_column = self.add_first_column() first_column = self.add_first_column()
default = self.default if not self.default_is_already_set else None default = self.default if not self.default_is_already_set else None
second_column = self.get_column( second_column = self.get_column(self.description, self.help_, self.validators, self.choices, default, self.examples, self.tags, *self.calculated_properties)
self.description,
self.help_,
self.validators,
self.choices,
default,
self.examples,
self.tags,
*self.calculated_properties,
)
if second_column: if second_column:
self.second_column = True self.second_column = True
return first_column, second_column return first_column, second_column
def add_first_column(self) -> str: def add_first_column(self) -> str:
return self.get_column( return self.get_column(self.paths, self.properties, self.commandlines, self.environments)
self.paths, self.properties, self.commandlines, self.environments
)
def headers(self) -> tuple: def headers(self) -> tuple:
headers = [_("Variable")] headers = [_("Variable")]

View file

@ -26,7 +26,6 @@ from tabulate import tabulate
from rougail.tiramisu import normalize_family from rougail.tiramisu import normalize_family
from tiramisu import undefined from tiramisu import undefined
from tiramisu.error import PropertiesOptionError, display_list from tiramisu.error import PropertiesOptionError, display_list
try: try:
from tiramisu_cmdline_parser.api import gen_argument_name from tiramisu_cmdline_parser.api import gen_argument_name
except: except:
@ -87,12 +86,7 @@ class CommonTabular:
self.clear() self.clear()
return columns return columns
def add( def add(self, informations: dict, modified_attributes: dict, force_identifiers: Optional[str]) -> tuple:
self,
informations: dict,
modified_attributes: dict,
force_identifiers: Optional[str],
) -> tuple:
self.informations = informations self.informations = informations
self.modified_attributes = modified_attributes self.modified_attributes = modified_attributes
self.force_identifiers = force_identifiers self.force_identifiers = force_identifiers
@ -113,23 +107,16 @@ class CommonTabular:
def set_description(self): def set_description(self):
if "description" in self.informations: if "description" in self.informations:
self.description = self.formatter.get_description( self.description = self.formatter.get_description(
"variable", "variable", self.informations, self.modified_attributes, self.force_identifiers,
self.informations,
self.modified_attributes,
self.force_identifiers,
) )
else: else:
self.description = None self.description = None
self.help_ = self.formatter.convert_list_to_string( self.help_ = self.formatter.convert_list_to_string("help", self.informations, self.modified_attributes)
"help", self.informations, self.modified_attributes
)
def set_choices(self): def set_choices(self):
self.default_is_already_set, self.choices = ( self.default_is_already_set, self.choices = self.formatter.convert_choices_to_string(
self.formatter.convert_choices_to_string(
self.informations, self.modified_attributes self.informations, self.modified_attributes
) )
)
def set_type(self): def set_type(self):
self.multi = self.informations.get("multiple", True) self.multi = self.informations.get("multiple", True)
@ -149,80 +136,33 @@ class CommonTabular:
) )
def set_paths(self): def set_paths(self):
self.paths = self.formatter.join( self.paths = self.formatter.join(self.formatter.display_paths(self.informations, self.modified_attributes, self.force_identifiers, is_variable=True))
self.formatter.display_paths(
self.informations,
self.modified_attributes,
self.force_identifiers,
is_variable=True,
)
)
def set_commandline(self): def set_commandline(self):
if self.formatter.with_commandline and not self.informations.get( if self.formatter.with_commandline and not self.informations.get('not_for_commandline', False):
"not_for_commandline", False commandlines = self.formatter.display_paths(self.informations, self.modified_attributes, self.force_identifiers, is_variable=True, is_bold=False, variable_prefix="--", with_anchor=False)
): if self.type == 'boolean':
commandlines = self.formatter.display_paths( for path in self.formatter.display_paths(self.informations, self.modified_attributes, self.force_identifiers, is_variable=True, is_bold=False, is_upper=False, with_anchor=False, variable_prefix="--"):
self.informations, commandlines.append("--" + gen_argument_name(path[2:], False, True, False))
self.modified_attributes,
self.force_identifiers,
is_variable=True,
is_bold=False,
variable_prefix="--",
with_anchor=False,
)
if self.type == "boolean":
for path in self.formatter.display_paths(
self.informations,
self.modified_attributes,
self.force_identifiers,
is_variable=True,
is_bold=False,
is_upper=False,
with_anchor=False,
variable_prefix="--",
):
commandlines.append(
"--" + gen_argument_name(path[2:], False, True, False)
)
if "alternative_name" in self.informations: if "alternative_name" in self.informations:
alternative_name = self.informations["alternative_name"] alternative_name = self.informations["alternative_name"]
commandlines[0] = f"-{alternative_name}, {commandlines[0]}" commandlines[0] = f"-{alternative_name}, {commandlines[0]}"
if self.type == "boolean": if self.type == 'boolean':
commandlines[1] = ( commandlines[1] = "-" + gen_argument_name(alternative_name, True, True, False) + f", {commandlines[1]}"
"-" self.commandlines = self.formatter.section(_("Command line"), commandlines, force_enter=True)
+ gen_argument_name(alternative_name, True, True, False)
+ f", {commandlines[1]}"
)
self.commandlines = self.formatter.section(
_("Command line"), commandlines, force_enter=True
)
else: else:
self.commandlines = None self.commandlines = None
def set_environment(self): def set_environment(self):
if self.formatter.with_environment: if self.formatter.with_environment:
environments = self.formatter.display_paths( environments = self.formatter.display_paths(self.informations, self.modified_attributes, self.force_identifiers, is_variable=True, is_bold=False, is_upper=True, variable_prefix=self.formatter.prefix, with_anchor=False)
self.informations, self.environments = self.formatter.section(_("Environment variable"), environments)
self.modified_attributes,
self.force_identifiers,
is_variable=True,
is_bold=False,
is_upper=True,
variable_prefix=self.formatter.prefix,
with_anchor=False,
)
self.environments = self.formatter.section(
_("Environment variable"), environments
)
else: else:
self.environments = None self.environments = None
def set_properties(self): def set_properties(self):
self.properties = self.formatter.property_to_string( self.properties = self.formatter.property_to_string(
self.informations, self.informations, self.calculated_properties, self.modified_attributes,
self.calculated_properties,
self.modified_attributes,
) )
def set_validators(self): def set_validators(self):
@ -254,7 +194,9 @@ class CommonFormatter:
self.rougailconfig = rougailconfig self.rougailconfig = rougailconfig
self.support_namespace = support_namespace self.support_namespace = support_namespace
def run(self, informations: dict, *, dico_is_already_treated=False) -> str: def run(
self, informations: dict, *, dico_is_already_treated=False
) -> str:
"""Transform to string""" """Transform to string"""
if informations: if informations:
level = self.rougailconfig["doc.title_level"] level = self.rougailconfig["doc.title_level"]
@ -266,14 +208,12 @@ class CommonFormatter:
self.with_commandline = self.rougailconfig["doc.tabulars.with_commandline"] self.with_commandline = self.rougailconfig["doc.tabulars.with_commandline"]
self.with_environment = self.rougailconfig["doc.tabulars.with_environment"] self.with_environment = self.rougailconfig["doc.tabulars.with_environment"]
if self.with_environment and not gen_argument_name: if self.with_environment and not gen_argument_name:
raise Exception("please install tiramisu_cmdline_parser") raise Exception('please install tiramisu_cmdline_parser')
if not self.rougailconfig["main_namespace"] and self.with_environment: if not self.rougailconfig["main_namespace"] and self.with_environment:
if self.support_namespace: if self.support_namespace:
self.prefix = "" self.prefix = ""
else: else:
self.prefix = ( self.prefix = self.rougailconfig["doc.tabulars.environment_prefix"] + "_"
self.rougailconfig["doc.tabulars.environment_prefix"] + "_"
)
self.with_family = not self.rougailconfig["doc.tabulars.without_family"] self.with_family = not self.rougailconfig["doc.tabulars.without_family"]
self.other_root_filenames = None self.other_root_filenames = None
tabular_template = self.rougailconfig["doc.tabular_template"] tabular_template = self.rougailconfig["doc.tabular_template"]
@ -312,16 +252,14 @@ class CommonFormatter:
"""Set a text to underline""" """Set a text to underline"""
raise NotImplementedError() raise NotImplementedError()
def anchor( def anchor(self,
self,
path: str, path: str,
true_path: str, true_path: str,
) -> str: ) -> str:
"""Set a text to a link anchor""" """Set a text to a link anchor"""
return path return path
def link_variable( def link_variable(self,
self,
path: str, path: str,
true_path: str, true_path: str,
description: str, description: str,
@ -390,10 +328,8 @@ class CommonFormatter:
if with_anchor: if with_anchor:
anchor = self.anchor anchor = self.anchor
else: else:
def anchor(path, true_path): def anchor(path, true_path):
return path return path
ret_paths = [] ret_paths = []
path = informations["path"] path = informations["path"]
if not path: if not path:
@ -401,34 +337,19 @@ class CommonFormatter:
if is_bold: if is_bold:
bold = self.bold bold = self.bold
else: else:
def bold(value): def bold(value):
return value return value
if is_upper: if is_upper:
def upper(value): def upper(value):
return value.upper() return value.upper()
else: else:
def upper(value): def upper(value):
return value return value
if "identifiers" in modified_attributes: if "identifiers" in modified_attributes:
name, previous, new = modified_attributes["identifiers"] name, previous, new = modified_attributes["identifiers"]
ret_paths.extend( ret_paths.extend(
[ [
bold( bold(self.delete(upper(variable_prefix + calc_path(path, self, identifier))))
self.delete(
upper(
variable_prefix
+ calc_path(
path, formatter=self, identifiers=identifier
)
)
)
)
for identifier in previous for identifier in previous
] ]
) )
@ -438,7 +359,7 @@ class CommonFormatter:
for idx, identifier in enumerate(informations["identifiers"]): for idx, identifier in enumerate(informations["identifiers"]):
if force_identifiers and identifier != force_identifiers: if force_identifiers and identifier != force_identifiers:
continue continue
path_ = calc_path(path, formatter=self, identifiers=identifier) path_ = calc_path(path, self, identifier)
if variable_prefix: if variable_prefix:
path_ = variable_prefix + upper(path_) path_ = variable_prefix + upper(path_)
if not idx: if not idx:
@ -482,15 +403,12 @@ class CommonFormatter:
namespace = False namespace = False
if self.tabular_datas.columns: if self.tabular_datas.columns:
msg.append(self.tabular()) msg.append(self.tabular())
msg.extend( msg.extend(self.family_to_string(value["informations"], level, namespace))
self.family_to_string(value["informations"], level, namespace)
)
msg.extend(self.dict_to_dict(value["children"], level + 1)) msg.extend(self.dict_to_dict(value["children"], level + 1))
msg.append(self.end_family(level)) msg.append(self.end_family(level))
else: else:
self.dict_to_dict( self.dict_to_dict(
value["children"], value["children"], level + 1,
level + 1,
) )
if self.tabular_datas.columns and (init or self.with_family): if self.tabular_datas.columns and (init or self.with_family):
msg.append(self.tabular()) msg.append(self.tabular())
@ -509,19 +427,13 @@ class CommonFormatter:
if namespace: if namespace:
ret = [self.namespace_to_title(informations, level)] ret = [self.namespace_to_title(informations, level)]
else: else:
ret = [ ret = [self.title(self.get_description("family", informations, {}, None), level)]
self.title(
self.get_description("family", informations, {}, None), level
)
]
msg = [] msg = []
helps = informations.get("help") helps = informations.get("help")
if helps: if helps:
for help_ in helps: for help_ in helps:
msg.extend([to_phrase(h) for h in help_.strip().split("\n")]) msg.extend([to_phrase(h) for h in help_.strip().split('\n')])
path = self.display_paths( path = self.display_paths(informations, {}, None, with_anchor=False, is_bold=False)
informations, {}, None, with_anchor=False, is_bold=False
)
if path: if path:
msg.append(self.section(_("Path"), path, type_="family")) msg.append(self.section(_("Path"), path, type_="family"))
calculated_properties = [] calculated_properties = []
@ -529,24 +441,18 @@ class CommonFormatter:
if property_str: if property_str:
msg.append(property_str) msg.append(property_str)
if calculated_properties: if calculated_properties:
msg.append(self.join(calculated_properties)) msg.append(self.join(calculated_properties)
)
if "identifier" in informations: if "identifier" in informations:
msg.append( msg.append(
self.section( self.section(_("Identifiers"), informations["identifier"], type_="family")
_("Identifiers"), informations["identifier"], type_="family"
)
) )
starts_line = self.family_informations_starts_line() starts_line = self.family_informations_starts_line()
if msg: if msg:
fam_info = self.family_informations() fam_info = self.family_informations()
if fam_info: if fam_info:
ret.append(fam_info) ret.append(fam_info)
ret.append( ret.append(self.family_informations_ends_line().join([starts_line + m for m in msg]) + self.end_family_informations())
self.family_informations_ends_line().join(
[starts_line + m for m in msg]
)
+ self.end_family_informations()
)
return ret return ret
def family_informations_starts_line(self) -> str: def family_informations_starts_line(self) -> str:
@ -585,22 +491,13 @@ class CommonFormatter:
return self.stripped(self.join(datas)) return self.stripped(self.join(datas))
def get_description( def get_description(
self, self, type_: str, informations: dict, modified_attributes: dict, force_identifiers: Optional[str]
type_: str,
informations: dict,
modified_attributes: dict,
force_identifiers: Optional[str],
) -> str(): ) -> str():
def _get_description(description, identifiers, delete=False, new=[]): def _get_description(description, identifiers, delete=False, new=[]):
if identifiers and "{{ identifier }}" in description: if identifiers and "{{ identifier }}" in description:
if type_ == "variable": if type_ == "variable":
identifiers_text = display_list( identifiers_text = display_list(
[ [self.italic(i[-1]) for i in identifiers if not force_identifiers or i == force_identifiers], separator="or"
self.italic(i[-1])
for i in identifiers
if not force_identifiers or i == force_identifiers
],
separator="or",
) )
description = description.replace( description = description.replace(
"{{ identifier }}", identifiers_text "{{ identifier }}", identifiers_text
@ -649,23 +546,13 @@ class CommonFormatter:
# VARIABLE # VARIABLE
def variable_to_string( def variable_to_string(
self, self, informations: dict, modified_attributes: dict = {}, force_identifiers: Optional[str]=None
informations: dict,
modified_attributes: dict = {},
force_identifiers: Optional[str] = None,
) -> None: ) -> None:
"""Manage variable""" """Manage variable"""
self.tabular_datas.add(informations, modified_attributes, force_identifiers) self.tabular_datas.add(informations, modified_attributes, force_identifiers)
def convert_section_to_string( def convert_section_to_string(
self, self, attribute: str, informations: dict, modified_attributes: dict, multi: bool, *, section_name: bool = True, with_to_phrase = False
attribute: str,
informations: dict,
modified_attributes: dict,
multi: bool,
*,
section_name: bool = True,
with_to_phrase=False,
) -> str(): ) -> str():
values = [] values = []
submessage = "" submessage = ""
@ -705,19 +592,10 @@ class CommonFormatter:
if old["values"] in new: if old["values"] in new:
values = self.underline(values) values = self.underline(values)
if values != []: if values != []:
return self.section( return self.section(name, values, submessage=submessage, section_name=section_name, with_to_phrase=with_to_phrase)
name,
values,
submessage=submessage,
section_name=section_name,
with_to_phrase=with_to_phrase,
)
def convert_choices_to_string( def convert_choices_to_string(
self, self, informations: dict, modified_attributes: dict, with_default: bool = True,
informations: dict,
modified_attributes: dict,
with_default: bool = True,
) -> str(): ) -> str():
default_is_already_set = False default_is_already_set = False
if "choices" in informations: if "choices" in informations:
@ -831,47 +709,23 @@ class CommonFormatter:
informations: dict, informations: dict,
calculated_properties: list, calculated_properties: list,
modified_attributes: dict, modified_attributes: dict,
contents: list = ["type", "properties", "mode", "access_control", "validator"], contents: list = ["type", "properties", "mode", "access_control", "validator"]
) -> str: ) -> str:
"""Transform properties to string""" """Transform properties to string"""
properties = [] properties = []
modified_properties = [] modified_properties = []
if "type" in contents: if "type" in contents:
if "type" in modified_attributes: if "type" in modified_attributes:
properties.append( properties.append(self.prop(modified_attributes["type"], italic=False, delete=True, underline=False))
self.prop(
modified_attributes["type"],
italic=False,
delete=True,
underline=False,
)
)
if "multi" in modified_attributes: if "multi" in modified_attributes:
properties.append( properties.append(self.prop("multiple", italic=False, delete=True, underline=False))
self.prop("multiple", italic=False, delete=True, underline=False)
)
if "properties" not in contents and "properties" in modified_attributes: if "properties" not in contents and "properties" in modified_attributes:
for prop in modified_attributes["properties"]: for prop in modified_attributes["properties"]:
if prop["ori_name"] == "mandatory": if prop["ori_name"] == "mandatory":
properties.append( properties.append(self.prop(prop["ori_name"], italic=False, delete=True, underline=False))
self.prop(
prop["ori_name"],
italic=False,
delete=True,
underline=False,
)
)
break break
if "mode" in contents and "mode" in modified_attributes: if "mode" in contents and "mode" in modified_attributes:
name, previous, new = modified_attributes["mode"] properties.append(self.prop(modified_attributes["mode"], italic=False, delete=True, underline=False))
if previous:
properties.append(
self.prop(previous[0], italic=False, delete=True, underline=False)
)
if new:
properties.append(
self.prop(new[0], italic=False, delete=False, underline=True)
)
if "properties" in modified_attributes: if "properties" in modified_attributes:
if "properties" in contents: if "properties" in contents:
for props in modified_attributes["properties"]: for props in modified_attributes["properties"]:
@ -902,13 +756,9 @@ class CommonFormatter:
if "validator" not in contents and data[0] == "unique": if "validator" not in contents and data[0] == "unique":
continue continue
if p not in new: if p not in new:
properties.append( properties.append(self.prop(p, italic=False, delete=True, underline=False))
self.prop(p, italic=False, delete=True, underline=False)
)
if data[1] is not None: if data[1] is not None:
local_calculated_properties[p] = [ local_calculated_properties[p] = [{"annotation": data[1], "delete": True}]
{"annotation": data[1], "delete": True}
]
else: else:
previous = new = [] previous = new = []
others = [] others = []
@ -941,19 +791,14 @@ class CommonFormatter:
others.append(prop) others.append(prop)
for prop in others: for prop in others:
prop_name = prop["name"] prop_name = prop["name"]
if ( if "type" not in contents and prop.get("ori_name", prop_name) == "mandatory":
"type" not in contents
and prop.get("ori_name", prop_name) == "mandatory"
):
continue continue
if prop_name not in previous and prop_name in new: if prop_name not in previous and prop_name in new:
underline = True underline = True
else: else:
underline = False underline = False
if prop["type"] == "type": if prop["type"] == "type":
properties.append( properties.append(self.link(prop_name, ROUGAIL_VARIABLE_TYPE, underline=underline))
self.link(prop_name, ROUGAIL_VARIABLE_TYPE, underline=underline)
)
else: else:
if "annotation" in prop: if "annotation" in prop:
italic = True italic = True
@ -970,11 +815,7 @@ class CommonFormatter:
) )
else: else:
italic = False italic = False
properties.append( properties.append(self.prop(prop_name, italic=italic, delete=False, underline=underline))
self.prop(
prop_name, italic=italic, delete=False, underline=underline
)
)
if local_calculated_properties: if local_calculated_properties:
for ( for (
calculated_property_name, calculated_property_name,
@ -1042,17 +883,12 @@ class CommonFormatter:
if self.other_root_filenames: if self.other_root_filenames:
path = msg["path"]["path"] path = msg["path"]["path"]
for root in self.other_root_filenames: for root in self.other_root_filenames:
if path == root or path.startswith(f"{root}."): if path == root or path.startswith(f'{root}.'):
filename = self.other_root_filenames[root] filename = self.other_root_filenames[root]
break break
if "identifiers" in msg["path"]: if "identifiers" in msg["path"]:
msg["identifiers"] = [msg["path"]["identifiers"]] msg["identifiers"] = [msg["path"]["identifiers"]]
path = self.link_variable( path = self.link_variable(calc_path(msg["path"], self, identifiers), msg["path"]["path"], self.get_description("variable", msg, {}, None), filename=filename)
calc_path(msg["path"], formatter=self, identifiers=identifiers),
msg["path"]["path"],
self.get_description("variable", msg, {}, None),
filename=filename,
)
msg = msg["message"].format(path) msg = msg["message"].format(path)
elif "description" in msg: elif "description" in msg:
if "variables" in msg: if "variables" in msg:
@ -1062,26 +898,12 @@ class CommonFormatter:
if self.other_root_filenames: if self.other_root_filenames:
path = msg["path"] path = msg["path"]
for root in self.other_root_filenames: for root in self.other_root_filenames:
if path == root or path.startswith(f"{root}."): if path == root or path.startswith(f'{root}.'):
filename = self.other_root_filenames[root] filename = self.other_root_filenames[root]
break break
identifiers = variable.get("identifiers") identifiers = variable.get("identifiers")
path = calc_path( path = calc_path(variable, self, identifiers)
variable, formatter=self, identifiers=identifiers paths.append(self.link_variable(path, variable["path"], self.get_description("variable", variable, {}, force_identifiers=identifiers), filename=filename))
)
paths.append(
self.link_variable(
path,
variable["path"],
self.get_description(
"variable",
variable,
{},
force_identifiers=identifiers,
),
filename=filename,
)
)
msg = msg["description"].format(*paths) msg = msg["description"].format(*paths)
else: else:
msg = msg["description"] msg = msg["description"]
@ -1126,11 +948,8 @@ class CommonFormatter:
return submessage return submessage
def calc_path(path, *, formatter=None, identifiers: List[str] = None) -> str: def calc_path(path, formatter=None, identifiers: List[str] = None) -> str:
def _path_with_identifier(path, identifier): def _path_with_identifier(path, identifier):
if identifier is None:
identifier = "{{ __identifier__ }}"
else:
identifier = normalize_family(str(identifier)) identifier = normalize_family(str(identifier))
if formatter: if formatter:
identifier = formatter.italic(identifier) identifier = formatter.italic(identifier)
@ -1141,12 +960,10 @@ def calc_path(path, *, formatter=None, identifiers: List[str] = None) -> str:
if "identifiers" in path: if "identifiers" in path:
for identifier in path["identifiers"]: for identifier in path["identifiers"]:
path_ = _path_with_identifier(path_, identifier) path_ = _path_with_identifier(path_, identifier)
path_ = path_.replace("{{ __identifier__ }}", "{{ identifier }}")
elif identifiers: elif identifiers:
path_ = path path_ = path
for identifier in identifiers: for identifier in identifiers:
path_ = _path_with_identifier(path_, identifier) path_ = _path_with_identifier(path_, identifier)
path_ = path_.replace("{{ __identifier__ }}", "{{ identifier }}")
else: else:
path_ = path path_ = path
return path_ return path_

View file

@ -4,7 +4,7 @@
|==== |====
| Variable | Description | Variable | Description
| **var1** + | **var1** +
`+++basic+++` `#standard#` `https://rougail.readthedocs.io/en/latest/variable.html#variables-types[choice]` `standard` `mandatory` | First variable. + `+++(None, ['basic'], ['standard'])+++` `https://rougail.readthedocs.io/en/latest/variable.html#variables-types[choice]` `standard` `mandatory` | First variable. +
**Choices**: **Choices**:
* val1 * val1

View file

@ -1,8 +1,8 @@
<details><summary>Modified variable</summary> <details><summary>Modified variable</summary>
| Variable | Description | | Variable | Description |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|
| **<a id="var1" name="var1">var1</a>**<br/>~~`basic`~~ <ins>`standard`</ins> [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | First variable.<br/>**Choices**: <br/>&nbsp;val1<br/>&nbsp;val2 <ins>**← (default)**</ins> | | **<a id="var1" name="var1">var1</a>**<br/>~~`(None, ['basic'], ['standard'])`~~ [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | First variable.<br/>**Choices**: <br/>&nbsp;val1<br/>&nbsp;val2 <ins>**← (default)**</ins> |
</details> </details>

View file

@ -5,7 +5,7 @@
<tr><th>Variable </th><th>Description </th></tr> <tr><th>Variable </th><th>Description </th></tr>
</thead> </thead>
<tbody> <tbody>
<tr><td><b>var1</b><br/><mark><del>basic</del></mark> <mark><ins>standard</ins></mark> <mark><a href='https://rougail.readthedocs.io/en/latest/variable.html#variables-types'>choice</a></mark> <mark>standard</mark> <mark>mandatory</mark></td><td>First variable.<br/><b>Choices</b>: <ul><li>val1</li> <tr><td><b>var1</b><br/><mark><del>(None, ['basic'], ['standard'])</del></mark> <mark><a href='https://rougail.readthedocs.io/en/latest/variable.html#variables-types'>choice</a></mark> <mark>standard</mark> <mark>mandatory</mark></td><td>First variable.<br/><b>Choices</b>: <ul><li>val1</li>
<li>val2 <ins><b>← (default)</b></ins></li></ul> </td></tr> <li>val2 <ins><b>← (default)</b></ins></li></ul> </td></tr>
</tbody> </tbody>
</table> </table>

View file

@ -1,6 +1,6 @@
# Modified variable # Modified variable
| Variable | Description | | Variable | Description |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|
| **<a id="var1" name="var1">var1</a>**<br/>~~`basic`~~ <ins>`standard`</ins> [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | First variable.<br/>**Choices**: <br/>&nbsp;val1<br/>&nbsp;val2 <ins>**← (default)**</ins> | | **<a id="var1" name="var1">var1</a>**<br/>~~`(None, ['basic'], ['standard'])`~~ [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` `mandatory` | First variable.<br/>**Choices**: <br/>&nbsp;val1<br/>&nbsp;val2 <ins>**← (default)**</ins> |

View file

@ -4,8 +4,8 @@
 Variable  ┃ Description  ┃  Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
var1 │ First variable. │ var1 │ First variable. │
 basic   standard   choice   standardChoices: │  (None, ['basic'], ['standard'])    Choices: │
mandatory  │ • val1 │ choice   standard   mandatory  │ • val1 │
│ │ • val2 ← (default) │ │ │ • val2 ← (default) │
└───────────────────────────────────────┴──────────────────────────────────────┘ └───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -4,7 +4,7 @@
|==== |====
| Variable | Description | Variable | Description
| **var1** + | **var1** +
`+++basic+++` `#standard#` `+++mandatory+++` `https://rougail.readthedocs.io/en/latest/variable.html#variables-types[choice]` `standard` | First variable. + `+++(None, ['basic'], ['standard'])+++` `+++mandatory+++` `https://rougail.readthedocs.io/en/latest/variable.html#variables-types[choice]` `standard` | First variable. +
**Choices**: **Choices**:
* null +++← (default)+++ * null +++← (default)+++

View file

@ -1,8 +1,8 @@
<details><summary>Modified variable</summary> <details><summary>Modified variable</summary>
| Variable | Description | | Variable | Description |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------| |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------|
| **<a id="var1" name="var1">var1</a>**<br/>~~`basic`~~ <ins>`standard`</ins> ~~`mandatory`~~ [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` | First variable.<br/>**Choices**: <br/>&nbsp;null ~~← (default)~~<br/>&nbsp;val1<br/>&nbsp;val2 <ins>**← (default)**</ins> | | **<a id="var1" name="var1">var1</a>**<br/>~~`(None, ['basic'], ['standard'])`~~ ~~`mandatory`~~ [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` | First variable.<br/>**Choices**: <br/>&nbsp;null ~~← (default)~~<br/>&nbsp;val1<br/>&nbsp;val2 <ins>**← (default)**</ins> |
</details> </details>

View file

@ -5,7 +5,7 @@
<tr><th>Variable </th><th>Description </th></tr> <tr><th>Variable </th><th>Description </th></tr>
</thead> </thead>
<tbody> <tbody>
<tr><td><b>var1</b><br/><mark><del>basic</del></mark> <mark><ins>standard</ins></mark> <mark><del>mandatory</del></mark> <mark><a href='https://rougail.readthedocs.io/en/latest/variable.html#variables-types'>choice</a></mark> <mark>standard</mark></td><td>First variable.<br/><b>Choices</b>: <ul><li>null <del>← (default)</del></li> <tr><td><b>var1</b><br/><mark><del>(None, ['basic'], ['standard'])</del></mark> <mark><del>mandatory</del></mark> <mark><a href='https://rougail.readthedocs.io/en/latest/variable.html#variables-types'>choice</a></mark> <mark>standard</mark></td><td>First variable.<br/><b>Choices</b>: <ul><li>null <del>← (default)</del></li>
<li>val1</li> <li>val1</li>
<li>val2 <ins><b>← (default)</b></ins></li></ul> </td></tr> <li>val2 <ins><b>← (default)</b></ins></li></ul> </td></tr>
</tbody> </tbody>

View file

@ -1,6 +1,6 @@
# Modified variable # Modified variable
| Variable | Description | | Variable | Description |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------| |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------|
| **<a id="var1" name="var1">var1</a>**<br/>~~`basic`~~ <ins>`standard`</ins> ~~`mandatory`~~ [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` | First variable.<br/>**Choices**: <br/>&nbsp;null ~~← (default)~~<br/>&nbsp;val1<br/>&nbsp;val2 <ins>**← (default)**</ins> | | **<a id="var1" name="var1">var1</a>**<br/>~~`(None, ['basic'], ['standard'])`~~ ~~`mandatory`~~ [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `standard` | First variable.<br/>**Choices**: <br/>&nbsp;null ~~← (default)~~<br/>&nbsp;val1<br/>&nbsp;val2 <ins>**← (default)**</ins> |

View file

@ -4,8 +4,8 @@
 Variable  ┃ Description  ┃  Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
var1 │ First variable. │ var1 │ First variable. │
 basic   standard   mandatory    Choices: │  (None, ['basic'], ['standard'])    │ Choices: │
choice   standard  │ • null ← (default) │ mandatory   choice   standard  │ • null ← (default) │
│ │ • val1 │ │ │ • val1 │
│ │ • val2 ← (default) │ │ │ • val2 ← (default) │
└───────────────────────────────────────┴──────────────────────────────────────┘ └───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -3,7 +3,7 @@
| Variable | Description | Variable | Description
| **var2** + | **var2** +
`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `standard` `mandatory` | My var2. + `https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `standard` `mandatory` | My var2. +
**Default**: the value of an undocumented variable **Default**: depends on an undocumented variable
| **var3** + | **var3** +
`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `advanced` `mandatory` `__hidden__` | My var3. + `https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `advanced` `mandatory` `__hidden__` | My var3. +
**Hidden**: var could be hidden **Hidden**: var could be hidden

View file

@ -3,6 +3,6 @@
| Variable | Description | Variable | Description
| **var2** + | **var2** +
`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `standard` `mandatory` | My var2. + `https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `standard` `mandatory` | My var2. +
**Default**: the value of an undocumented variable **Default**: depends on an undocumented variable
|==== |====

View file

@ -1 +0,0 @@
{}

View file

@ -1,17 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "string"
}
}

View file

@ -1,6 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │
 string   basic   mandatory  │
└──────────────────────────────────────────────────────────────────────────────┘

View file

@ -1,9 +0,0 @@
New variable
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │
 string   basic   mandatory  │
└──────────────────────────────────────────────────────────────────────────────┘

View file

@ -1,18 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "string"
}
}

View file

@ -1,6 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 string   basic   mandatory  │ Internet. │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,9 +0,0 @@
Modified variable
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the  │
 string   basic   mandatory  │ Internet. │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,22 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "string"
}
}

View file

@ -1,7 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 string   standard   mandatory  │ Internet. │
│ │ Default: No proxy │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,10 +0,0 @@
Modified variable
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 basic   standard   string   standard │ Internet. │
mandatory  │ Default: No proxy │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,32 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
}
}

View file

@ -1,13 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,16 +0,0 @@
Modified variable
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for  │
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,32 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
}
}

View file

@ -1,13 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,32 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
}
}

View file

@ -1,13 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,72 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "string"
}
}
}
}
}
}

View file

@ -1,35 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘
Manual proxy configuration
▌ 🛈 Informations
▌ 
▌ Path: manual
▌  basic 
HTTP Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.http_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 string   basic   mandatory  │ │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,9 +0,0 @@
New variable
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 string   basic   mandatory  │ │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,76 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validator",
"values": "type domainname"
}
}
}
}
}
}
}

View file

@ -1,35 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘
Manual proxy configuration
▌ 🛈 Informations
▌ 
▌ Path: manual
▌  basic 
HTTP Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.http_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validator: type domainname │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,9 +0,0 @@
Modified variable
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validator: type domainname │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,79 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
}
}
}
}
}
}

View file

@ -1,37 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘
Manual proxy configuration
▌ 🛈 Informations
▌ 
▌ Path: manual
▌  basic 
HTTP Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.http_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,11 +0,0 @@
Modified variable
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,107 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.http_proxy.port",
"name": "port",
"description": "HTTP Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "8080"
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
}
}
}
}

View file

@ -1,47 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘
Manual proxy configuration
▌ 🛈 Informations
▌ 
▌ Path: manual
▌  basic 
HTTP Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.http_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.http_proxy.port │ HTTP Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,16 +0,0 @@
New variable
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.port │ HTTP Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,127 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.http_proxy.port",
"name": "port",
"description": "HTTP Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "8080"
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
},
"use_for_https": {
"path": "manual.use_for_https",
"name": "use_for_https",
"description": "Also use this proxy for HTTPS.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": true
},
"variable_type": "boolean"
}
}
}
}

View file

@ -1,53 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘
Manual proxy configuration
▌ 🛈 Informations
▌ 
▌ Path: manual
▌  basic 
HTTP Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.http_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.http_proxy.port │ HTTP Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
└───────────────────────────────────────┴──────────────────────────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.use_for_https │ Also use this proxy for HTTPS. │
 boolean   standard   mandatory  │ Default: true
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,9 +0,0 @@
New variable
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.use_for_https │ Also use this proxy for HTTPS. │
 boolean   standard   mandatory  │ Default: true
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,190 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.http_proxy.port",
"name": "port",
"description": "HTTP Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "8080"
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
},
"use_for_https": {
"path": "manual.use_for_https",
"name": "use_for_https",
"description": "Also use this proxy for HTTPS.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": true
},
"variable_type": "boolean"
},
"https_proxy": {
"type": "family",
"informations": {
"path": "manual.https_proxy",
"name": "https_proxy",
"description": "HTTPS Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.https_proxy.address",
"name": "address",
"description": "HTTPS address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.https_proxy.port",
"name": "port",
"description": "HTTPS Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "8080"
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
}
}
}
}

View file

@ -1,79 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘
Manual proxy configuration
▌ 🛈 Informations
▌ 
▌ Path: manual
▌  basic 
HTTP Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.http_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.http_proxy.port │ HTTP Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
└───────────────────────────────────────┴──────────────────────────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.use_for_https │ Also use this proxy for HTTPS. │
 boolean   standard   mandatory  │ Default: true
└───────────────────────────────────────┴──────────────────────────────────────┘
HTTPS Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.https_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.https_proxy.address │ HTTPS address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.https_proxy.port │ HTTPS Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,21 +0,0 @@
New variables
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.https_proxy.address │ HTTPS address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.https_proxy.port │ HTTPS Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,208 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.http_proxy.port",
"name": "port",
"description": "HTTP Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "8080"
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
},
"use_for_https": {
"path": "manual.use_for_https",
"name": "use_for_https",
"description": "Also use this proxy for HTTPS.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": true
},
"variable_type": "boolean"
},
"https_proxy": {
"type": "family",
"informations": {
"path": "manual.https_proxy",
"name": "https_proxy",
"description": "HTTPS Proxy",
"properties": [],
"mode": "standard"
},
"children": {
"address": {
"path": "manual.https_proxy.address",
"name": "address",
"description": "HTTPS address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.address",
"type": "variable"
},
"description": "HTTP address"
}
},
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.https_proxy.port",
"name": "port",
"description": "HTTPS Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.port",
"type": "variable"
},
"description": "HTTP Port"
}
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
}
}
}
}

View file

@ -1,82 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘
Manual proxy configuration
▌ 🛈 Informations
▌ 
▌ Path: manual
▌  basic 
HTTP Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.http_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.http_proxy.port │ HTTP Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
└───────────────────────────────────────┴──────────────────────────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.use_for_https │ Also use this proxy for HTTPS. │
 boolean   standard   mandatory  │ Default: true
└───────────────────────────────────────┴──────────────────────────────────────┘
HTTPS Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.https_proxy
▌  standard 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.https_proxy.address │ HTTPS address. │
 domainname   standard   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.address"
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.https_proxy.port │ HTTPS Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.port"
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,25 +0,0 @@
Modified variables
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.https_proxy.address │ HTTPS address. │
 basic   standard   domainname    │ Validators: │
standard   mandatory  │ • type domainname │
│ │ • the domain name can be an IP │
│ │ Default: the value of the variable  │
│ │ "manual.http_proxy.address" │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.https_proxy.port │ HTTPS Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080 │
│ │ the value of the variable  │
│ │ "manual.http_proxy.port" │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,32 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
}
}

View file

@ -1,13 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,9 +0,0 @@
Deleted variables
• manual.http_proxy.address
• manual.http_proxy.port
• manual.use_for_https
• manual.https_proxy.address
• manual.https_proxy.port

View file

@ -1,222 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [
{
"type": "property",
"name": "disabled",
"ori_name": "disabled",
"access_control": true,
"annotation": {
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
"path": {
"path": "proxy_mode"
},
"description": "Configure Proxy Access to the Internet"
}
}
],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.http_proxy.port",
"name": "port",
"description": "HTTP Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "8080"
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
},
"use_for_https": {
"path": "manual.use_for_https",
"name": "use_for_https",
"description": "Also use this proxy for HTTPS.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": true
},
"variable_type": "boolean"
},
"https_proxy": {
"type": "family",
"informations": {
"path": "manual.https_proxy",
"name": "https_proxy",
"description": "HTTPS Proxy",
"properties": [],
"mode": "standard"
},
"children": {
"address": {
"path": "manual.https_proxy.address",
"name": "address",
"description": "HTTPS address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.address",
"type": "variable"
},
"description": "HTTP address"
}
},
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.https_proxy.port",
"name": "port",
"description": "HTTPS Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.port",
"type": "variable"
},
"description": "HTTP Port"
}
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
}
}
}
}

View file

@ -1,84 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘
Manual proxy configuration
▌ 🛈 Informations
▌ 
▌ Path: manual
▌  basic   disabled 
▌ Disabled: when the variable "proxy_mode" hasn't the value "Manual proxy 
configuration"
HTTP Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.http_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.http_proxy.port │ HTTP Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
└───────────────────────────────────────┴──────────────────────────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.use_for_https │ Also use this proxy for HTTPS. │
 boolean   standard   mandatory  │ Default: true
└───────────────────────────────────────┴──────────────────────────────────────┘
HTTPS Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.https_proxy
▌  standard 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.https_proxy.address │ HTTPS address. │
 domainname   standard   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.address"
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.https_proxy.port │ HTTPS Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.port"
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,42 +0,0 @@
New variables
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.http_proxy.port │ HTTP Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.use_for_https │ Also use this proxy for HTTPS. │
 boolean   standard   mandatory  │ Default: true
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.https_proxy.address │ HTTPS address. │
 domainname   standard   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.address"
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.https_proxy.port │ HTTPS Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.port"
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,141 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [
{
"type": "property",
"name": "disabled",
"ori_name": "disabled",
"access_control": true,
"annotation": {
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
"path": {
"path": "proxy_mode"
},
"description": "Configure Proxy Access to the Internet"
}
}
],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.http_proxy.port",
"name": "port",
"description": "HTTP Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "8080"
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
},
"use_for_https": {
"path": "manual.use_for_https",
"name": "use_for_https",
"description": "Also use this proxy for HTTPS.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": true
},
"variable_type": "boolean"
}
}
}
}

View file

@ -1,55 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘
Manual proxy configuration
▌ 🛈 Informations
▌ 
▌ Path: manual
▌  basic   disabled 
▌ Disabled: when the variable "proxy_mode" hasn't the value "Manual proxy 
configuration"
HTTP Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.http_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.http_proxy.port │ HTTP Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
└───────────────────────────────────────┴──────────────────────────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.use_for_https │ Also use this proxy for HTTPS. │
 boolean   standard   mandatory  │ Default: true
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,6 +0,0 @@
Deleted variables
• manual.https_proxy.address
• manual.https_proxy.port

View file

@ -1,236 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [
{
"type": "property",
"name": "disabled",
"ori_name": "disabled",
"access_control": true,
"annotation": {
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
"path": {
"path": "proxy_mode"
},
"description": "Configure Proxy Access to the Internet"
}
}
],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.http_proxy.port",
"name": "port",
"description": "HTTP Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "8080"
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
},
"use_for_https": {
"path": "manual.use_for_https",
"name": "use_for_https",
"description": "Also use this proxy for HTTPS.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": true
},
"variable_type": "boolean"
},
"https_proxy": {
"type": "family",
"informations": {
"path": "manual.https_proxy",
"name": "https_proxy",
"description": "HTTPS Proxy",
"properties": [
{
"type": "property",
"name": "hidden",
"ori_name": "hidden",
"access_control": true,
"annotation": {
"message": "when the variable \"{0}\" has the value \"true\"",
"path": {
"path": "manual.use_for_https"
},
"description": "Also use this proxy for HTTPS"
}
}
],
"mode": "standard"
},
"children": {
"address": {
"path": "manual.https_proxy.address",
"name": "address",
"description": "HTTPS address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.address",
"type": "variable"
},
"description": "HTTP address"
}
},
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.https_proxy.port",
"name": "port",
"description": "HTTPS Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.port",
"type": "variable"
},
"description": "HTTP Port"
}
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
}
}
}
}

View file

@ -1,85 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘
Manual proxy configuration
▌ 🛈 Informations
▌ 
▌ Path: manual
▌  basic   disabled 
▌ Disabled: when the variable "proxy_mode" hasn't the value "Manual proxy 
configuration"
HTTP Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.http_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.http_proxy.port │ HTTP Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
└───────────────────────────────────────┴──────────────────────────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.use_for_https │ Also use this proxy for HTTPS. │
 boolean   standard   mandatory  │ Default: true
└───────────────────────────────────────┴──────────────────────────────────────┘
HTTPS Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.https_proxy
▌  standard   hidden 
▌ Hidden: when the variable "manual.use_for_https" has the value "true"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.https_proxy.address │ HTTPS address. │
 domainname   standard   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.address"
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.https_proxy.port │ HTTPS Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.port"
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,24 +0,0 @@
New variables
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.https_proxy.address │ HTTPS address. │
 domainname   standard   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.address"
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.https_proxy.port │ HTTPS Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.port"
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,267 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [
{
"type": "property",
"name": "disabled",
"ori_name": "disabled",
"access_control": true,
"annotation": {
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
"path": {
"path": "proxy_mode"
},
"description": "Configure Proxy Access to the Internet"
}
}
],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.http_proxy.port",
"name": "port",
"description": "HTTP Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "8080"
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
},
"use_for_https": {
"path": "manual.use_for_https",
"name": "use_for_https",
"description": "Also use this proxy for HTTPS.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": true
},
"variable_type": "boolean"
},
"{{ identifier }}_proxy": {
"type": "dynamic",
"informations": {
"path": "manual.{{ identifier }}_proxy",
"name": "{{ identifier }}_proxy",
"description": "{{ identifier }} Proxy",
"properties": [
{
"type": "property",
"name": "hidden",
"ori_name": "hidden",
"access_control": true,
"annotation": {
"message": "when the variable \"{0}\" has the value \"true\"",
"path": {
"path": "manual.use_for_https"
},
"description": "Also use this proxy for HTTPS"
}
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"help": [
"This family builds families dynamically"
],
"identifier": [
"HTTPS",
"SOCKS"
]
},
"children": {
"address": {
"path": "manual.{{ identifier }}_proxy.address",
"name": "address",
"description": "{{ identifier }} address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.address",
"type": "variable"
},
"description": "HTTP address"
}
},
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.{{ identifier }}_proxy.port",
"name": "port",
"description": "{{ identifier }} port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.port",
"type": "variable"
},
"description": "HTTP Port"
}
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
}
}
}
}

View file

@ -1,91 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘
Manual proxy configuration
▌ 🛈 Informations
▌ 
▌ Path: manual
▌  basic   disabled 
▌ Disabled: when the variable "proxy_mode" hasn't the value "Manual proxy 
configuration"
HTTP Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.http_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.http_proxy.port │ HTTP Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
└───────────────────────────────────────┴──────────────────────────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.use_for_https │ Also use this proxy for HTTPS. │
 boolean   standard   mandatory  │ Default: true
└───────────────────────────────────────┴──────────────────────────────────────┘
HTTPS Proxy or SOCKS Proxy
▌ 🛈 Informations
▌ 
▌ This family builds families dynamically.
▌ Path:
▌  • manual.https_proxy
▌  • manual.socks_proxy
▌  standard   hidden 
▌ Hidden: when the variable "manual.use_for_https" has the value "true"
▌ Identifiers:
▌  • HTTPS
▌  • SOCKS
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.https_proxy.address │ HTTPS or SOCKS address. │
manual.socks_proxy.address │ Validators: │
 domainname   standard   mandatory  │ • type domainname │
│ │ • the domain name can be an IP │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.address"
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.https_proxy.port │ HTTPS or SOCKS port. │
manual.socks_proxy.port │ Validators: │
 port   standard   mandatory  │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.port"
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,30 +0,0 @@
New variables
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.https_proxy.address │ HTTPS or SOCKS address. │
manual.socks_proxy.address │ Validators: │
 domainname   standard   mandatory  │ • type domainname │
│ │ • the domain name can be an IP │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.address"
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.https_proxy.port │ HTTPS or SOCKS port. │
manual.socks_proxy.port │ Validators: │
 port   standard   mandatory  │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.port"
└───────────────────────────────────────┴──────────────────────────────────────┘
Deleted variables
• manual.https_proxy.address
• manual.https_proxy.port

View file

@ -1,306 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [
{
"type": "property",
"name": "disabled",
"ori_name": "disabled",
"access_control": true,
"annotation": {
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
"path": {
"path": "proxy_mode"
},
"description": "Configure Proxy Access to the Internet"
}
}
],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.http_proxy.port",
"name": "port",
"description": "HTTP Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "8080"
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
},
"use_for_https": {
"path": "manual.use_for_https",
"name": "use_for_https",
"description": "Also use this proxy for HTTPS.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": true
},
"variable_type": "boolean"
},
"{{ identifier }}_proxy": {
"type": "dynamic",
"informations": {
"path": "manual.{{ identifier }}_proxy",
"name": "{{ identifier }}_proxy",
"description": "{{ identifier }} Proxy",
"properties": [
{
"type": "property",
"name": "hidden",
"ori_name": "hidden",
"access_control": true,
"annotation": {
"message": "when the variable \"{0}\" has the value \"true\"",
"path": {
"path": "manual.use_for_https"
},
"description": "Also use this proxy for HTTPS"
}
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"help": [
"This family builds families dynamically"
],
"identifier": [
"HTTPS",
"SOCKS"
]
},
"children": {
"address": {
"path": "manual.{{ identifier }}_proxy.address",
"name": "address",
"description": "{{ identifier }} address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.address",
"type": "variable"
},
"description": "HTTP address"
}
},
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.{{ identifier }}_proxy.port",
"name": "port",
"description": "{{ identifier }} port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.port",
"type": "variable"
},
"description": "HTTP Port"
}
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
},
"version": {
"path": "manual.{{ identifier }}_proxy.version",
"name": "version",
"description": "SOCKS host version used by proxy.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
},
{
"type": "property",
"name": "disabled",
"ori_name": "disabled",
"access_control": true,
"annotation": "when the identifier is \"HTTPS\""
}
],
"mode": "standard",
"identifiers": [
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": "v5"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"v4",
"v5"
]
}
}
}
}
}
}
}

View file

@ -1,98 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘
Manual proxy configuration
▌ 🛈 Informations
▌ 
▌ Path: manual
▌  basic   disabled 
▌ Disabled: when the variable "proxy_mode" hasn't the value "Manual proxy 
configuration"
HTTP Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.http_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.http_proxy.port │ HTTP Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
└───────────────────────────────────────┴──────────────────────────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.use_for_https │ Also use this proxy for HTTPS. │
 boolean   standard   mandatory  │ Default: true
└───────────────────────────────────────┴──────────────────────────────────────┘
HTTPS Proxy or SOCKS Proxy
▌ 🛈 Informations
▌ 
▌ This family builds families dynamically.
▌ Path:
▌  • manual.https_proxy
▌  • manual.socks_proxy
▌  standard   hidden 
▌ Hidden: when the variable "manual.use_for_https" has the value "true"
▌ Identifiers:
▌  • HTTPS
▌  • SOCKS
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.https_proxy.address │ HTTPS or SOCKS address. │
manual.socks_proxy.address │ Validators: │
 domainname   standard   mandatory  │ • type domainname │
│ │ • the domain name can be an IP │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.address"
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.https_proxy.port │ HTTPS or SOCKS port. │
manual.socks_proxy.port │ Validators: │
 port   standard   mandatory  │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.port"
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.socks_proxy.version │ SOCKS host version used by proxy. │
 choice   standard   mandatory    │ Choices: │
disabled  │ • v4 │
│ │ • v5 ← (default) │
│ │ Disabled: when the identifier is │
│ │ "HTTPS"
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,13 +0,0 @@
New variable
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.socks_proxy.version │ SOCKS host version used by proxy. │
 choice   standard   mandatory    │ Choices: │
disabled  │ • v4 │
│ │ • v5 ← (default) │
│ │ Disabled: when the identifier is │
│ │ "HTTPS"
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,300 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [
{
"type": "property",
"name": "disabled",
"ori_name": "disabled",
"access_control": true,
"annotation": {
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
"path": {
"path": "proxy_mode"
},
"description": "Configure Proxy Access to the Internet"
}
}
],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.http_proxy.port",
"name": "port",
"description": "HTTP Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "8080"
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
},
"use_for_https": {
"path": "manual.use_for_https",
"name": "use_for_https",
"description": "Also use this proxy for HTTPS.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": true
},
"variable_type": "boolean"
},
"{{ identifier }}_proxy": {
"type": "dynamic",
"informations": {
"path": "manual.{{ identifier }}_proxy",
"name": "{{ identifier }}_proxy",
"description": "{{ identifier }} Proxy",
"properties": [
{
"type": "property",
"name": "hidden",
"ori_name": "hidden",
"access_control": true,
"annotation": "depends on a calculation"
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"help": [
"This family builds families dynamically"
],
"identifier": [
"HTTPS",
"SOCKS"
]
},
"children": {
"address": {
"path": "manual.{{ identifier }}_proxy.address",
"name": "address",
"description": "{{ identifier }} address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.address",
"type": "variable"
},
"description": "HTTP address"
}
},
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.{{ identifier }}_proxy.port",
"name": "port",
"description": "{{ identifier }} port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.port",
"type": "variable"
},
"description": "HTTP Port"
}
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
},
"version": {
"path": "manual.{{ identifier }}_proxy.version",
"name": "version",
"description": "SOCKS host version used by proxy.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
},
{
"type": "property",
"name": "disabled",
"ori_name": "disabled",
"access_control": true,
"annotation": "when the identifier is \"HTTPS\""
}
],
"mode": "standard",
"identifiers": [
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": "v5"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"v4",
"v5"
]
}
}
}
}
}
}
}

View file

@ -1,98 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘
Manual proxy configuration
▌ 🛈 Informations
▌ 
▌ Path: manual
▌  basic   disabled 
▌ Disabled: when the variable "proxy_mode" hasn't the value "Manual proxy 
configuration"
HTTP Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.http_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.http_proxy.port │ HTTP Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
└───────────────────────────────────────┴──────────────────────────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.use_for_https │ Also use this proxy for HTTPS. │
 boolean   standard   mandatory  │ Default: true
└───────────────────────────────────────┴──────────────────────────────────────┘
HTTPS Proxy or SOCKS Proxy
▌ 🛈 Informations
▌ 
▌ This family builds families dynamically.
▌ Path:
▌  • manual.https_proxy
▌  • manual.socks_proxy
▌  standard   hidden 
▌ Hidden: depends on a calculation
▌ Identifiers:
▌  • HTTPS
▌  • SOCKS
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.https_proxy.address │ HTTPS or SOCKS address. │
manual.socks_proxy.address │ Validators: │
 domainname   standard   mandatory  │ • type domainname │
│ │ • the domain name can be an IP │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.address"
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.https_proxy.port │ HTTPS or SOCKS port. │
manual.socks_proxy.port │ Validators: │
 port   standard   mandatory  │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.port"
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.socks_proxy.version │ SOCKS host version used by proxy. │
 choice   standard   mandatory    │ Choices: │
disabled  │ • v4 │
│ │ • v5 ← (default) │
│ │ Disabled: when the identifier is │
│ │ "HTTPS"
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,308 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [
{
"type": "property",
"name": "disabled",
"ori_name": "disabled",
"access_control": true,
"annotation": {
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
"path": {
"path": "proxy_mode"
},
"description": "Configure Proxy Access to the Internet"
}
}
],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.http_proxy.port",
"name": "port",
"description": "HTTP Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "8080"
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
},
"use_for_https": {
"path": "manual.use_for_https",
"name": "use_for_https",
"description": "Also use this proxy for HTTPS.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": true
},
"variable_type": "boolean"
},
"{{ identifier }}_proxy": {
"type": "dynamic",
"informations": {
"path": "manual.{{ identifier }}_proxy",
"name": "{{ identifier }}_proxy",
"description": "{{ identifier }} Proxy",
"properties": [
{
"type": "property",
"name": "hidden",
"ori_name": "hidden",
"access_control": true,
"annotation": {
"description": "in HTTPS case if \"{0}\" is set to \"true\"",
"variables": [
{
"path": "manual.use_for_https",
"description": "Also use this proxy for HTTPS"
}
]
}
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"help": [
"This family builds families dynamically"
],
"identifier": [
"HTTPS",
"SOCKS"
]
},
"children": {
"address": {
"path": "manual.{{ identifier }}_proxy.address",
"name": "address",
"description": "{{ identifier }} address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.address",
"type": "variable"
},
"description": "HTTP address"
}
},
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.{{ identifier }}_proxy.port",
"name": "port",
"description": "{{ identifier }} port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.port",
"type": "variable"
},
"description": "HTTP Port"
}
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
},
"version": {
"path": "manual.{{ identifier }}_proxy.version",
"name": "version",
"description": "SOCKS host version used by proxy.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
},
{
"type": "property",
"name": "disabled",
"ori_name": "disabled",
"access_control": true,
"annotation": "when the identifier is \"HTTPS\""
}
],
"mode": "standard",
"identifiers": [
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": "v5"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"v4",
"v5"
]
}
}
}
}
}
}
}

View file

@ -1,98 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘
Manual proxy configuration
▌ 🛈 Informations
▌ 
▌ Path: manual
▌  basic   disabled 
▌ Disabled: when the variable "proxy_mode" hasn't the value "Manual proxy 
configuration"
HTTP Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.http_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.http_proxy.port │ HTTP Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
└───────────────────────────────────────┴──────────────────────────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.use_for_https │ Also use this proxy for HTTPS. │
 boolean   standard   mandatory  │ Default: true
└───────────────────────────────────────┴──────────────────────────────────────┘
HTTPS Proxy or SOCKS Proxy
▌ 🛈 Informations
▌ 
▌ This family builds families dynamically.
▌ Path:
▌  • manual.https_proxy
▌  • manual.socks_proxy
▌  standard   hidden 
▌ Hidden: in HTTPS case if "manual.use_for_https" is set to "true"
▌ Identifiers:
▌  • HTTPS
▌  • SOCKS
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.https_proxy.address │ HTTPS or SOCKS address. │
manual.socks_proxy.address │ Validators: │
 domainname   standard   mandatory  │ • type domainname │
│ │ • the domain name can be an IP │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.address"
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.https_proxy.port │ HTTPS or SOCKS port. │
manual.socks_proxy.port │ Validators: │
 port   standard   mandatory  │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.port"
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.socks_proxy.version │ SOCKS host version used by proxy. │
 choice   standard   mandatory    │ Choices: │
disabled  │ • v4 │
│ │ • v5 ← (default) │
│ │ Disabled: when the identifier is │
│ │ "HTTPS"
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,308 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [
{
"type": "property",
"name": "disabled",
"ori_name": "disabled",
"access_control": true,
"annotation": {
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
"path": {
"path": "proxy_mode"
},
"description": "Configure Proxy Access to the Internet"
}
}
],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.http_proxy.port",
"name": "port",
"description": "HTTP Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "8080"
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
},
"use_for_https": {
"path": "manual.use_for_https",
"name": "use_for_https",
"description": "Also use this proxy for HTTPS.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": true
},
"variable_type": "boolean"
},
"{{ identifier }}_proxy": {
"type": "dynamic",
"informations": {
"path": "manual.{{ identifier }}_proxy",
"name": "{{ identifier }}_proxy",
"description": "{{ identifier }} Proxy",
"properties": [
{
"type": "property",
"name": "hidden",
"ori_name": "hidden",
"access_control": true,
"annotation": {
"description": "in HTTPS case if \"{0}\" is set to \"true\"",
"variables": [
{
"path": "manual.use_for_https",
"description": "Also use this proxy for HTTPS"
}
]
}
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"help": [
"This family builds families dynamically"
],
"identifier": [
"HTTPS",
"SOCKS"
]
},
"children": {
"address": {
"path": "manual.{{ identifier }}_proxy.address",
"name": "address",
"description": "{{ identifier }} address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.address",
"type": "variable"
},
"description": "HTTP address"
}
},
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.{{ identifier }}_proxy.port",
"name": "port",
"description": "{{ identifier }} port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.port",
"type": "variable"
},
"description": "HTTP Port"
}
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
},
"version": {
"path": "manual.{{ identifier }}_proxy.version",
"name": "version",
"description": "SOCKS host version used by proxy.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
},
{
"type": "property",
"name": "disabled",
"ori_name": "disabled",
"access_control": true,
"annotation": "when the identifier is \"HTTPS\""
}
],
"mode": "standard",
"identifiers": [
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": "v5"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"v4",
"v5"
]
}
}
}
}
}
}
}

View file

@ -1,98 +0,0 @@
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
proxy_mode │ Configure Proxy Access to the │
 choice   standard   mandatory  │ Internet. │
│ │ Choices: │
│ │ • No proxy ← (default) │
│ │ • Auto-detect proxy settings for
│ │ this network │
│ │ • Use system proxy settings │
│ │ • Manual proxy configuration │
│ │ • Automatic proxy configuration URL │
└───────────────────────────────────────┴──────────────────────────────────────┘
Manual proxy configuration
▌ 🛈 Informations
▌ 
▌ Path: manual
▌  basic   disabled 
▌ Disabled: when the variable "proxy_mode" hasn't the value "Manual proxy 
configuration"
HTTP Proxy
▌ 🛈 Informations
▌ 
▌ Path: manual.http_proxy
▌  basic 
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.http_proxy.address │ HTTP address. │
 domainname   basic   mandatory  │ Validators: │
│ │ • type domainname │
│ │ • the domain name can be an IP │
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.http_proxy.port │ HTTP Port. │
 port   standard   mandatory  │ Validators: │
│ │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: 8080
└───────────────────────────────────────┴──────────────────────────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.use_for_https │ Also use this proxy for HTTPS. │
 boolean   standard   mandatory  │ Default: true
└───────────────────────────────────────┴──────────────────────────────────────┘
HTTPS Proxy or SOCKS Proxy
▌ 🛈 Informations
▌ 
▌ This family builds families dynamically.
▌ Path:
▌  • manual.https_proxy
▌  • manual.socks_proxy
▌  standard   hidden 
▌ Hidden: in HTTPS case if "manual.use_for_https" is set to "true"
▌ Identifiers:
▌  • HTTPS
▌  • SOCKS
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 Variable  ┃ Description  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
manual.https_proxy.address │ HTTPS or SOCKS address. │
manual.socks_proxy.address │ Validators: │
 domainname   standard   mandatory  │ • type domainname │
│ │ • the domain name can be an IP │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.address"
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.https_proxy.port │ HTTPS or SOCKS port. │
manual.socks_proxy.port │ Validators: │
 port   standard   mandatory  │ • well-known ports (1 to 1023) are │
│ │ allowed │
│ │ • registred ports (1024 to 49151)
│ │ are allowed │
│ │ • private ports (greater than 49152)
│ │ are allowed │
│ │ Default: the value of the variable │
│ │ "manual.http_proxy.port"
├───────────────────────────────────────┼──────────────────────────────────────┤
manual.socks_proxy.version │ SOCKS host version used by proxy. │
 choice   standard   mandatory    │ Choices: │
disabled  │ • v4 │
│ │ • v5 ← (default) │
│ │ Disabled: when the identifier is │
│ │ "HTTPS"
└───────────────────────────────────────┴──────────────────────────────────────┘

View file

@ -1,308 +0,0 @@
{
"proxy_mode": {
"path": "proxy_mode",
"name": "proxy_mode",
"description": "Configure Proxy Access to the Internet.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "No proxy"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"No proxy",
"Auto-detect proxy settings for this network",
"Use system proxy settings",
"Manual proxy configuration",
"Automatic proxy configuration URL"
]
}
},
"manual": {
"type": "family",
"informations": {
"path": "manual",
"name": "manual",
"description": "Manual proxy configuration",
"properties": [
{
"type": "property",
"name": "disabled",
"ori_name": "disabled",
"access_control": true,
"annotation": {
"message": "when the variable \"{0}\" hasn't the value \"Manual proxy configuration\"",
"path": {
"path": "proxy_mode"
},
"description": "Configure Proxy Access to the Internet"
}
}
],
"mode": "basic"
},
"children": {
"http_proxy": {
"type": "family",
"informations": {
"path": "manual.http_proxy",
"name": "http_proxy",
"description": "HTTP Proxy",
"properties": [],
"mode": "basic"
},
"children": {
"address": {
"path": "manual.http_proxy.address",
"name": "address",
"description": "HTTP address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "basic",
"type": "variable",
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.http_proxy.port",
"name": "port",
"description": "HTTP Port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": "8080"
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
}
}
},
"use_for_https": {
"path": "manual.use_for_https",
"name": "use_for_https",
"description": "Also use this proxy for HTTPS.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"type": "variable",
"default": {
"name": "Default",
"values": true
},
"variable_type": "boolean"
},
"{{ identifier }}_proxy": {
"type": "dynamic",
"informations": {
"path": "manual.{{ identifier }}_proxy",
"name": "{{ identifier }}_proxy",
"description": "{{ identifier }} Proxy",
"properties": [
{
"type": "property",
"name": "hidden",
"ori_name": "hidden",
"access_control": true,
"annotation": {
"description": "in HTTPS case if \"{0}\" is set to \"true\"",
"variables": [
{
"path": "manual.use_for_https",
"description": "Also use this proxy for HTTPS"
}
]
}
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"help": [
"This family builds families dynamically"
],
"identifier": [
"HTTPS",
"SOCKS"
]
},
"children": {
"address": {
"path": "manual.{{ identifier }}_proxy.address",
"name": "address",
"description": "{{ identifier }} address.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.address",
"type": "variable"
},
"description": "HTTP address"
}
},
"variable_type": "domainname",
"validators": {
"name": "Validators",
"values": [
"type domainname",
"the domain name can be an IP"
]
}
},
"port": {
"path": "manual.{{ identifier }}_proxy.port",
"name": "port",
"description": "{{ identifier }} port.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
}
],
"mode": "standard",
"identifiers": [
[
"HTTPS"
],
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": {
"message": "the value of the variable \"{0}\"",
"path": {
"path": "manual.http_proxy.port",
"type": "variable"
},
"description": "HTTP Port"
}
},
"variable_type": "port",
"validators": {
"name": "Validators",
"values": [
"well-known ports (1 to 1023) are allowed",
"registred ports (1024 to 49151) are allowed",
"private ports (greater than 49152) are allowed"
]
}
},
"version": {
"path": "manual.{{ identifier }}_proxy.version",
"name": "version",
"description": "SOCKS host version used by proxy.",
"properties": [
{
"type": "property",
"name": "mandatory",
"ori_name": "mandatory",
"access_control": false
},
{
"type": "property",
"name": "disabled",
"ori_name": "disabled",
"access_control": true,
"annotation": "when the identifier is \"HTTPS\""
}
],
"mode": "standard",
"identifiers": [
[
"SOCKS"
]
],
"type": "variable",
"default": {
"name": "Default",
"values": "v5"
},
"variable_type": "choice",
"choices": {
"name": "Choices",
"values": [
"v4",
"v5"
]
}
}
}
}
}
}
}

Some files were not shown because too many files have changed in this diff Show more