Compare commits
No commits in common. "0.2.0a35" and "main" have entirely different histories.
47 changed files with 66 additions and 1342 deletions
239
CHANGELOG.md
239
CHANGELOG.md
|
|
@ -1,242 +1,3 @@
|
|||
## 0.2.0a35 (2025-12-22)
|
||||
|
||||
### Fix
|
||||
|
||||
- documentation
|
||||
|
||||
## 0.2.0a34 (2025-12-22)
|
||||
|
||||
### Feat
|
||||
|
||||
- multi rougailcli.yml files
|
||||
|
||||
### Fix
|
||||
|
||||
- user_datas => user_data
|
||||
|
||||
## 0.2.0a33 (2025-11-21)
|
||||
|
||||
### Feat
|
||||
|
||||
- add inaccessible_read_write_modes and inaccessible_modes options
|
||||
|
||||
## 0.2.0a32 (2025-11-08)
|
||||
|
||||
### Fix
|
||||
|
||||
- execute interactive mode too
|
||||
|
||||
## 0.2.0a31 (2025-11-07)
|
||||
|
||||
### Fix
|
||||
|
||||
- better layers support
|
||||
|
||||
## 0.2.0a30 (2025-11-07)
|
||||
|
||||
### Feat
|
||||
|
||||
- layers information is send to output
|
||||
|
||||
## 0.2.0a29 (2025-11-06)
|
||||
|
||||
### Feat
|
||||
|
||||
- choice if invalid value or unknown variable in user data is a fatal error or not
|
||||
|
||||
## 0.2.0a28 (2025-11-03)
|
||||
|
||||
### Feat
|
||||
|
||||
- support layers
|
||||
|
||||
### Fix
|
||||
|
||||
- do not display full help to early
|
||||
|
||||
## 0.2.0a27 (2025-10-31)
|
||||
|
||||
### Fix
|
||||
|
||||
- remove all warnings!
|
||||
- update tests with new output_doc module
|
||||
|
||||
## 0.2.0a26 (2025-10-29)
|
||||
|
||||
### Fix
|
||||
|
||||
- add default option for environment user datas
|
||||
|
||||
## 0.2.0a25 (2025-10-27)
|
||||
|
||||
### Feat
|
||||
|
||||
- can use .rougailcli.yml, env variable or command line argument from own script
|
||||
|
||||
## 0.2.0a24 (2025-10-10)
|
||||
|
||||
### Feat
|
||||
|
||||
- use rougail-user-data-commandline and mix config use data
|
||||
|
||||
### Fix
|
||||
|
||||
- remove force_apply_user_data support
|
||||
|
||||
## 0.2.0a23 (2025-10-03)
|
||||
|
||||
### Fix
|
||||
|
||||
- config in read_only mode is asked
|
||||
|
||||
## 0.2.0a22 (2025-10-02)
|
||||
|
||||
### Feat
|
||||
|
||||
- limit warning when asked
|
||||
|
||||
## 0.2.0a21 (2025-09-29)
|
||||
|
||||
### Feat
|
||||
|
||||
- add cli.read_write option
|
||||
|
||||
## 0.2.0a20 (2025-09-22)
|
||||
|
||||
### Fix
|
||||
|
||||
- dictionary => structure
|
||||
|
||||
## 0.2.0a19 (2025-09-03)
|
||||
|
||||
### Fix
|
||||
|
||||
- do now set modified option in second round
|
||||
|
||||
## 0.2.0a18 (2025-05-14)
|
||||
|
||||
### Feat
|
||||
|
||||
- able to lad config_file name from environement variable
|
||||
- loads user datas before and after cli params
|
||||
|
||||
## 0.2.0a17 (2025-05-12)
|
||||
|
||||
### Fix
|
||||
|
||||
- upgrade translation
|
||||
- black
|
||||
|
||||
## 0.2.0a16 (2025-05-09)
|
||||
|
||||
### Fix
|
||||
|
||||
- description
|
||||
|
||||
## 0.2.0a15 (2025-05-05)
|
||||
|
||||
### Fix
|
||||
|
||||
- do not raise if warning in cli
|
||||
|
||||
## 0.2.0a14 (2025-05-02)
|
||||
|
||||
### Fix
|
||||
|
||||
- do not force use_data usage
|
||||
|
||||
## 0.2.0a13 (2025-04-30)
|
||||
|
||||
### Fix
|
||||
|
||||
- add first test + remove add_extra_options option in tiramisu-cmdline-parser
|
||||
- remove negative_description support
|
||||
- display user-data instead of user_data in version
|
||||
|
||||
## 0.2.0a12 (2025-04-09)
|
||||
|
||||
### Fix
|
||||
|
||||
- version
|
||||
|
||||
## 0.2.0a11 (2025-03-31)
|
||||
|
||||
### Fix
|
||||
|
||||
- translation
|
||||
|
||||
## 0.2.0a10 (2025-03-31)
|
||||
|
||||
### Fix
|
||||
|
||||
- access to cli.config_file variable with commandline
|
||||
|
||||
## 0.2.0a9 (2025-03-31)
|
||||
|
||||
### Feat
|
||||
|
||||
- cli loads .rougailcli.yml file
|
||||
|
||||
## 0.2.0a8 (2025-02-17)
|
||||
|
||||
### Fix
|
||||
|
||||
- add config.py file
|
||||
|
||||
## 0.2.0a7 (2025-02-17)
|
||||
|
||||
### Fix
|
||||
|
||||
- better error support
|
||||
|
||||
## 0.2.0a6 (2025-02-10)
|
||||
|
||||
### Feat
|
||||
|
||||
- return 1 if output has problems
|
||||
|
||||
## 0.2.0a5 (2025-02-05)
|
||||
|
||||
### Feat
|
||||
|
||||
- user_data can be loaded after other plugins
|
||||
|
||||
## 0.2.0a4 (2025-01-04)
|
||||
|
||||
### Fix
|
||||
|
||||
- add and remove not_for_commandline property
|
||||
|
||||
## 0.2.0a3 (2025-01-04)
|
||||
|
||||
### Fix
|
||||
|
||||
- remove upgrade feature (now in formatter project) + better support of not_for_commandline feature
|
||||
|
||||
## 0.2.0a2 (2024-12-11)
|
||||
|
||||
### Fix
|
||||
|
||||
- user_data and output are not plugins
|
||||
|
||||
## 0.2.0a1 (2024-11-28)
|
||||
|
||||
### Fix
|
||||
|
||||
- separation between run and print function
|
||||
|
||||
## 0.2.0a0 (2024-11-27)
|
||||
|
||||
### Feat
|
||||
|
||||
- load config from environment if rougail-user-data-environment is installed
|
||||
|
||||
### Fix
|
||||
|
||||
- translation is not mandatory
|
||||
|
||||
## 0.1.1 (2024-11-06)
|
||||
|
||||
## 0.1.1rc0 (2024-11-06)
|
||||
|
||||
### Fix
|
||||
|
|
|
|||
27
README.fr.md
27
README.fr.md
|
|
@ -1,27 +0,0 @@
|
|||
---
|
||||
gitea: none
|
||||
include_toc: true
|
||||
---
|
||||
[🇬🇧 (EN)](README.md) - [🇫🇷 (FR)](README.fr.md)
|
||||
|
||||
## Options de la ligne de commande
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> **Chemin** : cli
|
||||
|
||||
| Variable | Description | Valeur par défaut | Type | Contrôle des accès | Validateur |
|
||||
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------|------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|
|
||||
| **<a id="cli.config_file" name="cli.config_file">cli.config_file</a>**<br/>**Variable d'environnement** : CLI.CONFIG_FILE | Charger les paramètres de la ligne de commande depuis un fichier. | • .rougailcli.yml | [`UNIX filename`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | | • le nom de fichier peut être une chemin relatif<br/>• type de fichier autorisé: "fichier" et "répertoire". |
|
||||
| **<a id="cli.debug" name="cli.debug">cli.debug</a>**<br/>**Ligne de commande** : <br/>• --cli.debug<br/>• --cli.no-debug<br/>**Variable d'environnement** : CLI.DEBUG | Afficher les informations de debug. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | | |
|
||||
| **<a id="cli.warnings" name="cli.warnings">cli.warnings</a>**<br/>**Ligne de commande** : <br/>• --cli.warnings<br/>• --cli.no-warnings<br/>**Variable d'environnement** : CLI.WARNINGS | Afficher les avertissements de chargement des options de la ligne de commande. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | | |
|
||||
| **<a id="cli.versions" name="cli.versions">cli.versions</a>**<br/>**Ligne de commande** : <br/>• --cli.versions<br/>• --cli.no-versions<br/>**Variable d'environnement** : CLI.VERSIONS | Afficher la version de Rougail et de tous ces composants. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | | |
|
||||
| **<a id="cli.invalid_user_data_error" name="cli.invalid_user_data_error">cli.invalid_user_data_error</a>**<br/>**Ligne de commande** : <br/>• --cli.invalid_user_data_error<br/>• --cli.no-invalid_user_data_error<br/>**Variable d'environnement** : CLI.INVALID_USER_DATA_ERROR | Les valeurs invalides dans les données utilisateur ne sont pas autorisées. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | | |
|
||||
| **<a id="cli.unknown_user_data_error" name="cli.unknown_user_data_error">cli.unknown_user_data_error</a>**<br/>**Ligne de commande** : <br/>• --cli.unknown_user_data_error<br/>• --cli.no-unknown_user_data_error<br/>**Variable d'environnement** : CLI.UNKNOWN_USER_DATA_ERROR | Les variables inconnues dans les données utilisateur ne sont pas autorisées. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | | |
|
||||
| **<a id="cli.layers" name="cli.layers">cli.layers</a>**<br/>**Ligne de commande** : <br/>• --cli.layers<br/>• --cli.no-layers<br/>**Variable d'environnement** : CLI.LAYERS | Charger chaque données utilisateurs dans des couches séparées. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | *`cachée`*<br/>**Cachée** : si seulement un type de données utilisateur est renseigné dans "[Sélection pour données utilisateur](#step.user_data)" | |
|
||||
| **<a id="cli.read_write" name="cli.read_write">cli.read_write</a>**<br/>**Ligne de commande** : <br/>• --cli.read_write<br/>• --cli.no-read_write<br/>**Variable d'environnement** : CLI.READ_WRITE | La configuration dans l'état de sortie est dans mode lecture-écriture. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | | |
|
||||
| **<a id="cli.description_type" name="cli.description_type">cli.description_type</a>**<br/>**Ligne de commande** : --cli.description_type<br/>**Variable d'environnement** : CLI.DESCRIPTION_TYPE | Type de description des variables.<br/>Pour identifier les différentes variables, on utilise la description de la variable. Il y a quatre type de descriptions:<br/>- name_and_description : qui contient le nom de la variable suivi de sa description - path : le chemin de la variable - name : le nom de la variable - description : la description de la variable. | description | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | | **Choix** : <br/>• name_and_description<br/>• path<br/>• name<br/>• description |
|
||||
| **<a id="cli.inaccessible_read_write_modes" name="cli.inaccessible_read_write_modes">cli.inaccessible_read_write_modes</a>**<br/>**Ligne de commande** : --cli.inaccessible_read_write_modes<br/>**Variable d'environnement** : CLI.INACCESSIBLE_READ_WRITE_MODES | Modes quoi doivent être inaccessible en mode lecture-écriture. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | *`désactivé`*<br/>**Désactivé** : si aucun mode n'est défini dans "[Tous les niveaux de modes valides](#modes_level)" | `unique`<br/>Un mode doit exister dans "[Tous les niveaux de modes valides](#modes_level)". |
|
||||
| **<a id="cli.inaccessible_modes" name="cli.inaccessible_modes">cli.inaccessible_modes</a>**<br/>**Ligne de commande** : --cli.inaccessible_modes<br/>**Variable d'environnement** : CLI.INACCESSIBLE_MODES | Modes quoi doivent être inaccessible. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | *`désactivé`*<br/>**Désactivé** : si aucun mode n'est défini dans "[Tous les niveaux de modes valides](#modes_level)" | `unique`<br/>Un mode doit exister dans "[Tous les niveaux de modes valides](#modes_level)". |
|
||||
|
||||
|
||||
27
README.md
27
README.md
|
|
@ -1,27 +1,2 @@
|
|||
---
|
||||
gitea: none
|
||||
include_toc: true
|
||||
---
|
||||
[🇬🇧 (EN)](README.md) - [🇫🇷 (FR)](README.fr.md)
|
||||
|
||||
## Command line options
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> **Path**: cli
|
||||
|
||||
| Variable | Description | Default value | Type | Access control | Validator |
|
||||
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------|------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|
|
||||
| **<a id="cli.config_file" name="cli.config_file">cli.config_file</a>**<br/>**Environment variable**: CLI.CONFIG_FILE | Loads command line parameters from a file. | • .rougailcli.yml | [`UNIX filename`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | | • this filename could be a relative path<br/>• file type allowed: "directory" and "file". |
|
||||
| **<a id="cli.debug" name="cli.debug">cli.debug</a>**<br/>**Command line**: <br/>• --cli.debug<br/>• --cli.no-debug<br/>**Environment variable**: CLI.DEBUG | Displays debug informations. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | | |
|
||||
| **<a id="cli.warnings" name="cli.warnings">cli.warnings</a>**<br/>**Command line**: <br/>• --cli.warnings<br/>• --cli.no-warnings<br/>**Environment variable**: CLI.WARNINGS | Displays command line option warnings informations. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | | |
|
||||
| **<a id="cli.versions" name="cli.versions">cli.versions</a>**<br/>**Command line**: <br/>• --cli.versions<br/>• --cli.no-versions<br/>**Environment variable**: CLI.VERSIONS | Displays Rougail version and all its components. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | | |
|
||||
| **<a id="cli.invalid_user_data_error" name="cli.invalid_user_data_error">cli.invalid_user_data_error</a>**<br/>**Command line**: <br/>• --cli.invalid_user_data_error<br/>• --cli.no-invalid_user_data_error<br/>**Environment variable**: CLI.INVALID_USER_DATA_ERROR | Invalid value in user data is not allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | | |
|
||||
| **<a id="cli.unknown_user_data_error" name="cli.unknown_user_data_error">cli.unknown_user_data_error</a>**<br/>**Command line**: <br/>• --cli.unknown_user_data_error<br/>• --cli.no-unknown_user_data_error<br/>**Environment variable**: CLI.UNKNOWN_USER_DATA_ERROR | Unknown variable in user data is not allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | | |
|
||||
| **<a id="cli.layers" name="cli.layers">cli.layers</a>**<br/>**Command line**: <br/>• --cli.layers<br/>• --cli.no-layers<br/>**Environment variable**: CLI.LAYERS | Open each user data in separate layers. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | *`hidden`*<br/>**Hidden**: if only one user data is set in "[Select for user datas](#step.user_data)" | |
|
||||
| **<a id="cli.read_write" name="cli.read_write">cli.read_write</a>**<br/>**Command line**: <br/>• --cli.read_write<br/>• --cli.no-read_write<br/>**Environment variable**: CLI.READ_WRITE | Configuration in output step is in read_write mode. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | | |
|
||||
| **<a id="cli.description_type" name="cli.description_type">cli.description_type</a>**<br/>**Command line**: --cli.description_type<br/>**Environment variable**: CLI.DESCRIPTION_TYPE | Type of variables description.<br/>To identify different variables, we use the variable description. There are four types of description:<br/>- name_and_description: which contains the variable name followed by its description - path: the variable's path - name: the variable name - description: the variable's description. | description | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | | **Choices**: <br/>• name_and_description<br/>• path<br/>• name<br/>• description |
|
||||
| **<a id="cli.inaccessible_read_write_modes" name="cli.inaccessible_read_write_modes">cli.inaccessible_read_write_modes</a>**<br/>**Command line**: --cli.inaccessible_read_write_modes<br/>**Environment variable**: CLI.INACCESSIBLE_READ_WRITE_MODES | Modes that should not be accessible in read_write mode. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | *`disabled`*<br/>**Disabled**: if any mode is set in "[All modes level available](#modes_level)" | `unique`<br/>Mode must exists in "[All modes level available](#modes_level)". |
|
||||
| **<a id="cli.inaccessible_modes" name="cli.inaccessible_modes">cli.inaccessible_modes</a>**<br/>**Command line**: --cli.inaccessible_modes<br/>**Environment variable**: CLI.INACCESSIBLE_MODES | Modes that should not be accessible. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | *`disabled`*<br/>**Disabled**: if any mode is set in "[All modes level available](#modes_level)" | `unique`<br/>Mode must exists in "[All modes level available](#modes_level)". |
|
||||
|
||||
# rougail-cli
|
||||
|
||||
|
|
|
|||
BIN
locale/fr/LC_MESSAGES/rougail_cli.mo
Normal file
BIN
locale/fr/LC_MESSAGES/rougail_cli.mo
Normal file
Binary file not shown.
|
|
@ -5,8 +5,8 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: 2025-12-22 15:24+0100\n"
|
||||
"PO-Revision-Date: 2025-12-22 15:28+0100\n"
|
||||
"POT-Creation-Date: 2024-10-31 09:57+0100\n"
|
||||
"PO-Revision-Date: 2024-10-31 10:00+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: fr\n"
|
||||
|
|
@ -14,115 +14,16 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"X-Generator: Poedit 3.8\n"
|
||||
"X-Generator: Poedit 3.5\n"
|
||||
|
||||
#: src/rougail/cli/__main__.py:237
|
||||
#: src/rougail/cli/__main__.py:43
|
||||
msgid "cannot find \"user_data\" module \"{0}\""
|
||||
msgstr "ne peut trouve le module \"user_data\" \"{0}\""
|
||||
|
||||
#: src/rougail/cli/__main__.py:245
|
||||
msgid ""
|
||||
"interactive user data \"{0}\" is loader before uninteractive user data "
|
||||
"\"{1}\""
|
||||
msgstr ""
|
||||
"Les données utilisateur interactifs \"{0}\" sont chargées avant les données "
|
||||
"utilisateur non interactif \"{1}\""
|
||||
|
||||
#: src/rougail/cli/__main__.py:281
|
||||
#: src/rougail/cli/__main__.py:56
|
||||
msgid "cannot find cli file for \"output_name\" module \"{0}\""
|
||||
msgstr "ne peut trouve le fichier cli pour le module \"output_name\" \"{0}\""
|
||||
|
||||
#: src/rougail/cli/__main__.py:306
|
||||
#: src/rougail/cli/__main__.py:69
|
||||
msgid "ERROR: {0}"
|
||||
msgstr "ERREUR : {0}"
|
||||
|
||||
#: src/rougail/cli/config.py:28
|
||||
msgid "Command line options"
|
||||
msgstr "Options de la ligne de commande"
|
||||
|
||||
#: src/rougail/cli/config.py:31
|
||||
msgid "Loads command line parameters from a file"
|
||||
msgstr "Charger les paramètres de la ligne de commande depuis un fichier"
|
||||
|
||||
#: src/rougail/cli/config.py:39
|
||||
msgid "Displays debug informations"
|
||||
msgstr "Afficher les informations de debug"
|
||||
|
||||
#: src/rougail/cli/config.py:41
|
||||
msgid "Displays command line option warnings informations"
|
||||
msgstr ""
|
||||
"Afficher les avertissements de chargement des options de la ligne de commande"
|
||||
|
||||
#: src/rougail/cli/config.py:43
|
||||
msgid "Displays Rougail version and all its components"
|
||||
msgstr "Afficher la version de Rougail et de tous ces composants"
|
||||
|
||||
#: src/rougail/cli/config.py:45
|
||||
msgid "Invalid value in user data is not allowed"
|
||||
msgstr ""
|
||||
"Les valeurs invalides dans les données utilisateur ne sont pas autorisées"
|
||||
|
||||
#: src/rougail/cli/config.py:47
|
||||
msgid "Unknown variable in user data is not allowed"
|
||||
msgstr ""
|
||||
"Les variables inconnues dans les données utilisateur ne sont pas autorisées"
|
||||
|
||||
#: src/rougail/cli/config.py:50
|
||||
msgid "Open each user data in separate layers"
|
||||
msgstr "Charger chaque données utilisateurs dans des couches séparées"
|
||||
|
||||
#: src/rougail/cli/config.py:56
|
||||
msgid "if only one user data is set in \"__.step.user_data\""
|
||||
msgstr ""
|
||||
"si seulement un type de données utilisateur est renseigné dans "
|
||||
"\"__.step.user_data\""
|
||||
|
||||
#: src/rougail/cli/config.py:62
|
||||
msgid "Configuration in output step is in read_write mode"
|
||||
msgstr "La configuration dans l'état de sortie est dans mode lecture-écriture"
|
||||
|
||||
#: src/rougail/cli/config.py:65
|
||||
msgid "Type of variables description"
|
||||
msgstr "Type de description des variables"
|
||||
|
||||
#: src/rougail/cli/config.py:67
|
||||
msgid ""
|
||||
"To identify different variables, we use the variable description. There are "
|
||||
"four types of description:\n"
|
||||
"\n"
|
||||
" - name_and_description: which contains the variable name followed by "
|
||||
"its description\n"
|
||||
" - path: the variable's path\n"
|
||||
" - name: the variable name\n"
|
||||
" - description: the variable's description"
|
||||
msgstr ""
|
||||
"Pour identifier les différentes variables, on utilise la description de la "
|
||||
"variable. Il y a quatre type de descriptions:\n"
|
||||
"\n"
|
||||
" - name_and_description : qui contient le nom de la variable suivi de sa "
|
||||
"description\n"
|
||||
" - path : le chemin de la variable\n"
|
||||
" - name : le nom de la variable\n"
|
||||
" - description : la description de la variable"
|
||||
|
||||
#: src/rougail/cli/config.py:81
|
||||
msgid "Modes that should not be accessible in read_write mode"
|
||||
msgstr "Modes quoi doivent être inaccessible en mode lecture-écriture"
|
||||
|
||||
#: src/rougail/cli/config.py:88 src/rougail/cli/config.py:105
|
||||
msgid "if any mode is set in \"modes_level\""
|
||||
msgstr "si aucun mode n'est défini dans \"modes_level\""
|
||||
|
||||
#: src/rougail/cli/config.py:95 src/rougail/cli/config.py:112
|
||||
msgid "mode must exists in \"modes_level\""
|
||||
msgstr "un mode doit exister dans \"modes_level\""
|
||||
|
||||
#: src/rougail/cli/config.py:98
|
||||
msgid "Modes that should not be accessible"
|
||||
msgstr "Modes quoi doivent être inaccessible"
|
||||
|
||||
#~ msgid "do not display debug informations"
|
||||
#~ msgstr "ne pas afficher les informations de debug"
|
||||
|
||||
#~ msgid "do not display rougail version and all componants"
|
||||
#~ msgstr "ne pas afficher la version de rougail et de tous ces composants"
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2025-12-22 15:31+0100\n"
|
||||
"POT-Creation-Date: 2024-10-31 19:17+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
|
@ -15,89 +15,15 @@ msgstr ""
|
|||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: src/rougail/cli/__main__.py:237
|
||||
#: src/rougail/cli/__main__.py:63
|
||||
msgid "cannot find \"user_data\" module \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/__main__.py:245
|
||||
msgid "interactive user data \"{0}\" is loader before uninteractive user data \"{1}\""
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/__main__.py:281
|
||||
#: src/rougail/cli/__main__.py:76
|
||||
msgid "cannot find cli file for \"output_name\" module \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/__main__.py:306
|
||||
#: src/rougail/cli/__main__.py:89
|
||||
msgid "ERROR: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:28
|
||||
msgid "Command line options"
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:31
|
||||
msgid "Loads command line parameters from a file"
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:39
|
||||
msgid "Displays debug informations"
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:41
|
||||
msgid "Displays command line option warnings informations"
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:43
|
||||
msgid "Displays Rougail version and all its components"
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:45
|
||||
msgid "Invalid value in user data is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:47
|
||||
msgid "Unknown variable in user data is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:50
|
||||
msgid "Open each user data in separate layers"
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:56
|
||||
msgid "if only one user data is set in \"__.step.user_data\""
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:62
|
||||
msgid "Configuration in output step is in read_write mode"
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:65
|
||||
msgid "Type of variables description"
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:67
|
||||
msgid ""
|
||||
"To identify different variables, we use the variable description. There are four types of description:\n"
|
||||
"\n"
|
||||
" - name_and_description: which contains the variable name followed by its description\n"
|
||||
" - path: the variable's path\n"
|
||||
" - name: the variable name\n"
|
||||
" - description: the variable's description"
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:81
|
||||
msgid "Modes that should not be accessible in read_write mode"
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:88 src/rougail/cli/config.py:105
|
||||
msgid "if any mode is set in \"modes_level\""
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:95 src/rougail/cli/config.py:112
|
||||
msgid "mode must exists in \"modes_level\""
|
||||
msgstr ""
|
||||
|
||||
#: src/rougail/cli/config.py:98
|
||||
msgid "Modes that should not be accessible"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ requires = ["flit_core >=3.8.0,<4"]
|
|||
|
||||
[project]
|
||||
name = "rougail.cli"
|
||||
version = "0.2.0a35"
|
||||
version = "0.1.1"
|
||||
authors = [{name = "Emmanuel Garette", email = "gnunux@gnunux.info"}]
|
||||
readme = "README.md"
|
||||
description = "CLI for Rougail"
|
||||
|
|
@ -13,10 +13,11 @@ license = {file = "LICENSE"}
|
|||
classifiers = [
|
||||
"License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)",
|
||||
"Programming Language :: Python",
|
||||
"Programming Language :: Python :: 3.8",
|
||||
"Programming Language :: Python :: 3.9",
|
||||
"Programming Language :: Python :: 3.10",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Programming Language :: Python :: 3.13",
|
||||
"Programming Language :: Python :: 3.14",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Operating System :: OS Independent",
|
||||
"Natural Language :: English",
|
||||
|
|
@ -25,7 +26,7 @@ classifiers = [
|
|||
]
|
||||
dependencies = [
|
||||
"rougail >= 1.1,<2",
|
||||
"rougail-user-data-commandline",
|
||||
"tiramisu_cmdline_parser >= 0.6,<1",
|
||||
]
|
||||
|
||||
[project.scripts]
|
||||
|
|
@ -39,9 +40,5 @@ name = "cz_conventional_commits"
|
|||
tag_format = "$version"
|
||||
version_scheme = "pep440"
|
||||
version_provider = "pep621"
|
||||
version_files = [
|
||||
"src/rougail/cli/__version__.py",
|
||||
"pyproject.toml:version"
|
||||
]
|
||||
update_changelog_on_bump = true
|
||||
#update_changelog_on_bump = true
|
||||
changelog_merge_prerelease = true
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
"""
|
||||
Silique (https://www.silique.fr)
|
||||
Copyright (C) 2024-2025
|
||||
Copyright (C) 2024
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -15,5 +15,3 @@ GNU General Public License for more details.
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with Mtools. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
from .__version__ import __version__
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
"""
|
||||
Silique (https://www.silique.fr)
|
||||
Copyright (C) 2024-2025
|
||||
Copyright (C) 2024
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -16,217 +16,54 @@ You should have received a copy of the GNU General Public License
|
|||
along with Mtools. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
import os
|
||||
from warnings import filterwarnings
|
||||
from pathlib import Path
|
||||
from sys import exit
|
||||
from warnings import warn
|
||||
|
||||
from tiramisu_cmdline_parser import TiramisuCmdlineParser
|
||||
from tiramisu.error import PropertiesOptionError
|
||||
from tiramisu import MetaConfig
|
||||
from tiramisu import Config
|
||||
from pathlib import Path
|
||||
|
||||
from rougail import Rougail
|
||||
from rougail.user_data import UserData
|
||||
from rougail import Rougail, PropertiesOptionError
|
||||
from rougail.config import get_rougail_config
|
||||
from rougail.update import RougailUpgrade
|
||||
from rougail.utils import load_modules
|
||||
from rougail.error import RougailWarning
|
||||
|
||||
try:
|
||||
from rougail.user_data_yaml import RougailUserDataYaml
|
||||
except ImportError:
|
||||
RougailUserDataYaml = None
|
||||
try:
|
||||
from rougail.user_data_environment import RougailUserDataEnvironment
|
||||
except ImportError:
|
||||
RougailUserDataEnvironment = None
|
||||
from .rougailconfig import load as rougailconfig_load
|
||||
|
||||
from .i18n import _
|
||||
|
||||
|
||||
ENV_PREFIX = "ROUGAILCLI"
|
||||
|
||||
|
||||
def _main(arguments, do_not_print):
|
||||
global print_traceback
|
||||
def _main():
|
||||
rougailconfig = get_rougail_config(
|
||||
backward_compatibility=False, add_extra_options=False
|
||||
)
|
||||
cmd_config = load_cmd_user_data(rougailconfig, arguments)
|
||||
print_traceback = rougailconfig["cli.debug"]
|
||||
if rougailconfig["cli.versions"]:
|
||||
versions = display_version(cmd_config)
|
||||
if do_not_print:
|
||||
return list(versions)
|
||||
for version in versions:
|
||||
print(version)
|
||||
exit()
|
||||
layer_datas, metaconfig, config, err_warn = load_user_data(rougailconfig)
|
||||
output = get_output(rougailconfig, metaconfig, config, err_warn, layer_datas)
|
||||
if do_not_print:
|
||||
return output.run()
|
||||
ret = output.print()
|
||||
if ret is False:
|
||||
exit(1)
|
||||
|
||||
|
||||
def load_cmd_user_data(rougailconfig, arguments):
|
||||
rougailconfig.generate_config()
|
||||
cmd_config = rougailconfig.config
|
||||
origin_prop = cmd_config.property.default("read_write", "append")
|
||||
cmd_config.property.setdefault(
|
||||
frozenset(origin_prop | {"not_for_commandline"}), "read_write", "append"
|
||||
)
|
||||
cmd_config.property.read_write()
|
||||
config_files = None
|
||||
if RougailUserDataYaml:
|
||||
_config_files = os.environ.pop(f"{ENV_PREFIX}_CLI.CONFIG_FILE", None)
|
||||
if _config_files:
|
||||
_config_files = _config_files.split(',')
|
||||
else:
|
||||
_config_files = cmd_config.forcepermissive.option("cli.config_file").value.get()
|
||||
_config_files = [_config_file for _config_file in _config_files if Path(_config_file).is_file()]
|
||||
if _config_files:
|
||||
config_files = _config_files
|
||||
if RougailUserDataEnvironment:
|
||||
env_prefix = ENV_PREFIX
|
||||
else:
|
||||
env_prefix = None
|
||||
user_data = rougailconfig_load(rougailconfig, config_files, env_prefix, True, _arguments=arguments, _generate=False, _add_help=False)
|
||||
display_warnings = rougailconfig["cli.warnings"]
|
||||
manage_warnings(display_warnings)
|
||||
if not cmd_config.option("cli.versions").value.get():
|
||||
if display_warnings and user_data["warnings"]:
|
||||
for warning in user_data["warnings"]:
|
||||
if isinstance(warning, dict):
|
||||
warning = next(iter(warning))
|
||||
warn(warning)
|
||||
if manage_warnings:
|
||||
# replays to display errors if needed
|
||||
parser = TiramisuCmdlineParser(
|
||||
cmd_config,
|
||||
short_name_max_len=2,
|
||||
)
|
||||
parser.parse_args(arguments)
|
||||
if user_data["errors"]:
|
||||
raise Exception(user_data["errors"][0])
|
||||
|
||||
cmd_config.property.setdefault(origin_prop, "read_write", "append")
|
||||
cmd_config.property.read_only()
|
||||
cmd_config.property.add("not_for_commandline")
|
||||
parser = TiramisuCmdlineParser(
|
||||
cmd_config,
|
||||
add_extra_options=False,
|
||||
short_name_max_len=2,
|
||||
)
|
||||
parser.parse_args()
|
||||
cmd_config.property.remove("not_for_commandline")
|
||||
|
||||
return cmd_config
|
||||
|
||||
|
||||
def display_version(cmd_config):
|
||||
versions = []
|
||||
from tiramisu import __version__
|
||||
yield(f"tiramisu: {__version__}")
|
||||
|
||||
from tiramisu_cmdline_parser import __version__
|
||||
yield(f"tiramisu-cmdline-parser: {__version__}")
|
||||
|
||||
from rougail import __version__
|
||||
yield(f"rougail: {__version__}")
|
||||
|
||||
from . import __version__
|
||||
yield(f"rougail-cli: {__version__}")
|
||||
|
||||
for step in ["structural", "user_data", "output"]:
|
||||
display_step = step.replace("_", "-")
|
||||
for step_name in sorted(cmd_config.unrestraint.option(f"step.{step}").value.list()):
|
||||
path = (
|
||||
Path(__file__).parent.parent
|
||||
/ (step + "_" + step_name)
|
||||
/ "__init__.py"
|
||||
)
|
||||
if path.is_file():
|
||||
try:
|
||||
module = load_modules(
|
||||
"rougail." + step + "_" + step_name, str(path)
|
||||
)
|
||||
yield(
|
||||
f"rougail-{display_step}-{step_name}: {module.__version__}"
|
||||
)
|
||||
except Exception as err:
|
||||
pass
|
||||
|
||||
|
||||
def manage_warnings(warnings):
|
||||
if not warnings:
|
||||
filterwarnings("ignore", category=DeprecationWarning)
|
||||
filterwarnings("ignore", category=RougailWarning)
|
||||
else:
|
||||
filterwarnings("default", category=DeprecationWarning)
|
||||
filterwarnings("default", category=RougailWarning)
|
||||
|
||||
|
||||
def load_user_data(rougailconfig):
|
||||
layer_datas = {}
|
||||
if not rougailconfig["cli.load_config"]:
|
||||
return None, None, None, {"errors": [], "warnings": []}
|
||||
cmd_config.property.read_only()
|
||||
if rougailconfig["upgrade"]:
|
||||
RougailUpgrade(rougailconfig=rougailconfig).run()
|
||||
return
|
||||
try:
|
||||
user_data_names = rougailconfig["step.user_data"]
|
||||
except PropertiesOptionError:
|
||||
user_data_names = []
|
||||
has_layers = rougailconfig["cli.layers"]
|
||||
if has_layers:
|
||||
layers = [[ud] for ud in user_data_names]
|
||||
last_layers = len(layers) - 1
|
||||
else:
|
||||
layers = [user_data_names]
|
||||
last_layers = 0
|
||||
output_name = rougailconfig["step.output"]
|
||||
# structural
|
||||
rougail = Rougail(rougailconfig)
|
||||
layer_name = "_".join(layers[-1])
|
||||
subconfig = rougail.run(name=layer_name)
|
||||
try:
|
||||
read_write = set()
|
||||
read_only = set()
|
||||
if rougailconfig["cli.inaccessible_read_write_modes"]:
|
||||
read_write = set(rougailconfig["cli.inaccessible_read_write_modes"])
|
||||
if rougailconfig["cli.inaccessible_modes"]:
|
||||
read_only = set(rougailconfig["cli.inaccessible_modes"])
|
||||
read_write |= read_only
|
||||
if read_write:
|
||||
subconfig.property.setdefault(
|
||||
frozenset(subconfig.property.default("read_write", "append") | read_write), "read_write", "append"
|
||||
)
|
||||
subconfig.property.setdefault(
|
||||
frozenset(subconfig.property.default("read_only", "remove") | (read_write - read_only)), "read_only", "remove"
|
||||
)
|
||||
if read_only:
|
||||
subconfig.property.setdefault(
|
||||
frozenset(subconfig.property.default("read_only", "append") | read_only), "read_only", "append"
|
||||
)
|
||||
if read_write or read_only:
|
||||
subconfig.property.read_write()
|
||||
except:
|
||||
pass
|
||||
subconfig.information.set("description_type", rougailconfig["cli.description_type"])
|
||||
metaconfig = subconfig
|
||||
if last_layers:
|
||||
for layer in layers[:-1]:
|
||||
layer_name = "_".join(layer)
|
||||
metaconfig = MetaConfig([metaconfig], name=layer_name)
|
||||
metaconfig.owner.set(metaconfig.path())
|
||||
subconfig = metaconfig
|
||||
err_warn = {"errors": [], "warnings": []}
|
||||
invalid_user_data_error = rougailconfig["cli.invalid_user_data_error"]
|
||||
unknown_user_data_error = rougailconfig["cli.unknown_user_data_error"]
|
||||
interactive_user_data = {}
|
||||
for idx, layer in enumerate(layers):
|
||||
if idx:
|
||||
subconfig = subconfig.config("_".join(layer))
|
||||
layer_name = subconfig.path()
|
||||
subconfig.owner.set(subconfig.path())
|
||||
else:
|
||||
layer_name = None
|
||||
# data user
|
||||
user_data = []
|
||||
if has_layers:
|
||||
layer_datas[layer_name] = {}
|
||||
for user_data_name in layer:
|
||||
for user_data_name in user_data_names:
|
||||
rougail.converted.plugins.append("user_data_" + user_data_name)
|
||||
rougail.converted.plugins.append("output_" + output_name)
|
||||
config = rougail.get_config()
|
||||
# data user
|
||||
if not user_data_names:
|
||||
user_datas = None
|
||||
else:
|
||||
config.property.read_write()
|
||||
user_datas = []
|
||||
for user_data_name in user_data_names:
|
||||
path = (
|
||||
Path(__file__).parent.parent
|
||||
/ ("user_data_" + user_data_name)
|
||||
|
|
@ -237,70 +74,35 @@ def load_user_data(rougailconfig):
|
|||
_('cannot find "user_data" module "{0}"').format(user_data_name)
|
||||
)
|
||||
module = load_modules("rougail.user_data_" + user_data_name, str(path))
|
||||
rougail_user_data = module.RougailUserData
|
||||
if hasattr(rougail_user_data, 'interactive_user_data') and rougail_user_data.interactive_user_data:
|
||||
interactive_user_data.setdefault(layer_name, {})[user_data_name] = rougail_user_data
|
||||
continue
|
||||
elif interactive_user_data:
|
||||
raise Exception(_('interactive user data "{0}" is loader before uninteractive user data "{1}"').format(list(interactive_user_data), user_data_name))
|
||||
for ud in rougail_user_data(
|
||||
subconfig,
|
||||
user_datas.extend(
|
||||
module.RougailUserData(
|
||||
config,
|
||||
rougailconfig=rougailconfig,
|
||||
).run():
|
||||
if has_layers:
|
||||
layer_datas[layer_name].setdefault(user_data_name, []).append(ud["source"])
|
||||
user_data.append(ud)
|
||||
if user_data:
|
||||
new_err_warn = UserData(subconfig).user_data(user_data, invalid_user_data_error=invalid_user_data_error, unknown_user_data_error=unknown_user_data_error)
|
||||
for level, datas in new_err_warn.items():
|
||||
if datas:
|
||||
err_warn[level].extend(datas)
|
||||
for layer_name, interactive_user_data in interactive_user_data.items():
|
||||
for layer, rougail_user_data in interactive_user_data.items():
|
||||
if has_layers and len(layers) > 1:
|
||||
subconfig = subconfig.config("_".join(layer))
|
||||
subconfig.owner.set(subconfig.path())
|
||||
for user_data in rougail_user_data(
|
||||
subconfig,
|
||||
rougailconfig=rougailconfig,
|
||||
).run():
|
||||
if has_layers:
|
||||
layer_datas[layer_name].setdefault(user_data_name, []).append(user_data["source"])
|
||||
|
||||
return layer_datas, metaconfig, subconfig, err_warn
|
||||
|
||||
|
||||
def get_output(rougailconfig, metaconfig, config, err_warn, layer_datas):
|
||||
).run()
|
||||
)
|
||||
if user_datas:
|
||||
err_warn = rougail.user_datas(user_datas)
|
||||
else:
|
||||
err_warn = {"errors": [], "warnings": []}
|
||||
# output
|
||||
if config and (not rougailconfig["cli.load_config"] or not rougailconfig["cli.read_write"]):
|
||||
config.property.read_only()
|
||||
output_name = rougailconfig["step.output"]
|
||||
config.property.read_only()
|
||||
path = Path(__file__).parent.parent / ("output_" + output_name) / "__init__.py"
|
||||
if not path.is_file():
|
||||
raise Exception(
|
||||
_('cannot find cli file for "output_name" module "{0}"').format(output_name)
|
||||
)
|
||||
module = load_modules("rougail.output_" + output_name, str(path))
|
||||
output = module.RougailOutput(
|
||||
module.RougailOutput(
|
||||
config=config,
|
||||
rougailconfig=rougailconfig,
|
||||
user_data_errors=err_warn["errors"],
|
||||
user_data_warnings=err_warn["warnings"],
|
||||
config_owner_is_path=True,
|
||||
root_config=metaconfig,
|
||||
layer_datas=layer_datas,
|
||||
)
|
||||
return output
|
||||
).run()
|
||||
|
||||
|
||||
def main(arguments=None, do_not_print=False):
|
||||
global print_traceback
|
||||
print_traceback = True
|
||||
def main():
|
||||
try:
|
||||
return _main(arguments, do_not_print)
|
||||
_main()
|
||||
except Exception as err:
|
||||
if print_traceback:
|
||||
import traceback
|
||||
|
||||
traceback.print_exc()
|
||||
exit(_("ERROR: {0}").format(err))
|
||||
print(_("ERROR: {0}").format(err))
|
||||
exit(1)
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
__version__ = "0.2.0a35"
|
||||
|
|
@ -1,117 +0,0 @@
|
|||
"""
|
||||
Silique (https://www.silique.fr)
|
||||
Copyright (C) 2025
|
||||
|
||||
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 .i18n import _
|
||||
|
||||
|
||||
def get_rougail_config(
|
||||
*,
|
||||
backward_compatibility: bool = True, # pylint: disable=unused-argument
|
||||
) -> dict:
|
||||
options = f"""
|
||||
cli:
|
||||
description: {_('Command line options')}
|
||||
|
||||
config_file:
|
||||
description: {_('Loads command line parameters from a file')}
|
||||
type: unix_filename
|
||||
commandline: false
|
||||
params:
|
||||
allow_relative: true
|
||||
default:
|
||||
- .rougailcli.yml
|
||||
|
||||
debug: false # {_('Displays debug informations')}
|
||||
|
||||
warnings: true # {_('Displays command line option warnings informations')}
|
||||
|
||||
versions: false # {_('Displays Rougail version and all its components')}
|
||||
|
||||
invalid_user_data_error: false # {_("Invalid value in user data is not allowed")}
|
||||
|
||||
unknown_user_data_error: false # {_("Unknown variable in user data is not allowed")}
|
||||
|
||||
layers:
|
||||
description: {_('Open each user data in separate layers')}
|
||||
default: false
|
||||
hidden:
|
||||
jinja: |-
|
||||
{{{{ __.step.user_data is propertyerror or __.step.user_data | length < 2 }}}}
|
||||
return_type: boolean
|
||||
description: {_('if only one user data is set in "__.step.user_data"')}
|
||||
|
||||
load_config:
|
||||
default: true
|
||||
hidden: true
|
||||
|
||||
read_write: false # {_('Configuration in output step is in read_write mode')}
|
||||
|
||||
description_type:
|
||||
description: {_('Type of variables description')}
|
||||
help: >-
|
||||
{_("""To identify different variables, we use the variable description. There are four types of description:
|
||||
|
||||
- name_and_description: which contains the variable name followed by its description
|
||||
- path: the variable's path
|
||||
- name: the variable name
|
||||
- description: the variable's description""")}
|
||||
choices:
|
||||
- name_and_description
|
||||
- path
|
||||
- name
|
||||
- description
|
||||
default: description
|
||||
|
||||
inaccessible_read_write_modes:
|
||||
description: {_('Modes that should not be accessible in read_write mode')}
|
||||
multi: true
|
||||
mandatory: false
|
||||
disabled:
|
||||
jinja: |
|
||||
{{{{ not modes_level }}}}
|
||||
return_type: boolean
|
||||
description: {_('if any mode is set in "modes_level"')}
|
||||
validators:
|
||||
- type: jinja
|
||||
jinja: |
|
||||
{{% if _.inaccessible_read_write_modes not in modes_level %}}
|
||||
not in modes_level ({{modes_level}})
|
||||
{{% endif %}}
|
||||
description: {_('mode must exists in "modes_level"')}
|
||||
|
||||
inaccessible_modes:
|
||||
description: {_('Modes that should not be accessible')}
|
||||
multi: true
|
||||
mandatory: false
|
||||
disabled:
|
||||
jinja: |
|
||||
{{{{ not modes_level }}}}
|
||||
return_type: boolean
|
||||
description: {_('if any mode is set in "modes_level"')}
|
||||
validators:
|
||||
- type: jinja
|
||||
jinja: |
|
||||
{{% if _.inaccessible_modes not in modes_level %}}
|
||||
not in modes_level ({{modes_level}})
|
||||
{{% endif %}}
|
||||
description: {_('mode must exists in "modes_level"')}
|
||||
"""
|
||||
return {
|
||||
"options": options,
|
||||
"process": None,
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
"""Internationalisation utilities
|
||||
Silique (https://www.silique.fr)
|
||||
Copyright (C) 2024-2025
|
||||
Copyright (C) 2024
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -19,6 +19,6 @@ along with Mtools. If not, see <http://www.gnu.org/licenses/>.
|
|||
from gettext import translation
|
||||
from pathlib import Path
|
||||
|
||||
t = translation("rougail_cli", str(Path(__file__).parent / "locale"), fallback=True)
|
||||
t = translation("rougail_cli", str(Path(__file__).parent / "locale"))
|
||||
|
||||
_ = t.gettext
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,83 +0,0 @@
|
|||
"""
|
||||
Silique (https://www.silique.fr)
|
||||
Copyright (C) 2025
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Mtools 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Mtools. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
from rougail.user_data import UserData
|
||||
|
||||
|
||||
def load(rougailconfig: "RougailConfig",
|
||||
yaml_files: list[str]=None,
|
||||
env_prefix: str=None,
|
||||
commandline: bool=False,
|
||||
_arguments=None,
|
||||
_add_help=True,
|
||||
_generate=True
|
||||
):
|
||||
if _generate:
|
||||
rougailconfig.generate_config()
|
||||
cmd_config = rougailconfig.config
|
||||
origin_prop = cmd_config.property.exportation()
|
||||
cmd_config.property.read_write()
|
||||
user_data = []
|
||||
if yaml_files:
|
||||
for yaml_file in yaml_files:
|
||||
user_data.extend(from_yaml(cmd_config, yaml_file))
|
||||
if env_prefix:
|
||||
user_data.extend(from_env(cmd_config, env_prefix))
|
||||
if commandline:
|
||||
user_data.extend(from_cmdline(cmd_config, _arguments, _add_help))
|
||||
user_data = UserData(cmd_config).user_data(user_data)
|
||||
cmd_config.property.importation(origin_prop)
|
||||
return user_data
|
||||
|
||||
|
||||
def from_yaml(cmd_config, yaml_file):
|
||||
from rougail.user_data_yaml import RougailUserDataYaml
|
||||
fake_rougail_config = {
|
||||
"step.user_data": ["yaml"],
|
||||
"yaml.filename": [yaml_file],
|
||||
"yaml.file_with_secrets": "all",
|
||||
}
|
||||
return RougailUserDataYaml(cmd_config,
|
||||
rougailconfig=fake_rougail_config,
|
||||
).run()
|
||||
|
||||
|
||||
def from_env(cmd_config, env_prefix):
|
||||
from rougail.user_data_environment import RougailUserDataEnvironment
|
||||
fake_rougail_config = {
|
||||
"main_namespace": None,
|
||||
"step.user_data": ["environment"],
|
||||
"environment.default_environment_name": env_prefix,
|
||||
"environment.custom_separator": None,
|
||||
}
|
||||
return RougailUserDataEnvironment(
|
||||
cmd_config,
|
||||
rougailconfig=fake_rougail_config,
|
||||
).run()
|
||||
|
||||
|
||||
def from_cmdline(cmd_config, arguments, add_help):
|
||||
from rougail.user_data_commandline import RougailUserDataCommandline
|
||||
fake_rougail_config = {
|
||||
"step.user_data": ["commandline"],
|
||||
}
|
||||
return RougailUserDataCommandline(cmd_config,
|
||||
rougailconfig=fake_rougail_config,
|
||||
short_name_max_len=2,
|
||||
arguments=arguments,
|
||||
add_help=add_help,
|
||||
).run()
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
╭─────── Caption ────────╮
|
||||
│ Variable [38;5;220mDefault value[0m │
|
||||
╰────────────────────────╯
|
||||
Variables:
|
||||
[94m┗━━ [0m📓 a description: [38;5;220mmy_value[0m
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
╭────────────── Caption ───────────────╮
|
||||
│ Variable [32mModified value[0m │
|
||||
│ (⏳ Original default value) │
|
||||
╰──────────────────────────────────────╯
|
||||
Variables:
|
||||
[94m┗━━ [0m📓 a description: [32ma yaml value[0m ◀ loaded from the YAML file "yaml/file.yml"
|
||||
[94m [0m(⏳ my_value)
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
╭────────────── Caption ───────────────╮
|
||||
│ Variable [32mModified value[0m │
|
||||
│ (⏳ Original default value) │
|
||||
╰──────────────────────────────────────╯
|
||||
Variables:
|
||||
[94m┗━━ [0m📓 a description: [32ma yaml value[0m ◀ loaded from the YAML file "yaml/file.yml"
|
||||
[94m [0m(⏳ my_value)
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
╭────────────── Caption ───────────────╮
|
||||
│ Variable [32mModified value[0m │
|
||||
│ (⏳ Original default value) │
|
||||
╰──────────────────────────────────────╯
|
||||
Variables:
|
||||
[94m┗━━ [0m📓 a description: [32ma yaml value[0m ◀ loaded from the YAML file "yaml/file.yml"
|
||||
[94m [0m(⏳ my env value ◀ loaded from environment variable ⏳ my_value)
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
version: 1.1
|
||||
|
||||
my_variable: my_value # a description
|
||||
|
|
@ -1 +0,0 @@
|
|||
["tiramisu", "tiramisu-cmdline-parser", "rougail", "rougail-cli", "rougail-structural-bitwarden", "rougail-user-data-ansible", "rougail-user-data-bitwarden", "rougail-user-data-commandline", "rougail-user-data-environment", "rougail-user-data-questionary", "rougail-user-data-yaml", "rougail-output-ansible", "rougail-output-display", "rougail-output-doc", "rougail-output-json", "rougail-output-table"]
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
---
|
||||
my_variable: a yaml value
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
---
|
||||
main_structural_directories:
|
||||
- structures
|
||||
step:
|
||||
output: doc
|
||||
doc:
|
||||
output_format: json
|
||||
|
|
@ -1 +0,0 @@
|
|||
"\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503\u001b[1m \u001b[0m\u001b[1mVariable \u001b[0m\u001b[1m \u001b[0m\u2503\u001b[1m \u001b[0m\u001b[1mDescription \u001b[0m\u001b[1m \u001b[0m\u2503\n\u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n\u2502 \u001b[1mmy_variable\u001b[0m \u2502 A description. \u2502\n\u2502 \u001b[1;7m string \u001b[0m \u001b[1;7m mandatory \u001b[0m \u2502 \u001b[1mDefault\u001b[0m: my_value \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n"
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
---
|
||||
main_structural_directories:
|
||||
- structures
|
||||
step:
|
||||
output: doc
|
||||
doc:
|
||||
output_format: console
|
||||
|
|
@ -1 +0,0 @@
|
|||
"\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Caption \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 Variable \u001b[38;5;220mDefault value\u001b[0m \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\nVariables:\n\u001b[94m\u2517\u2501\u2501 \u001b[0m\ud83d\udcd3 a description: \u001b[38;5;220mmy_value\u001b[0m\n"
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
main_structural_directories:
|
||||
- structures
|
||||
- structures_warnings
|
||||
doc:
|
||||
output_format: console
|
||||
cli:
|
||||
warnings: false
|
||||
|
|
@ -1 +0,0 @@
|
|||
"[cols=\"1a,1a\"]\n|====\n| Variable | Description \n| **my_variable** +\n`https://rougail.readthedocs.io/en/latest/variable.html#variables-types[string]` `mandatory` | A description. +\n**Default**: my_value \n|====\n\n"
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
---
|
||||
main_structural_directories:
|
||||
- structures
|
||||
doc:
|
||||
output_format: console
|
||||
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
version: 1.1
|
||||
|
||||
my_variable: my_value # a description
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
version: 1.1
|
||||
|
||||
my_variable:
|
||||
redefine: true
|
||||
validators: # validators in jinja without description makes warnings
|
||||
- jinja: |-
|
||||
{{ _.my_variable != "my_value" }}
|
||||
warnings: true
|
||||
|
|
@ -1 +0,0 @@
|
|||
["family \"configuration rougail-json\" is disabled, so cannot access to \"test mandatories variables before display in json\", it will be ignored when loading from the YAML file \"warnings.yml\""]
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
---
|
||||
main_structural_directories:
|
||||
- structures
|
||||
doc:
|
||||
output_format: console
|
||||
json:
|
||||
mandatory: true
|
||||
|
|
@ -1 +0,0 @@
|
|||
[]
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
main_structural_directories:
|
||||
- structures
|
||||
doc:
|
||||
output_format: console
|
||||
json:
|
||||
mandatory: true
|
||||
cli:
|
||||
warnings: false
|
||||
|
|
@ -1 +0,0 @@
|
|||
["family \"configuration rougail-json\" is disabled, so cannot access to \"test mandatories variables before display in json\", it will be ignored when loading from the YAML file \"warnings3.yml\"", "\"validators\" is a calculation for my_variable but has no description in \"structures/file.yml\" and \"structures_warnings/file.yml\""]
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
main_structural_directories:
|
||||
- structures
|
||||
- structures_warnings
|
||||
doc:
|
||||
output_format: console
|
||||
json:
|
||||
mandatory: true
|
||||
|
|
@ -1 +0,0 @@
|
|||
[]
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
---
|
||||
main_structural_directories:
|
||||
- structures
|
||||
- structures_warnings
|
||||
doc:
|
||||
output_format: console
|
||||
json:
|
||||
mandatory: true
|
||||
cli:
|
||||
warnings: false
|
||||
|
|
@ -1 +0,0 @@
|
|||
"{\n \"my_variable\": {\n \"type\": \"variable\",\n \"default\": {\n \"name\": \"Default\",\n \"values\": \"my_value\"\n },\n \"variable_type\": \"string\",\n \"path\": \"my_variable\",\n \"names\": [\n \"my_variable\"\n ],\n \"description\": \"A description.\",\n \"properties\": [\n {\n \"type\": \"property\",\n \"name\": \"mandatory\",\n \"ori_name\": \"mandatory\",\n \"access_control\": false\n }\n ],\n \"gen_examples\": [\n \"my_value\"\n ],\n \"mandatory_without_value\": false\n }\n}"
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
main_structural_directories:
|
||||
- structures
|
||||
step:
|
||||
output: json
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
step:
|
||||
output: doc
|
||||
doc:
|
||||
output_format: json
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
version: 1.1
|
||||
|
||||
my_variable: my_value # a description
|
||||
|
|
@ -1 +0,0 @@
|
|||
"{\n \"my_variable\": {\n \"type\": \"variable\",\n \"default\": {\n \"name\": \"Default\",\n \"values\": \"my_value\"\n },\n \"variable_type\": \"string\",\n \"path\": \"my_variable\",\n \"names\": [\n \"my_variable\"\n ],\n \"description\": \"A description.\",\n \"properties\": [\n {\n \"type\": \"property\",\n \"name\": \"mandatory\",\n \"ori_name\": \"mandatory\",\n \"access_control\": false\n }\n ],\n \"gen_examples\": [\n \"my_value\"\n ],\n \"mandatory_without_value\": false\n }\n}"
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
---
|
||||
doc:
|
||||
output_format: json
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
version: 1.1
|
||||
|
||||
my_variable: my_value # a description
|
||||
|
|
@ -1 +0,0 @@
|
|||
"{\n \"my_variable\": {\n \"type\": \"variable\",\n \"default\": {\n \"name\": \"Default\",\n \"values\": \"my_value\"\n },\n \"variable_type\": \"string\",\n \"path\": \"my_variable\",\n \"names\": [\n \"my_variable\"\n ],\n \"description\": \"A description.\",\n \"properties\": [\n {\n \"type\": \"property\",\n \"name\": \"mandatory\",\n \"ori_name\": \"mandatory\",\n \"access_control\": false\n }\n ],\n \"gen_examples\": [\n \"my_value\"\n ],\n \"mandatory_without_value\": false\n }\n}"
|
||||
|
|
@ -1,269 +0,0 @@
|
|||
import os
|
||||
import warnings
|
||||
from pathlib import Path
|
||||
from contextlib import chdir
|
||||
from json import dumps, loads
|
||||
|
||||
from rougail.cli.__main__ import main
|
||||
|
||||
|
||||
test_dir = Path(__file__).parent
|
||||
os.environ['COLUMNS'] = '80'
|
||||
|
||||
|
||||
def test_cli():
|
||||
with chdir(test_dir / 'cli'):
|
||||
ret = main(['--main_structural_directories', 'structures'], do_not_print=True)
|
||||
filename = Path('result.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(ret[1])
|
||||
with filename.open() as fh:
|
||||
data = fh.read()
|
||||
assert ret == (True, data), str(filename.absolute())
|
||||
|
||||
|
||||
def test_cli_boolean():
|
||||
with chdir(test_dir / 'cli'):
|
||||
ret = main(['--main_structural_directories', 'structures', '--display.mandatory'], do_not_print=True)
|
||||
filename = Path('result.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(ret[1])
|
||||
with filename.open() as fh:
|
||||
data = fh.read()
|
||||
assert ret == (True, data), str(filename.absolute())
|
||||
|
||||
|
||||
def test_cli_boolean_no():
|
||||
with chdir(test_dir / 'cli'):
|
||||
ret = main(['--main_structural_directories', 'structures', '--display.no-mandatory'], do_not_print=True)
|
||||
filename = Path('result.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(ret[1])
|
||||
with filename.open() as fh:
|
||||
data = fh.read()
|
||||
assert ret == (True, data), str(filename.absolute())
|
||||
|
||||
|
||||
def test_cli_version():
|
||||
with chdir(test_dir / 'cli'):
|
||||
ret = main(['--cli.version'], do_not_print=True)
|
||||
ret = [r.rsplit(': ', 1)[0] for r in ret]
|
||||
filename = Path('versions.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(dumps(ret))
|
||||
with filename.open() as fh:
|
||||
data = loads(fh.read())
|
||||
assert ret == data, str(filename.absolute())
|
||||
|
||||
|
||||
def test_cli_version_user_data_disabled():
|
||||
with chdir(test_dir / 'cli'):
|
||||
ret = main(['--cli.version', '--step.output', 'doc'], do_not_print=True)
|
||||
ret = [r.rsplit(': ', 1)[0] for r in ret]
|
||||
filename = Path('versions.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(dumps(ret))
|
||||
with filename.open() as fh:
|
||||
data = loads(fh.read())
|
||||
assert ret == data, str(filename.absolute())
|
||||
|
||||
|
||||
def test_cli_version_user_data_disabled_2():
|
||||
with chdir(test_dir / 'second_step'):
|
||||
ret = main(['--main_structural_directories', 'structures', '--step.output', 'doc'], do_not_print=True)
|
||||
filename = Path('yaml.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(dumps(ret[1]))
|
||||
with filename.open() as fh:
|
||||
data = loads(fh.read())
|
||||
assert ret == (True, data), str(filename.absolute())
|
||||
|
||||
|
||||
def test_cli_user_data():
|
||||
with chdir(test_dir / 'cli'):
|
||||
ret = main(['--main_structural_directories', 'structures', '--step.user_data', 'yaml', '--yaml.filename', 'yaml/file.yml'], do_not_print=True)
|
||||
filename = Path('result_user_data.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(ret[1])
|
||||
with filename.open() as fh:
|
||||
data = fh.read()
|
||||
assert ret == (True, data), str(filename.absolute())
|
||||
|
||||
|
||||
def test_cli_user_datas():
|
||||
save = os.environ.copy()
|
||||
os.environ["MY_VARIABLE"] = "my env value"
|
||||
with chdir(test_dir / 'cli'):
|
||||
ret = main(['--main_structural_directories', 'structures', '--step.user_data', 'environment', 'yaml', '--yaml.filename', 'yaml/file.yml'], do_not_print=True)
|
||||
filename = Path('result_user_datas.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(ret[1])
|
||||
with filename.open() as fh:
|
||||
data = fh.read()
|
||||
assert ret == (True, data), str(filename.absolute())
|
||||
save = os.environ.copy()
|
||||
|
||||
|
||||
def test_cli_user_datas_user_datas_layers():
|
||||
save = os.environ.copy()
|
||||
os.environ["ROUGAIL_MY_VARIABLE"] = "my env value"
|
||||
with chdir(test_dir / 'cli'):
|
||||
ret = main(['--main_structural_directories', 'structures', '--cli.layers', '--step.user_data', 'environment', 'yaml', '--yaml.filename', 'yaml/file.yml'], do_not_print=True)
|
||||
filename = Path('result_user_datas_layers.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(ret[1])
|
||||
with filename.open() as fh:
|
||||
data = fh.read()
|
||||
assert ret == (True, data), str(filename.absolute())
|
||||
save = os.environ.copy()
|
||||
|
||||
|
||||
def test_cli_rougailcli():
|
||||
with chdir(test_dir / 'rougailcli_file'):
|
||||
ret = main([], do_not_print=True)
|
||||
filename = Path('yaml.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(dumps(ret[1]))
|
||||
with filename.open() as fh:
|
||||
data = loads(fh.read())
|
||||
assert ret == (True, data), str(filename.absolute())
|
||||
|
||||
|
||||
def test_cli_rougailcli_files():
|
||||
with chdir(test_dir / 'rougailcli_files'):
|
||||
os.environ["ROUGAILCLI_CLI.CONFIG_FILE"] = 'rougailcli1.yml,rougailcli2.yml'
|
||||
ret = main([], do_not_print=True)
|
||||
filename = Path('yaml.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(dumps(ret[1]))
|
||||
with filename.open() as fh:
|
||||
data = loads(fh.read())
|
||||
assert ret == (True, data), str(filename.absolute())
|
||||
|
||||
|
||||
def test_cli_alt_rougailcli():
|
||||
save = os.environ.copy()
|
||||
with chdir(test_dir / 'rougailcli_file'):
|
||||
os.environ["ROUGAILCLI_CLI.CONFIG_FILE"] = 'alt_rougailcli.yml'
|
||||
ret = main([], do_not_print=True)
|
||||
filename = Path('alt_console.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(dumps(ret[1]))
|
||||
with filename.open() as fh:
|
||||
data = loads(fh.read())
|
||||
assert ret == (True, data), str(filename.absolute())
|
||||
os.environ = save
|
||||
|
||||
|
||||
def test_cli_rougailcli_mix():
|
||||
save = os.environ.copy()
|
||||
with chdir(test_dir / 'rougailcli_file'):
|
||||
os.environ["ROUGAILCLI_CLI.CONFIG_FILE"] = 'mix_rougailcli.yml'
|
||||
ret = main(["-o", "doc", "--doc.output_format", "asciidoc"], do_not_print=True)
|
||||
filename = Path('mix_console.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(dumps(ret[1]))
|
||||
with filename.open() as fh:
|
||||
data = loads(fh.read())
|
||||
assert ret == (True, data), str(filename.absolute())
|
||||
os.environ = save
|
||||
|
||||
|
||||
def test_cli_rougailcli_warning():
|
||||
save = os.environ.copy()
|
||||
with chdir(test_dir / 'rougailcli_file'):
|
||||
os.environ["ROUGAILCLI_CLI.CONFIG_FILE"] = 'warnings.yml'
|
||||
with warnings.catch_warnings(record=True) as rougail_wn:
|
||||
warnings.simplefilter("always", UserWarning)
|
||||
main(["-o", "doc", "--doc.output_format", "asciidoc"], do_not_print=True)
|
||||
ret = [str(w.message) for w in rougail_wn]
|
||||
filename = Path('warnings.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(dumps([str(w.message) for w in rougail_wn]))
|
||||
with filename.open() as fh:
|
||||
data = loads(fh.read())
|
||||
assert ret == data, str(filename.absolute())
|
||||
os.environ = save
|
||||
|
||||
|
||||
def test_cli_rougailcli_not_warning():
|
||||
save = os.environ.copy()
|
||||
with chdir(test_dir / 'rougailcli_file'):
|
||||
os.environ["ROUGAILCLI_CLI.CONFIG_FILE"] = 'warnings2.yml'
|
||||
with warnings.catch_warnings(record=True) as rougail_wn:
|
||||
warnings.simplefilter("always", UserWarning)
|
||||
main(["-o", "doc", "--doc.output_format", "asciidoc"], do_not_print=True)
|
||||
filename = Path('warnings2.txt')
|
||||
ret = [str(w.message) for w in rougail_wn]
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(dumps(ret))
|
||||
with filename.open() as fh:
|
||||
data = loads(fh.read())
|
||||
assert ret == data, str(filename.absolute())
|
||||
os.environ = save
|
||||
|
||||
|
||||
def test_cli_rougailcli_warning2():
|
||||
save = os.environ.copy()
|
||||
with chdir(test_dir / 'rougailcli_file'):
|
||||
os.environ["ROUGAILCLI_CLI.CONFIG_FILE"] = 'warnings3.yml'
|
||||
with warnings.catch_warnings(record=True) as rougail_wn:
|
||||
warnings.simplefilter("always", UserWarning)
|
||||
main(["-o", "doc", "--doc.output_format", "asciidoc"], do_not_print=True)
|
||||
ret = [str(w.message) for w in rougail_wn]
|
||||
filename = Path('warnings3.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(dumps(ret))
|
||||
with filename.open() as fh:
|
||||
data = loads(fh.read())
|
||||
assert ret == data, str(filename.absolute())
|
||||
os.environ = save
|
||||
|
||||
|
||||
def test_cli_rougailcli_not_warning2():
|
||||
save = os.environ.copy()
|
||||
with chdir(test_dir / 'rougailcli_file'):
|
||||
os.environ["ROUGAILCLI_CLI.CONFIG_FILE"] = 'warnings4.yml'
|
||||
with warnings.catch_warnings(record=True) as rougail_wn:
|
||||
warnings.simplefilter("always", UserWarning)
|
||||
main(["-o", "doc", "--doc.output_format", "asciidoc"], do_not_print=True)
|
||||
filename = Path('warnings4.txt')
|
||||
ret = [str(w.message) for w in rougail_wn]
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(dumps(ret))
|
||||
with filename.open() as fh:
|
||||
data = loads(fh.read())
|
||||
assert ret == data, str(filename.absolute())
|
||||
os.environ = save
|
||||
|
||||
|
||||
def test_cli_rougailcli_choice():
|
||||
save = os.environ.copy()
|
||||
with chdir(test_dir / 'rougailcli_file'):
|
||||
os.environ["ROUGAILCLI_CLI.CONFIG_FILE"] = 'choice_rougailcli.yml'
|
||||
ret = main([], do_not_print=True)
|
||||
filename = Path('choice_console.txt')
|
||||
if not filename.is_file():
|
||||
with filename.open('w') as fh:
|
||||
fh.write(dumps(ret[1]))
|
||||
with filename.open() as fh:
|
||||
data = loads(fh.read())
|
||||
assert ret == (True, data), str(filename.absolute())
|
||||
os.environ = save
|
||||
Loading…
Reference in a new issue