Compare commits

..

No commits in common. "c39e232fa95de149aa5a940cf6144a8b665af1f3" and "31c9efbf05cbd33660edd86ffcfda1633d7ec13e" have entirely different histories.

18 changed files with 539 additions and 1671 deletions

View file

@ -1,210 +0,0 @@
---
gitea: none
include_toc: true
---
[🇬🇧 (EN)](README.md) - [🇫🇷 (FR)](README.fr.md)
| Variable | Description | Valeur par défaut | Type | Contrôle des accès | Validateur |
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|
| **<a id="default_structural_format_version" name="default_structural_format_version">default_structural_format_version</a>**<br/>**Ligne de commande** : -v, --default_structural_format_version<br/>**Variable d'environnement** : DEFAULT_STRUCTURAL_FORMAT_VERSION | Version par défaut du format des fichiers de structure.<br/>Cette valeur n&#x27;est utilisée que si la version n&#x27;est pas définie dans le fichier de structure. | | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | **Choix** : <br/>&nbsp;1.0<br/>&nbsp;1.1<br/>&nbsp;null |
| **<a id="functions_files" name="functions_files">functions_files</a>**<br/>**Ligne de commande** : -c, --functions_files<br/>**Variable d'environnement** : FUNCTIONS_FILES | Fichier avec les fonctions.<br/>Ce fichier contient des filtres et des fonctions Jinja2 supplémentaires utilisables dans les fichiers de structure. | | [`UNIX filename`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | `unique`<br/>&nbsp;le nom de fichier peut être une chemin relatif<br/>&nbsp;le fichier doit exister<br/>&nbsp;type de fichier autorisé: "file". |
| **<a id="modes_level" name="modes_level">modes_level</a>**<br/>**Ligne de commande** : --modes_level<br/>**Variable d'environnement** : MODES_LEVEL | Tous les niveaux de modes valides. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | `unique` |
| **<a id="default_family_mode" name="default_family_mode">default_family_mode</a>**<br/>**Variable d'environnement** : DEFAULT_FAMILY_MODE | Mode par défaut pour une famille. | le premier défini dans "[Tous les niveaux de modes valides](#modes_level)" | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | Ce mode doit être disponible dans "[Tous les niveaux de modes valides](#modes_level)". |
| **<a id="default_variable_mode" name="default_variable_mode">default_variable_mode</a>**<br/>**Variable d'environnement** : DEFAULT_VARIABLE_MODE | Mode par défaut pour une variable. | si la variable "[Tous les niveaux de modes valides](#modes_level)" est définit, la valeur par défaut est le second élément disponible, sinon, le premier | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | Ce mode doit être disponible dans "[Tous les niveaux de modes valides](#modes_level)". |
| **<a id="base_option_name" name="base_option_name">base_option_name</a>**<br/>**Variable d'environnement** : BASE_OPTION_NAME | Nom de l&#x27;option pour l&#x27;option de base. | baseoption | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="export_with_import" name="export_with_import">export_with_import</a>**<br/>**Variable d'environnement** : EXPORT_WITH_IMPORT | Dans le fichier de cache, ne pas importer Tiramisu et autres dépendances. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="tiramisu_cache" name="tiramisu_cache">tiramisu_cache</a>**<br/>**Ligne de commande** : -t, --tiramisu_cache<br/>**Variable d'environnement** : TIRAMISU_CACHE | Store Tiramisu cache filename.<br/>Ce fichier contient les instructions Tiramisu utilisé en interne pour charger les variables.<br/>Ce fichier peut être utilisé pour le débogage. | | [`UNIX filename`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | •&nbsp;le nom de fichier peut être une chemin relatif<br/>&nbsp;type de fichier autorisé: "file". |
| **<a id="internal_functions" name="internal_functions">internal_functions</a>**<br/>**Variable d'environnement** : INTERNAL_FUNCTIONS | Nom des fonctions internes qu&#x27;il est possible d&#x27;utiliser comme fonction. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | |
| **<a id="extra_annotators" name="extra_annotators">extra_annotators</a>**<br/>**Variable d'environnement** : EXTRA_ANNOTATORS | Nom des annotators supplémentaires. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | |
| **<a id="suffix" name="suffix">suffix</a>**<br/>**Variable d'environnement** : SUFFIX | Suffix ajouté pour généré le nom des options. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="force_optional" name="force_optional">force_optional</a>**<br/>**Ligne de commande** : <br/>&nbsp;--force_optional<br/>&nbsp;--no-force_optional<br/>**Variable d'environnement** : FORCE_OPTIONAL | Toutes les variables dans un calcul sont optionnelles. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | `standard` | |
| **<a id="load_unexist_redefine" name="load_unexist_redefine">load_unexist_redefine</a>**<br/>**Variable d'environnement** : LOAD_UNEXIST_REDEFINE | Charger les variables redéfinis même si elles n&#x27;existe pas. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
## Le gestionnaire de secret
> [!NOTE]
>
> **Chemin** : secret_manager\
> `standard`
| Variable | Description | Valeur par défaut | Type | Contrôle des accès |
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------|--------------------------------------------------------------------------------------------------|----------------------|
| **<a id="secret_manager.pattern" name="secret_manager.pattern">secret_manager.pattern</a>**<br/>**Ligne de commande** : --secret_manager.pattern<br/>**Variable d'environnement** : SECRET_MANAGER.PATTERN | Le modèle de secret permettant de construire le nom de l&#x27;élément recherché dans le gestionnaire de secrets.<br/>Le modèle est au format Jinja2. | {{ project }} - {{ environment }} - {{ service }} - {{ user }} | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | `standard` |
## Load and exporter steps
> [!NOTE]
>
> **Chemin** : step\
> `standard`
| Variable | Description | Valeur par défaut | Type | Contrôle des accès | Validateur |
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------|---------------------|--------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **<a id="step.structural" name="step.structural">step.structural</a>**<br/>**Variable d'environnement** : STEP.STRUCTURAL | Sélection pour structure. | •&nbsp;directory | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | **Choix** : <br/>&nbsp;directory<br/>&nbsp;string<br/>&nbsp;commandline<br/>&nbsp;risotto<br/>&nbsp;bitwarden |
| **<a id="step.user_data" name="step.user_data">step.user_data</a>**<br/>**Ligne de commande** : -u, --step.user_data<br/>**Variable d'environnement** : STEP.USER_DATA | Sélection pour données utilisateur. | | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` *`désactivé`*<br/>**Désactivé** : _('cannot load user data for doc output') | `unique`<br/>**Choix** : <br/>&nbsp;yaml<br/>&nbsp;environment<br/>&nbsp;commandline<br/>&nbsp;ansible<br/>&nbsp;questionary<br/>&nbsp;risotto<br/>&nbsp;bitwarden |
| **<a id="step.output" name="step.output">step.output</a>**<br/>**Ligne de commande** : -o, --step.output<br/>**Variable d'environnement** : STEP.OUTPUT | Sélection pour sortie. | display | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | `standard` | **Choix** : <br/>&nbsp;display<br/>&nbsp;json<br/>&nbsp;doc<br/>&nbsp;table<br/>&nbsp;ansible |
| Variable | Description | Valeur par défaut | Type | Contrôle des accès |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------|---------------------|---------------------------------------------------------------------------------------------------|----------------------|
| **<a id="define_default_params" name="define_default_params">define_default_params</a>**<br/>**Ligne de commande** : <br/>&nbsp;--define_default_params<br/>&nbsp;--no-define_default_params<br/>**Variable d'environnement** : DEFINE_DEFAULT_PARAMS | Sur charger les paramètre par défaut pour le type d&#x27;option. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | `standard` |
## Paramètre par défaut pour le type d&#x27;option
> [!NOTE]
>
> **Chemin** : default_params\
> `standard` *`désactivé`*\
> **Désactivé** : lorsque la variable "[Sur charger les paramètre par défaut pour le type d&#x27;option](#define_default_params)" a la valeur "false"
### UNIX filename
> [!NOTE]
>
> **Chemin** : default_params.unix_filename\
> `standard`
| Variable | Description | Valeur par défaut | Type | Contrôle des accès | Validateur |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|----------------------------------|-----------------------------------------------------------------------------------------------|----------------------|----------------------------------------------------------------|
| **<a id="default_params.unix_filename.allow_relative" name="default_params.unix_filename.allow_relative">default_params.unix_filename.allow_relative</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.unix_filename.allow_relative<br/>&nbsp;--default_params.unix_filename.no-allow_relative<br/>**Variable d'environnement** : DEFAULT_PARAMS.UNIX_FILENAME.ALLOW_RELATIVE | Le nom de fichier peut être une chemin relatif. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.unix_filename.test_existence" name="default_params.unix_filename.test_existence">default_params.unix_filename.test_existence</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.unix_filename.test_existence<br/>&nbsp;--default_params.unix_filename.no-test_existence<br/>**Variable d'environnement** : DEFAULT_PARAMS.UNIX_FILENAME.TEST_EXISTENCE | Le fichier doit exister. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.unix_filename.types" name="default_params.unix_filename.types">default_params.unix_filename.types</a>**<br/>**Ligne de commande** : --default_params.unix_filename.types<br/>**Variable d'environnement** : DEFAULT_PARAMS.UNIX_FILENAME.TYPES | Type de fichier autorisé. | •&nbsp;file<br/>&nbsp;directory | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | `unique`<br/>**Choix** : <br/>&nbsp;file<br/>&nbsp;directory |
### IP
> [!NOTE]
>
> **Chemin** : default_params.ip\
> `standard`
| Variable | Description | Valeur par défaut | Type | Contrôle des accès |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------|
| **<a id="default_params.ip.private_only" name="default_params.ip.private_only">default_params.ip.private_only</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.ip.private_only<br/>&nbsp;--default_params.ip.no-private_only<br/>**Variable d'environnement** : DEFAULT_PARAMS.IP.PRIVATE_ONLY | Les IP privées sont autorisées. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.ip.allow_reserved" name="default_params.ip.allow_reserved">default_params.ip.allow_reserved</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.ip.allow_reserved<br/>&nbsp;--default_params.ip.no-allow_reserved<br/>**Variable d'environnement** : DEFAULT_PARAMS.IP.ALLOW_RESERVED | Les IP réservées sont autorisés. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.ip.cidr" name="default_params.ip.cidr">default_params.ip.cidr</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.ip.cidr<br/>&nbsp;--default_params.ip.no-cidr<br/>**Variable d'environnement** : DEFAULT_PARAMS.IP.CIDR | L&#x27;IP doit être au format CIDR. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
### CIDR
> [!NOTE]
>
> **Chemin** : default_params.cidr\
> `standard`
| Variable | Description | Valeur par défaut | Type | Contrôle des accès |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------|
| **<a id="default_params.cidr.private_only" name="default_params.cidr.private_only">default_params.cidr.private_only</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.cidr.private_only<br/>&nbsp;--default_params.cidr.no-private_only<br/>**Variable d'environnement** : DEFAULT_PARAMS.CIDR.PRIVATE_ONLY | Les IP privées sont autorisées. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.cidr.allow_reserved" name="default_params.cidr.allow_reserved">default_params.cidr.allow_reserved</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.cidr.allow_reserved<br/>&nbsp;--default_params.cidr.no-allow_reserved<br/>**Variable d'environnement** : DEFAULT_PARAMS.CIDR.ALLOW_RESERVED | Les IP réservées sont autorisés. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.cidr.cidr" name="default_params.cidr.cidr">default_params.cidr.cidr</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.cidr.cidr<br/>&nbsp;--default_params.cidr.no-cidr<br/>**Variable d'environnement** : DEFAULT_PARAMS.CIDR.CIDR | L&#x27;IP doit être au format CIDR. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
### Network
> [!NOTE]
>
> **Chemin** : default_params.network\
> `standard`
| Variable | Description | Valeur par défaut | Type | Contrôle des accès |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------|
| **<a id="default_params.network.private_only" name="default_params.network.private_only">default_params.network.private_only</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.network.private_only<br/>&nbsp;--default_params.network.no-private_only<br/>**Variable d'environnement** : DEFAULT_PARAMS.NETWORK.PRIVATE_ONLY | Les réseaux privés sont autorisés. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.network.allow_reserved" name="default_params.network.allow_reserved">default_params.network.allow_reserved</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.network.allow_reserved<br/>&nbsp;--default_params.network.no-allow_reserved<br/>**Variable d'environnement** : DEFAULT_PARAMS.NETWORK.ALLOW_RESERVED | Les réseaux réservés sont autorisés. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.network.cidr" name="default_params.network.cidr">default_params.network.cidr</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.network.cidr<br/>&nbsp;--default_params.network.no-cidr<br/>**Variable d'environnement** : DEFAULT_PARAMS.NETWORK.CIDR | Le réseau doit être au format CIDR. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
### Network CIDR
> [!NOTE]
>
> **Chemin** : default_params.network_cidr\
> `standard`
| Variable | Description | Valeur par défaut | Type | Contrôle des accès |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------|
| **<a id="default_params.network_cidr.private_only" name="default_params.network_cidr.private_only">default_params.network_cidr.private_only</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.network_cidr.private_only<br/>&nbsp;--default_params.network_cidr.no-private_only<br/>**Variable d'environnement** : DEFAULT_PARAMS.NETWORK_CIDR.PRIVATE_ONLY | Les réseaux privés sont autorisés. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.network_cidr.allow_reserved" name="default_params.network_cidr.allow_reserved">default_params.network_cidr.allow_reserved</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.network_cidr.allow_reserved<br/>&nbsp;--default_params.network_cidr.no-allow_reserved<br/>**Variable d'environnement** : DEFAULT_PARAMS.NETWORK_CIDR.ALLOW_RESERVED | Les réseaux réservés sont autorisés. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.network_cidr.cidr" name="default_params.network_cidr.cidr">default_params.network_cidr.cidr</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.network_cidr.cidr<br/>&nbsp;--default_params.network_cidr.no-cidr<br/>**Variable d'environnement** : DEFAULT_PARAMS.NETWORK_CIDR.CIDR | Le réseau doit être au format CIDR. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
### Netbios
> [!NOTE]
>
> **Chemin** : default_params.netbios\
> `standard`
| Variable | Description | Valeur par défaut | Type | Contrôle des accès | Validateur |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------|-------------------------------------------------------------------------------------------|
| **<a id="default_params.netbios.type" name="default_params.netbios.type">default_params.netbios.type</a>**<br/>**Ligne de commande** : --default_params.netbios.type<br/>**Variable d'environnement** : DEFAULT_PARAMS.NETBIOS.TYPE | Type de nom de domaine. | netbios | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | **Choix** : <br/>&nbsp;domainname<br/>&nbsp;netbios<br/>&nbsp;hostname<br/>&nbsp;null |
| **<a id="default_params.netbios.allow_without_dot" name="default_params.netbios.allow_without_dot">default_params.netbios.allow_without_dot</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.netbios.allow_without_dot<br/>&nbsp;--default_params.netbios.no-allow_without_dot<br/>**Variable d'environnement** : DEFAULT_PARAMS.NETBIOS.ALLOW_WITHOUT_DOT | Le nom de domaine peut être un nom d&#x27;hôte. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.netbios.test_existence" name="default_params.netbios.test_existence">default_params.netbios.test_existence</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.netbios.test_existence<br/>&nbsp;--default_params.netbios.no-test_existence<br/>**Variable d'environnement** : DEFAULT_PARAMS.NETBIOS.TEST_EXISTENCE | Le nom de domaine doit exister. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.netbios.allow_ip" name="default_params.netbios.allow_ip">default_params.netbios.allow_ip</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.netbios.allow_ip<br/>&nbsp;--default_params.netbios.no-allow_ip<br/>**Variable d'environnement** : DEFAULT_PARAMS.NETBIOS.ALLOW_IP | Le nom de domaine peut être une IP. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.netbios.allow_cidr_network" name="default_params.netbios.allow_cidr_network">default_params.netbios.allow_cidr_network</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.netbios.allow_cidr_network<br/>&nbsp;--default_params.netbios.no-allow_cidr_network<br/>**Variable d'environnement** : DEFAULT_PARAMS.NETBIOS.ALLOW_CIDR_NETWORK | Le nom de domaine peut être un réseau au format CIDR. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.netbios.allow_startswith_dot" name="default_params.netbios.allow_startswith_dot">default_params.netbios.allow_startswith_dot</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.netbios.allow_startswith_dot<br/>&nbsp;--default_params.netbios.no-allow_startswith_dot<br/>**Variable d'environnement** : DEFAULT_PARAMS.NETBIOS.ALLOW_STARTSWITH_DOT | Le nom de domaine peut démarré par un point. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
### Domainname
> [!NOTE]
>
> **Chemin** : default_params.domainname\
> `standard`
| Variable | Description | Valeur par défaut | Type | Contrôle des accès | Validateur |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------|-------------------------------------------------------------------------------------------|
| **<a id="default_params.domainname.type" name="default_params.domainname.type">default_params.domainname.type</a>**<br/>**Ligne de commande** : --default_params.domainname.type<br/>**Variable d'environnement** : DEFAULT_PARAMS.DOMAINNAME.TYPE | Type de nom de domaine. | domainname | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | **Choix** : <br/>&nbsp;domainname<br/>&nbsp;netbios<br/>&nbsp;hostname<br/>&nbsp;null |
| **<a id="default_params.domainname.allow_without_dot" name="default_params.domainname.allow_without_dot">default_params.domainname.allow_without_dot</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.domainname.allow_without_dot<br/>&nbsp;--default_params.domainname.no-allow_without_dot<br/>**Variable d'environnement** : DEFAULT_PARAMS.DOMAINNAME.ALLOW_WITHOUT_DOT | Le nom de domaine peut être un nom d&#x27;hôte. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.domainname.test_existence" name="default_params.domainname.test_existence">default_params.domainname.test_existence</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.domainname.test_existence<br/>&nbsp;--default_params.domainname.no-test_existence<br/>**Variable d'environnement** : DEFAULT_PARAMS.DOMAINNAME.TEST_EXISTENCE | Le nom de domaine doit exister. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.domainname.allow_ip" name="default_params.domainname.allow_ip">default_params.domainname.allow_ip</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.domainname.allow_ip<br/>&nbsp;--default_params.domainname.no-allow_ip<br/>**Variable d'environnement** : DEFAULT_PARAMS.DOMAINNAME.ALLOW_IP | Le nom de domaine peut être une IP. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.domainname.allow_cidr_network" name="default_params.domainname.allow_cidr_network">default_params.domainname.allow_cidr_network</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.domainname.allow_cidr_network<br/>&nbsp;--default_params.domainname.no-allow_cidr_network<br/>**Variable d'environnement** : DEFAULT_PARAMS.DOMAINNAME.ALLOW_CIDR_NETWORK | Le nom de domaine peut être un réseau au format CIDR. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.domainname.allow_startswith_dot" name="default_params.domainname.allow_startswith_dot">default_params.domainname.allow_startswith_dot</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.domainname.allow_startswith_dot<br/>&nbsp;--default_params.domainname.no-allow_startswith_dot<br/>**Variable d'environnement** : DEFAULT_PARAMS.DOMAINNAME.ALLOW_STARTSWITH_DOT | Le nom de domaine peut démarré par un point. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
### Hostname
> [!NOTE]
>
> **Chemin** : default_params.hostname\
> `standard`
| Variable | Description | Valeur par défaut | Type | Contrôle des accès | Validateur |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------|-------------------------------------------------------------------------------------------|
| **<a id="default_params.hostname.type" name="default_params.hostname.type">default_params.hostname.type</a>**<br/>**Ligne de commande** : --default_params.hostname.type<br/>**Variable d'environnement** : DEFAULT_PARAMS.HOSTNAME.TYPE | Type de nom de domaine. | hostname | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | **Choix** : <br/>&nbsp;domainname<br/>&nbsp;netbios<br/>&nbsp;hostname<br/>&nbsp;null |
| **<a id="default_params.hostname.allow_without_dot" name="default_params.hostname.allow_without_dot">default_params.hostname.allow_without_dot</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.hostname.allow_without_dot<br/>&nbsp;--default_params.hostname.no-allow_without_dot<br/>**Variable d'environnement** : DEFAULT_PARAMS.HOSTNAME.ALLOW_WITHOUT_DOT | Le nom de domaine peut être un nom d&#x27;hôte. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.hostname.test_existence" name="default_params.hostname.test_existence">default_params.hostname.test_existence</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.hostname.test_existence<br/>&nbsp;--default_params.hostname.no-test_existence<br/>**Variable d'environnement** : DEFAULT_PARAMS.HOSTNAME.TEST_EXISTENCE | Le nom de domaine doit exister. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.hostname.allow_ip" name="default_params.hostname.allow_ip">default_params.hostname.allow_ip</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.hostname.allow_ip<br/>&nbsp;--default_params.hostname.no-allow_ip<br/>**Variable d'environnement** : DEFAULT_PARAMS.HOSTNAME.ALLOW_IP | Le nom de domaine peut être une IP. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.hostname.allow_cidr_network" name="default_params.hostname.allow_cidr_network">default_params.hostname.allow_cidr_network</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.hostname.allow_cidr_network<br/>&nbsp;--default_params.hostname.no-allow_cidr_network<br/>**Variable d'environnement** : DEFAULT_PARAMS.HOSTNAME.ALLOW_CIDR_NETWORK | Le nom de domaine peut être un réseau au format CIDR. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.hostname.allow_startswith_dot" name="default_params.hostname.allow_startswith_dot">default_params.hostname.allow_startswith_dot</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.hostname.allow_startswith_dot<br/>&nbsp;--default_params.hostname.no-allow_startswith_dot<br/>**Variable d'environnement** : DEFAULT_PARAMS.HOSTNAME.ALLOW_STARTSWITH_DOT | Le nom de domaine peut démarré par un point. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
### Web address
> [!NOTE]
>
> **Chemin** : default_params.web_address\
> `standard`
| Variable | Description | Valeur par défaut | Type | Contrôle des accès | Validateur |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------|-------------------------------------------------------------------------------------------|
| **<a id="default_params.web_address.type" name="default_params.web_address.type">default_params.web_address.type</a>**<br/>**Ligne de commande** : --default_params.web_address.type<br/>**Variable d'environnement** : DEFAULT_PARAMS.WEB_ADDRESS.TYPE | Type de nom de domaine. | domainname | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | **Choix** : <br/>&nbsp;domainname<br/>&nbsp;netbios<br/>&nbsp;hostname<br/>&nbsp;null |
| **<a id="default_params.web_address.allow_without_dot" name="default_params.web_address.allow_without_dot">default_params.web_address.allow_without_dot</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.web_address.allow_without_dot<br/>&nbsp;--default_params.web_address.no-allow_without_dot<br/>**Variable d'environnement** : DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_WITHOUT_DOT | Le nom de domaine peut être un nom d&#x27;hôte. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.test_existence" name="default_params.web_address.test_existence">default_params.web_address.test_existence</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.web_address.test_existence<br/>&nbsp;--default_params.web_address.no-test_existence<br/>**Variable d'environnement** : DEFAULT_PARAMS.WEB_ADDRESS.TEST_EXISTENCE | Le nom de domaine doit exister. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_ip" name="default_params.web_address.allow_ip">default_params.web_address.allow_ip</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.web_address.allow_ip<br/>&nbsp;--default_params.web_address.no-allow_ip<br/>**Variable d'environnement** : DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_IP | Le nom de domaine peut être une IP. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_cidr_network" name="default_params.web_address.allow_cidr_network">default_params.web_address.allow_cidr_network</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.web_address.allow_cidr_network<br/>&nbsp;--default_params.web_address.no-allow_cidr_network<br/>**Variable d'environnement** : DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_CIDR_NETWORK | Le nom de domaine peut être un réseau au format CIDR. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_startswith_dot" name="default_params.web_address.allow_startswith_dot">default_params.web_address.allow_startswith_dot</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.web_address.allow_startswith_dot<br/>&nbsp;--default_params.web_address.no-allow_startswith_dot<br/>**Variable d'environnement** : DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_STARTSWITH_DOT | Le nom de domaine peut démarré par un point. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_range" name="default_params.web_address.allow_range">default_params.web_address.allow_range</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.web_address.allow_range<br/>&nbsp;--default_params.web_address.no-allow_range<br/>**Variable d'environnement** : DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_RANGE | Peut être une plage de port. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_protocol" name="default_params.web_address.allow_protocol">default_params.web_address.allow_protocol</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.web_address.allow_protocol<br/>&nbsp;--default_params.web_address.no-allow_protocol<br/>**Variable d'environnement** : DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_PROTOCOL | Peut avoir le protocole. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_zero" name="default_params.web_address.allow_zero">default_params.web_address.allow_zero</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.web_address.allow_zero<br/>&nbsp;--default_params.web_address.no-allow_zero<br/>**Variable d'environnement** : DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_ZERO | Port 0 est autorisé. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_wellknown" name="default_params.web_address.allow_wellknown">default_params.web_address.allow_wellknown</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.web_address.allow_wellknown<br/>&nbsp;--default_params.web_address.no-allow_wellknown<br/>**Variable d'environnement** : DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_WELLKNOWN | Les ports connus (1 à 1023) sont autorisés. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_registred" name="default_params.web_address.allow_registred">default_params.web_address.allow_registred</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.web_address.allow_registred<br/>&nbsp;--default_params.web_address.no-allow_registred<br/>**Variable d'environnement** : DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_REGISTRED | Les ports enregistrés (1024 à 49151) sont autorisés. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_private" name="default_params.web_address.allow_private">default_params.web_address.allow_private</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.web_address.allow_private<br/>&nbsp;--default_params.web_address.no-allow_private<br/>**Variable d'environnement** : DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_PRIVATE | Les ports privés (supérieur à 49152) sont autorisés. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
### Port
> [!NOTE]
>
> **Chemin** : default_params.port\
> `standard`
| Variable | Description | Valeur par défaut | Type | Contrôle des accès |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------|
| **<a id="default_params.port.allow_range" name="default_params.port.allow_range">default_params.port.allow_range</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.port.allow_range<br/>&nbsp;--default_params.port.no-allow_range<br/>**Variable d'environnement** : DEFAULT_PARAMS.PORT.ALLOW_RANGE | Peut être une plage de port. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.port.allow_protocol" name="default_params.port.allow_protocol">default_params.port.allow_protocol</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.port.allow_protocol<br/>&nbsp;--default_params.port.no-allow_protocol<br/>**Variable d'environnement** : DEFAULT_PARAMS.PORT.ALLOW_PROTOCOL | Peut avoir le protocole. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.port.allow_zero" name="default_params.port.allow_zero">default_params.port.allow_zero</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.port.allow_zero<br/>&nbsp;--default_params.port.no-allow_zero<br/>**Variable d'environnement** : DEFAULT_PARAMS.PORT.ALLOW_ZERO | Port 0 est autorisé. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.port.allow_wellknown" name="default_params.port.allow_wellknown">default_params.port.allow_wellknown</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.port.allow_wellknown<br/>&nbsp;--default_params.port.no-allow_wellknown<br/>**Variable d'environnement** : DEFAULT_PARAMS.PORT.ALLOW_WELLKNOWN | Les ports connus (1 à 1023) sont autorisés. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.port.allow_registred" name="default_params.port.allow_registred">default_params.port.allow_registred</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.port.allow_registred<br/>&nbsp;--default_params.port.no-allow_registred<br/>**Variable d'environnement** : DEFAULT_PARAMS.PORT.ALLOW_REGISTRED | Les ports enregistrés (1024 à 49151) sont autorisés. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.port.allow_private" name="default_params.port.allow_private">default_params.port.allow_private</a>**<br/>**Ligne de commande** : <br/>&nbsp;--default_params.port.allow_private<br/>&nbsp;--default_params.port.no-allow_private<br/>**Variable d'environnement** : DEFAULT_PARAMS.PORT.ALLOW_PRIVATE | Les ports privés (supérieur à 49152) sont autorisés. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |

287
README.md
View file

@ -1,210 +1,105 @@
![Logo Rougail](logo.png "logo rougail")
# Rougail
## Description
Rougail is a free full-featured configuration manager library written in python3.
The configuration is describe in YAML dictionary files.
Those dictionaries are converted into [Tiramisu](https://framagit.org/tiramisu/tiramisu) objects.
Rougail can be incorporated with other technologies and stacks regardless of whether theyre written in Python or not.
## Simple example
Create a directory:
```bash
# mkdir dict
```
## Dictionary
A dictionary is a variables description file.
Create the file `dict/dictionary.yml`:
```yml
---
gitea: none
include_toc: true
---
[🇬🇧 (EN)](README.md) - [🇫🇷 (FR)](README.fr.md)
version: 1.1
# describe a variable my_first_variable
# and a family with a variable my_second_variable
my_first_variable: my_value
my_family:
my_second_variable: 1
```
| Variable | Description | Default value | Type | Access control | Validator |
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|------------------|----------------------------------------------------------------------------------------------------------------------------------|
| **<a id="default_structural_format_version" name="default_structural_format_version">default_structural_format_version</a>**<br/>**Command line**: -v, --default_structural_format_version<br/>**Environment variable**: DEFAULT_STRUCTURAL_FORMAT_VERSION | Default version of the structural file format.<br/>This value is only used if the version is not set in the structural file. | | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | **Choices**: <br/>&nbsp;1.0<br/>&nbsp;1.1<br/>&nbsp;null |
| **<a id="functions_files" name="functions_files">functions_files</a>**<br/>**Command line**: -c, --functions_files<br/>**Environment variable**: FUNCTIONS_FILES | File with functions.<br/>This file contains filters and additional Jinja2 functions usable in structure files. | | [`UNIX filename`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | `unique`<br/>&nbsp;this filename could be a relative path<br/>&nbsp;this file must exist<br/>&nbsp;file type allowed: "file". |
| **<a id="modes_level" name="modes_level">modes_level</a>**<br/>**Command line**: --modes_level<br/>**Environment variable**: MODES_LEVEL | All modes level available. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | `unique` |
| **<a id="default_family_mode" name="default_family_mode">default_family_mode</a>**<br/>**Environment variable**: DEFAULT_FAMILY_MODE | Default mode for a family. | the first one defined in "[All modes level available](#modes_level)" | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | This mode must be available in "[All modes level available](#modes_level)". |
| **<a id="default_variable_mode" name="default_variable_mode">default_variable_mode</a>**<br/>**Environment variable**: DEFAULT_VARIABLE_MODE | Default mode for a variable. | if the variable "[All modes level available](#modes_level)" is defined, the default value is the second available element, otherwise, the first | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | This mode must be available in "[All modes level available](#modes_level)". |
| **<a id="base_option_name" name="base_option_name">base_option_name</a>**<br/>**Environment variable**: BASE_OPTION_NAME | Option name for the base option. | baseoption | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="export_with_import" name="export_with_import">export_with_import</a>**<br/>**Environment variable**: EXPORT_WITH_IMPORT | In cache file, do not importation of Tiramisu and other dependencies. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="tiramisu_cache" name="tiramisu_cache">tiramisu_cache</a>**<br/>**Command line**: -t, --tiramisu_cache<br/>**Environment variable**: TIRAMISU_CACHE | Store Tiramisu cache filename.<br/>This file contains the Tiramisu instructions used internally to load the variables.<br/>This file can be used for debugging. | | [`UNIX filename`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | •&nbsp;this filename could be a relative path<br/>&nbsp;file type allowed: "file". |
| **<a id="internal_functions" name="internal_functions">internal_functions</a>**<br/>**Environment variable**: INTERNAL_FUNCTIONS | Name of internal functions that we can use as a function. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | |
| **<a id="extra_annotators" name="extra_annotators">extra_annotators</a>**<br/>**Environment variable**: EXTRA_ANNOTATORS | Name of extra annotators. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | |
| **<a id="suffix" name="suffix">suffix</a>**<br/>**Environment variable**: SUFFIX | Suffix add to generated options name. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="force_optional" name="force_optional">force_optional</a>**<br/>**Command line**: <br/>&nbsp;--force_optional<br/>&nbsp;--no-force_optional<br/>**Environment variable**: FORCE_OPTIONAL | Every variables in calculation are optionals. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | `standard` | |
| **<a id="load_unexist_redefine" name="load_unexist_redefine">load_unexist_redefine</a>**<br/>**Environment variable**: LOAD_UNEXIST_REDEFINE | Loads redefine variables even if there don&#x27;t already exists. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
## Generate variable
## The secret manager
### With commandline:
> [!NOTE]
>
> **Path**: secret_manager\
> `standard`
```bash
# rougail -m dict
Variables:
┣━━ 📓 my_first_variable: my_value
┗━━ 📂 my_family
┗━━ 📓 my_second_variable: 1
| Variable | Description | Default value | Type | Access control |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------|------------------------------------------------------------------------------------------------|------------------|
| **<a id="secret_manager.pattern" name="secret_manager.pattern">secret_manager.pattern</a>**<br/>**Command line**: --secret_manager.pattern<br/>**Environment variable**: SECRET_MANAGER.PATTERN | The secret pattern to constructing the name of the item searched for in the secret manager.<br/>The pattern is in Jinja2 format. | {{ project }} - {{ environment }} - {{ service }} - {{ user }} | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | `standard` |
```
## Load and exporter steps
### With default value:
> [!NOTE]
>
> **Path**: step\
> `standard`
Here is a python3 example file:
| Variable | Description | Default value | Type | Access control | Validator |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------|------------------|------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **<a id="step.structural" name="step.structural">step.structural</a>**<br/>**Environment variable**: STEP.STRUCTURAL | Select for structural. | •&nbsp;directory | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | **Choices**: <br/>&nbsp;directory<br/>&nbsp;string<br/>&nbsp;commandline<br/>&nbsp;risotto<br/>&nbsp;bitwarden |
| **<a id="step.user_data" name="step.user_data">step.user_data</a>**<br/>**Command line**: -u, --step.user_data<br/>**Environment variable**: STEP.USER_DATA | Select for user datas. | | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` *`disabled`*<br/>**Disabled**: _('cannot load user data for doc output') | `unique`<br/>**Choices**: <br/>&nbsp;yaml<br/>&nbsp;environment<br/>&nbsp;commandline<br/>&nbsp;ansible<br/>&nbsp;questionary<br/>&nbsp;risotto<br/>&nbsp;bitwarden |
| **<a id="step.output" name="step.output">step.output</a>**<br/>**Command line**: -o, --step.output<br/>**Environment variable**: STEP.OUTPUT | Select for output. | display | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | `standard` | **Choices**: <br/>&nbsp;display<br/>&nbsp;json<br/>&nbsp;doc<br/>&nbsp;table<br/>&nbsp;ansible |
```python
from rougail import Rougail, RougailConfig
from pprint import pprint
| Variable | Description | Default value | Type | Access control |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------|-----------------|-------------------------------------------------------------------------------------------------|------------------|
| **<a id="define_default_params" name="define_default_params">define_default_params</a>**<br/>**Command line**: <br/>&nbsp;--define_default_params<br/>&nbsp;--no-define_default_params<br/>**Environment variable**: DEFINE_DEFAULT_PARAMS | Override default parameters for option type. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | `standard` |
RougailConfig['dictionaries_dir'] = ['dict']
rougail = Rougail()
config = rougail.run()
pprint(config.value.get(), sort_dicts=False)
```
## Default parameters for option type
The result is:
> [!NOTE]
>
> **Path**: default_params\
> `standard` *`disabled`*\
> **Disabled**: when the variable "[Override default parameters for option type](#define_default_params)" has the value "false"
```json
{<TiramisuOption path="rougail">: {<TiramisuOption path="rougail.my_first_variable">: 'my_value',
<TiramisuOption path="rougail.my_family">: {<TiramisuOption path="rougail.my_family.my_second_variable">: 1}}}
```
### UNIX filename
> [!NOTE]
>
> **Path**: default_params.unix_filename\
> `standard`
| Variable | Description | Default value | Type | Access control | Validator |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------|----------------------------------|-----------------------------------------------------------------------------------------------|------------------|-----------------------------------------------------------------|
| **<a id="default_params.unix_filename.allow_relative" name="default_params.unix_filename.allow_relative">default_params.unix_filename.allow_relative</a>**<br/>**Command line**: <br/>&nbsp;--default_params.unix_filename.allow_relative<br/>&nbsp;--default_params.unix_filename.no-allow_relative<br/>**Environment variable**: DEFAULT_PARAMS.UNIX_FILENAME.ALLOW_RELATIVE | This filename could be a relative path. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.unix_filename.test_existence" name="default_params.unix_filename.test_existence">default_params.unix_filename.test_existence</a>**<br/>**Command line**: <br/>&nbsp;--default_params.unix_filename.test_existence<br/>&nbsp;--default_params.unix_filename.no-test_existence<br/>**Environment variable**: DEFAULT_PARAMS.UNIX_FILENAME.TEST_EXISTENCE | This file must exist. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.unix_filename.types" name="default_params.unix_filename.types">default_params.unix_filename.types</a>**<br/>**Command line**: --default_params.unix_filename.types<br/>**Environment variable**: DEFAULT_PARAMS.UNIX_FILENAME.TYPES | File type allowed. | •&nbsp;file<br/>&nbsp;directory | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | `unique`<br/>**Choices**: <br/>&nbsp;file<br/>&nbsp;directory |
### IP
> [!NOTE]
>
> **Path**: default_params.ip\
> `standard`
| Variable | Description | Default value | Type | Access control |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|-----------------|-------------------------------------------------------------------------------------|------------------|
| **<a id="default_params.ip.private_only" name="default_params.ip.private_only">default_params.ip.private_only</a>**<br/>**Command line**: <br/>&nbsp;--default_params.ip.private_only<br/>&nbsp;--default_params.ip.no-private_only<br/>**Environment variable**: DEFAULT_PARAMS.IP.PRIVATE_ONLY | Private IP are allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.ip.allow_reserved" name="default_params.ip.allow_reserved">default_params.ip.allow_reserved</a>**<br/>**Command line**: <br/>&nbsp;--default_params.ip.allow_reserved<br/>&nbsp;--default_params.ip.no-allow_reserved<br/>**Environment variable**: DEFAULT_PARAMS.IP.ALLOW_RESERVED | Reserved IP are allowed. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.ip.cidr" name="default_params.ip.cidr">default_params.ip.cidr</a>**<br/>**Command line**: <br/>&nbsp;--default_params.ip.cidr<br/>&nbsp;--default_params.ip.no-cidr<br/>**Environment variable**: DEFAULT_PARAMS.IP.CIDR | IP must be in CIDR format. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
### CIDR
> [!NOTE]
>
> **Path**: default_params.cidr\
> `standard`
| Variable | Description | Default value | Type | Access control |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|-----------------|-------------------------------------------------------------------------------------|------------------|
| **<a id="default_params.cidr.private_only" name="default_params.cidr.private_only">default_params.cidr.private_only</a>**<br/>**Command line**: <br/>&nbsp;--default_params.cidr.private_only<br/>&nbsp;--default_params.cidr.no-private_only<br/>**Environment variable**: DEFAULT_PARAMS.CIDR.PRIVATE_ONLY | Private IP are allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.cidr.allow_reserved" name="default_params.cidr.allow_reserved">default_params.cidr.allow_reserved</a>**<br/>**Command line**: <br/>&nbsp;--default_params.cidr.allow_reserved<br/>&nbsp;--default_params.cidr.no-allow_reserved<br/>**Environment variable**: DEFAULT_PARAMS.CIDR.ALLOW_RESERVED | Reserved IP are allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.cidr.cidr" name="default_params.cidr.cidr">default_params.cidr.cidr</a>**<br/>**Command line**: <br/>&nbsp;--default_params.cidr.cidr<br/>&nbsp;--default_params.cidr.no-cidr<br/>**Environment variable**: DEFAULT_PARAMS.CIDR.CIDR | IP must be in CIDR format. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
### Network
> [!NOTE]
>
> **Path**: default_params.network\
> `standard`
| Variable | Description | Default value | Type | Access control |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------|-----------------|-------------------------------------------------------------------------------------|------------------|
| **<a id="default_params.network.private_only" name="default_params.network.private_only">default_params.network.private_only</a>**<br/>**Command line**: <br/>&nbsp;--default_params.network.private_only<br/>&nbsp;--default_params.network.no-private_only<br/>**Environment variable**: DEFAULT_PARAMS.NETWORK.PRIVATE_ONLY | Private network are allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.network.allow_reserved" name="default_params.network.allow_reserved">default_params.network.allow_reserved</a>**<br/>**Command line**: <br/>&nbsp;--default_params.network.allow_reserved<br/>&nbsp;--default_params.network.no-allow_reserved<br/>**Environment variable**: DEFAULT_PARAMS.NETWORK.ALLOW_RESERVED | Reserved network are allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.network.cidr" name="default_params.network.cidr">default_params.network.cidr</a>**<br/>**Command line**: <br/>&nbsp;--default_params.network.cidr<br/>&nbsp;--default_params.network.no-cidr<br/>**Environment variable**: DEFAULT_PARAMS.NETWORK.CIDR | Network must be in CIDR format. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
### Network CIDR
> [!NOTE]
>
> **Path**: default_params.network_cidr\
> `standard`
| Variable | Description | Default value | Type | Access control |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------|-----------------|-------------------------------------------------------------------------------------|------------------|
| **<a id="default_params.network_cidr.private_only" name="default_params.network_cidr.private_only">default_params.network_cidr.private_only</a>**<br/>**Command line**: <br/>&nbsp;--default_params.network_cidr.private_only<br/>&nbsp;--default_params.network_cidr.no-private_only<br/>**Environment variable**: DEFAULT_PARAMS.NETWORK_CIDR.PRIVATE_ONLY | Private network are allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.network_cidr.allow_reserved" name="default_params.network_cidr.allow_reserved">default_params.network_cidr.allow_reserved</a>**<br/>**Command line**: <br/>&nbsp;--default_params.network_cidr.allow_reserved<br/>&nbsp;--default_params.network_cidr.no-allow_reserved<br/>**Environment variable**: DEFAULT_PARAMS.NETWORK_CIDR.ALLOW_RESERVED | Reserved network are allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.network_cidr.cidr" name="default_params.network_cidr.cidr">default_params.network_cidr.cidr</a>**<br/>**Command line**: <br/>&nbsp;--default_params.network_cidr.cidr<br/>&nbsp;--default_params.network_cidr.no-cidr<br/>**Environment variable**: DEFAULT_PARAMS.NETWORK_CIDR.CIDR | Network must be in CIDR format. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
### Netbios
> [!NOTE]
>
> **Path**: default_params.netbios\
> `standard`
| Variable | Description | Default value | Type | Access control | Validator |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------|-----------------|-------------------------------------------------------------------------------------|------------------|--------------------------------------------------------------------------------------------|
| **<a id="default_params.netbios.type" name="default_params.netbios.type">default_params.netbios.type</a>**<br/>**Command line**: --default_params.netbios.type<br/>**Environment variable**: DEFAULT_PARAMS.NETBIOS.TYPE | Type of domainname. | netbios | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | **Choices**: <br/>&nbsp;domainname<br/>&nbsp;netbios<br/>&nbsp;hostname<br/>&nbsp;null |
| **<a id="default_params.netbios.allow_without_dot" name="default_params.netbios.allow_without_dot">default_params.netbios.allow_without_dot</a>**<br/>**Command line**: <br/>&nbsp;--default_params.netbios.allow_without_dot<br/>&nbsp;--default_params.netbios.no-allow_without_dot<br/>**Environment variable**: DEFAULT_PARAMS.NETBIOS.ALLOW_WITHOUT_DOT | The domain name can be a hostname. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.netbios.test_existence" name="default_params.netbios.test_existence">default_params.netbios.test_existence</a>**<br/>**Command line**: <br/>&nbsp;--default_params.netbios.test_existence<br/>&nbsp;--default_params.netbios.no-test_existence<br/>**Environment variable**: DEFAULT_PARAMS.NETBIOS.TEST_EXISTENCE | The domain name must exist. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.netbios.allow_ip" name="default_params.netbios.allow_ip">default_params.netbios.allow_ip</a>**<br/>**Command line**: <br/>&nbsp;--default_params.netbios.allow_ip<br/>&nbsp;--default_params.netbios.no-allow_ip<br/>**Environment variable**: DEFAULT_PARAMS.NETBIOS.ALLOW_IP | The domain name can be an IP. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.netbios.allow_cidr_network" name="default_params.netbios.allow_cidr_network">default_params.netbios.allow_cidr_network</a>**<br/>**Command line**: <br/>&nbsp;--default_params.netbios.allow_cidr_network<br/>&nbsp;--default_params.netbios.no-allow_cidr_network<br/>**Environment variable**: DEFAULT_PARAMS.NETBIOS.ALLOW_CIDR_NETWORK | The domain name can be network in CIDR format. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.netbios.allow_startswith_dot" name="default_params.netbios.allow_startswith_dot">default_params.netbios.allow_startswith_dot</a>**<br/>**Command line**: <br/>&nbsp;--default_params.netbios.allow_startswith_dot<br/>&nbsp;--default_params.netbios.no-allow_startswith_dot<br/>**Environment variable**: DEFAULT_PARAMS.NETBIOS.ALLOW_STARTSWITH_DOT | The domain name can starts by a dot. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
### Domainname
> [!NOTE]
>
> **Path**: default_params.domainname\
> `standard`
| Variable | Description | Default value | Type | Access control | Validator |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------|-----------------|-------------------------------------------------------------------------------------|------------------|--------------------------------------------------------------------------------------------|
| **<a id="default_params.domainname.type" name="default_params.domainname.type">default_params.domainname.type</a>**<br/>**Command line**: --default_params.domainname.type<br/>**Environment variable**: DEFAULT_PARAMS.DOMAINNAME.TYPE | Type of domainname. | domainname | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | **Choices**: <br/>&nbsp;domainname<br/>&nbsp;netbios<br/>&nbsp;hostname<br/>&nbsp;null |
| **<a id="default_params.domainname.allow_without_dot" name="default_params.domainname.allow_without_dot">default_params.domainname.allow_without_dot</a>**<br/>**Command line**: <br/>&nbsp;--default_params.domainname.allow_without_dot<br/>&nbsp;--default_params.domainname.no-allow_without_dot<br/>**Environment variable**: DEFAULT_PARAMS.DOMAINNAME.ALLOW_WITHOUT_DOT | The domain name can be a hostname. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.domainname.test_existence" name="default_params.domainname.test_existence">default_params.domainname.test_existence</a>**<br/>**Command line**: <br/>&nbsp;--default_params.domainname.test_existence<br/>&nbsp;--default_params.domainname.no-test_existence<br/>**Environment variable**: DEFAULT_PARAMS.DOMAINNAME.TEST_EXISTENCE | The domain name must exist. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.domainname.allow_ip" name="default_params.domainname.allow_ip">default_params.domainname.allow_ip</a>**<br/>**Command line**: <br/>&nbsp;--default_params.domainname.allow_ip<br/>&nbsp;--default_params.domainname.no-allow_ip<br/>**Environment variable**: DEFAULT_PARAMS.DOMAINNAME.ALLOW_IP | The domain name can be an IP. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.domainname.allow_cidr_network" name="default_params.domainname.allow_cidr_network">default_params.domainname.allow_cidr_network</a>**<br/>**Command line**: <br/>&nbsp;--default_params.domainname.allow_cidr_network<br/>&nbsp;--default_params.domainname.no-allow_cidr_network<br/>**Environment variable**: DEFAULT_PARAMS.DOMAINNAME.ALLOW_CIDR_NETWORK | The domain name can be network in CIDR format. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.domainname.allow_startswith_dot" name="default_params.domainname.allow_startswith_dot">default_params.domainname.allow_startswith_dot</a>**<br/>**Command line**: <br/>&nbsp;--default_params.domainname.allow_startswith_dot<br/>&nbsp;--default_params.domainname.no-allow_startswith_dot<br/>**Environment variable**: DEFAULT_PARAMS.DOMAINNAME.ALLOW_STARTSWITH_DOT | The domain name can starts by a dot. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
### Hostname
> [!NOTE]
>
> **Path**: default_params.hostname\
> `standard`
| Variable | Description | Default value | Type | Access control | Validator |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------|-----------------|-------------------------------------------------------------------------------------|------------------|--------------------------------------------------------------------------------------------|
| **<a id="default_params.hostname.type" name="default_params.hostname.type">default_params.hostname.type</a>**<br/>**Command line**: --default_params.hostname.type<br/>**Environment variable**: DEFAULT_PARAMS.HOSTNAME.TYPE | Type of domainname. | hostname | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | **Choices**: <br/>&nbsp;domainname<br/>&nbsp;netbios<br/>&nbsp;hostname<br/>&nbsp;null |
| **<a id="default_params.hostname.allow_without_dot" name="default_params.hostname.allow_without_dot">default_params.hostname.allow_without_dot</a>**<br/>**Command line**: <br/>&nbsp;--default_params.hostname.allow_without_dot<br/>&nbsp;--default_params.hostname.no-allow_without_dot<br/>**Environment variable**: DEFAULT_PARAMS.HOSTNAME.ALLOW_WITHOUT_DOT | The domain name can be a hostname. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.hostname.test_existence" name="default_params.hostname.test_existence">default_params.hostname.test_existence</a>**<br/>**Command line**: <br/>&nbsp;--default_params.hostname.test_existence<br/>&nbsp;--default_params.hostname.no-test_existence<br/>**Environment variable**: DEFAULT_PARAMS.HOSTNAME.TEST_EXISTENCE | The domain name must exist. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.hostname.allow_ip" name="default_params.hostname.allow_ip">default_params.hostname.allow_ip</a>**<br/>**Command line**: <br/>&nbsp;--default_params.hostname.allow_ip<br/>&nbsp;--default_params.hostname.no-allow_ip<br/>**Environment variable**: DEFAULT_PARAMS.HOSTNAME.ALLOW_IP | The domain name can be an IP. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.hostname.allow_cidr_network" name="default_params.hostname.allow_cidr_network">default_params.hostname.allow_cidr_network</a>**<br/>**Command line**: <br/>&nbsp;--default_params.hostname.allow_cidr_network<br/>&nbsp;--default_params.hostname.no-allow_cidr_network<br/>**Environment variable**: DEFAULT_PARAMS.HOSTNAME.ALLOW_CIDR_NETWORK | The domain name can be network in CIDR format. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.hostname.allow_startswith_dot" name="default_params.hostname.allow_startswith_dot">default_params.hostname.allow_startswith_dot</a>**<br/>**Command line**: <br/>&nbsp;--default_params.hostname.allow_startswith_dot<br/>&nbsp;--default_params.hostname.no-allow_startswith_dot<br/>**Environment variable**: DEFAULT_PARAMS.HOSTNAME.ALLOW_STARTSWITH_DOT | The domain name can starts by a dot. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
### Web address
> [!NOTE]
>
> **Path**: default_params.web_address\
> `standard`
| Variable | Description | Default value | Type | Access control | Validator |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|-----------------|-------------------------------------------------------------------------------------|------------------|--------------------------------------------------------------------------------------------|
| **<a id="default_params.web_address.type" name="default_params.web_address.type">default_params.web_address.type</a>**<br/>**Command line**: --default_params.web_address.type<br/>**Environment variable**: DEFAULT_PARAMS.WEB_ADDRESS.TYPE | Type of domainname. | domainname | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | **Choices**: <br/>&nbsp;domainname<br/>&nbsp;netbios<br/>&nbsp;hostname<br/>&nbsp;null |
| **<a id="default_params.web_address.allow_without_dot" name="default_params.web_address.allow_without_dot">default_params.web_address.allow_without_dot</a>**<br/>**Command line**: <br/>&nbsp;--default_params.web_address.allow_without_dot<br/>&nbsp;--default_params.web_address.no-allow_without_dot<br/>**Environment variable**: DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_WITHOUT_DOT | The domain name can be a hostname. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.test_existence" name="default_params.web_address.test_existence">default_params.web_address.test_existence</a>**<br/>**Command line**: <br/>&nbsp;--default_params.web_address.test_existence<br/>&nbsp;--default_params.web_address.no-test_existence<br/>**Environment variable**: DEFAULT_PARAMS.WEB_ADDRESS.TEST_EXISTENCE | The domain name must exist. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_ip" name="default_params.web_address.allow_ip">default_params.web_address.allow_ip</a>**<br/>**Command line**: <br/>&nbsp;--default_params.web_address.allow_ip<br/>&nbsp;--default_params.web_address.no-allow_ip<br/>**Environment variable**: DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_IP | The domain name can be an IP. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_cidr_network" name="default_params.web_address.allow_cidr_network">default_params.web_address.allow_cidr_network</a>**<br/>**Command line**: <br/>&nbsp;--default_params.web_address.allow_cidr_network<br/>&nbsp;--default_params.web_address.no-allow_cidr_network<br/>**Environment variable**: DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_CIDR_NETWORK | The domain name can be network in CIDR format. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_startswith_dot" name="default_params.web_address.allow_startswith_dot">default_params.web_address.allow_startswith_dot</a>**<br/>**Command line**: <br/>&nbsp;--default_params.web_address.allow_startswith_dot<br/>&nbsp;--default_params.web_address.no-allow_startswith_dot<br/>**Environment variable**: DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_STARTSWITH_DOT | The domain name can starts by a dot. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_range" name="default_params.web_address.allow_range">default_params.web_address.allow_range</a>**<br/>**Command line**: <br/>&nbsp;--default_params.web_address.allow_range<br/>&nbsp;--default_params.web_address.no-allow_range<br/>**Environment variable**: DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_RANGE | Can be range of port. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_protocol" name="default_params.web_address.allow_protocol">default_params.web_address.allow_protocol</a>**<br/>**Command line**: <br/>&nbsp;--default_params.web_address.allow_protocol<br/>&nbsp;--default_params.web_address.no-allow_protocol<br/>**Environment variable**: DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_PROTOCOL | Can have the protocol. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_zero" name="default_params.web_address.allow_zero">default_params.web_address.allow_zero</a>**<br/>**Command line**: <br/>&nbsp;--default_params.web_address.allow_zero<br/>&nbsp;--default_params.web_address.no-allow_zero<br/>**Environment variable**: DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_ZERO | Port 0 is allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_wellknown" name="default_params.web_address.allow_wellknown">default_params.web_address.allow_wellknown</a>**<br/>**Command line**: <br/>&nbsp;--default_params.web_address.allow_wellknown<br/>&nbsp;--default_params.web_address.no-allow_wellknown<br/>**Environment variable**: DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_WELLKNOWN | Well-known ports (1 to 1023) are allowed. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_registred" name="default_params.web_address.allow_registred">default_params.web_address.allow_registred</a>**<br/>**Command line**: <br/>&nbsp;--default_params.web_address.allow_registred<br/>&nbsp;--default_params.web_address.no-allow_registred<br/>**Environment variable**: DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_REGISTRED | Registred ports (1024 to 49151) are allowed. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
| **<a id="default_params.web_address.allow_private" name="default_params.web_address.allow_private">default_params.web_address.allow_private</a>**<br/>**Command line**: <br/>&nbsp;--default_params.web_address.allow_private<br/>&nbsp;--default_params.web_address.no-allow_private<br/>**Environment variable**: DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_PRIVATE | Private ports (greater than 49152) are allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | |
### Port
> [!NOTE]
>
> **Path**: default_params.port\
> `standard`
| Variable | Description | Default value | Type | Access control |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|-----------------|-------------------------------------------------------------------------------------|------------------|
| **<a id="default_params.port.allow_range" name="default_params.port.allow_range">default_params.port.allow_range</a>**<br/>**Command line**: <br/>&nbsp;--default_params.port.allow_range<br/>&nbsp;--default_params.port.no-allow_range<br/>**Environment variable**: DEFAULT_PARAMS.PORT.ALLOW_RANGE | Can be range of port. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.port.allow_protocol" name="default_params.port.allow_protocol">default_params.port.allow_protocol</a>**<br/>**Command line**: <br/>&nbsp;--default_params.port.allow_protocol<br/>&nbsp;--default_params.port.no-allow_protocol<br/>**Environment variable**: DEFAULT_PARAMS.PORT.ALLOW_PROTOCOL | Can have the protocol. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.port.allow_zero" name="default_params.port.allow_zero">default_params.port.allow_zero</a>**<br/>**Command line**: <br/>&nbsp;--default_params.port.allow_zero<br/>&nbsp;--default_params.port.no-allow_zero<br/>**Environment variable**: DEFAULT_PARAMS.PORT.ALLOW_ZERO | Port 0 is allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.port.allow_wellknown" name="default_params.port.allow_wellknown">default_params.port.allow_wellknown</a>**<br/>**Command line**: <br/>&nbsp;--default_params.port.allow_wellknown<br/>&nbsp;--default_params.port.no-allow_wellknown<br/>**Environment variable**: DEFAULT_PARAMS.PORT.ALLOW_WELLKNOWN | Well-known ports (1 to 1023) are allowed. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.port.allow_registred" name="default_params.port.allow_registred">default_params.port.allow_registred</a>**<br/>**Command line**: <br/>&nbsp;--default_params.port.allow_registred<br/>&nbsp;--default_params.port.no-allow_registred<br/>**Environment variable**: DEFAULT_PARAMS.PORT.ALLOW_REGISTRED | Registred ports (1024 to 49151) are allowed. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
| **<a id="default_params.port.allow_private" name="default_params.port.allow_private">default_params.port.allow_private</a>**<br/>**Command line**: <br/>&nbsp;--default_params.port.allow_private<br/>&nbsp;--default_params.port.no-allow_private<br/>**Environment variable**: DEFAULT_PARAMS.PORT.ALLOW_PRIVATE | Private ports (greater than 49152) are allowed. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` |
### With modified value
Use [Tiramisu](https://framagit.org/tiramisu/tiramisu) API to change values:
```python
from rougail import Rougail, RougailConfig
from pprint import pprint
RougailConfig['dictionaries_dir'] = ['dict']
rougail = Rougail()
config = rougail.get_config()
config.option('rougail.my_first_variable').value.set('modified_value')
config.option('rougail.my_family.my_second_variable').value.set(2)
pprint(config.value.get(), sort_dicts=False)
```
The destination file is generated with new values:
```json
{<TiramisuOption path="rougail">: {<TiramisuOption path="rougail.my_first_variable">: 'modified_value',
<TiramisuOption path="rougail.my_family">: {<TiramisuOption path="rougail.my_family.my_second_variable">: 2}}}
```
# Link
* [Documentation](https://rougail.readthedocs.io/en/latest/)
* [Licence ](LICENSE)
# Related projects
* [Tiramisu](https://forge.cloud.silique.fr/gnunux/tiramisu)
* [Risotto](https://cloud.silique.fr/gitea/risotto/risotto)

View file

@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2025-12-22 08:45+0100\n"
"PO-Revision-Date: 2025-12-22 08:46+0100\n"
"POT-Creation-Date: 2025-11-21 08:31+0100\n"
"PO-Revision-Date: 2025-11-21 08:31+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: fr\n"
@ -185,146 +185,79 @@ msgid ""
msgstr ""
"la variable \"{0}\" a la valeur par défaut invalide \"{1}\" devrait être {2}"
#: src/rougail/config/__init__.py:271
msgid "Default version of the structural file format"
msgstr "Version par défaut du format des fichiers de structure"
#: src/rougail/config/__init__.py:272
msgid ""
"This value is only used if the version is not set in the structural file"
#: src/rougail/config/__init__.py:276
msgid "Structure format version by default, if not specified in structure file"
msgstr ""
"Cette valeur n'est utilisée que si la version n'est pas définie dans le "
"La version du format de la structure par défaut, si non spécifier dans le "
"fichier de structure"
#: src/rougail/config/__init__.py:280
#: src/rougail/config/__init__.py:284
msgid "File with functions"
msgstr "Fichier avec les fonctions"
#: src/rougail/config/__init__.py:281
msgid ""
"This file contains filters and additional Jinja2 functions usable in "
"structure files"
msgstr ""
"Ce fichier contient des filtres et des fonctions Jinja2 supplémentaires "
"utilisables dans les fichiers de structure"
#: src/rougail/config/__init__.py:293
#: src/rougail/config/__init__.py:296
msgid "All modes level available"
msgstr "Tous les niveaux de modes valides"
#: src/rougail/config/__init__.py:305
#: src/rougail/config/__init__.py:308
msgid "Default mode for a family"
msgstr "Mode par défaut pour une famille"
#: src/rougail/config/__init__.py:311
msgid "the first one defined in \"modes_level\""
msgstr "le premier défini dans \"modes_level\""
#: src/rougail/config/__init__.py:317 src/rougail/config/__init__.py:344
msgid "when no mode is defined in \"modes_level\""
msgstr "si aucun mode n'est défini dans \"modes_level\""
#: src/rougail/config/__init__.py:324 src/rougail/config/__init__.py:351
msgid "this mode must be available in \"modes_level\""
msgstr "ce mode doit être disponible dans \"modes_level\""
#: src/rougail/config/__init__.py:328
msgid "Default mode for a variable"
msgstr "Mode par défaut pour une variable"
#: src/rougail/config/__init__.py:338
msgid ""
"if the variable \"modes_level\" is defined, the default value is the second "
"available element, otherwise, the first"
msgstr ""
"si la variable \"modes_level\" est définit, la valeur par défaut est le "
"second élément disponible, sinon, le premier"
#: src/rougail/config/__init__.py:355
#: src/rougail/config/__init__.py:352
msgid "Option name for the base option"
msgstr "Nom de l'option pour l'option de base"
#: src/rougail/config/__init__.py:360
#: src/rougail/config/__init__.py:357
msgid "In cache file, do not importation of Tiramisu and other dependencies"
msgstr ""
"Dans le fichier de cache, ne pas importer Tiramisu et autres dépendances"
#: src/rougail/config/__init__.py:365
#, fuzzy
#| msgid "Store tiramisu cache filename"
msgid "Store Tiramisu cache filename"
msgstr "Enregistrer le cache Tiramisu dans le fichier"
#: src/rougail/config/__init__.py:362
msgid "Tiramisu cache filename"
msgstr "Nom du fichier du cache Tiramisu"
#: src/rougail/config/__init__.py:366
msgid ""
"This file contains the Tiramisu instructions used internally to load the "
"variables.\n"
"\n"
"This file can be used for debugging"
msgstr ""
"Ce fichier contient les instructions Tiramisu utilisé en interne pour "
"charger les variables.\n"
"\n"
"Ce fichier peut être utilisé pour le débogage."
#: src/rougail/config/__init__.py:376
#: src/rougail/config/__init__.py:370
msgid "Name of internal functions that we can use as a function"
msgstr ""
"Nom des fonctions internes qu'il est possible d'utiliser comme fonction"
#: src/rougail/config/__init__.py:382
#: src/rougail/config/__init__.py:376
msgid "Name of extra annotators"
msgstr "Nom des annotators supplémentaires"
#: src/rougail/config/__init__.py:388
#: src/rougail/config/__init__.py:382
msgid "Suffix add to generated options name"
msgstr "Suffix ajouté pour généré le nom des options"
#: src/rougail/config/__init__.py:394
#: src/rougail/config/__init__.py:388
msgid "Every variables in calculation are optionals"
msgstr "Toutes les variables dans un calcul sont optionnelles"
#: src/rougail/config/__init__.py:398
#: src/rougail/config/__init__.py:392
msgid "Loads redefine variables even if there don't already exists"
msgstr "Charger les variables redéfinis même si elles n'existe pas"
#: src/rougail/config/__init__.py:402
msgid "The secret manager"
msgstr "Le gestionnaire de secret"
#: src/rougail/config/__init__.py:399
msgid "The secret pattern to build item name in Bitwarden"
msgstr "Le patron de secret pour construire le nom de l'élément dans Bitwarden"
#: src/rougail/config/__init__.py:405
msgid ""
"The secret pattern to constructing the name of the item searched for in the "
"secret manager"
msgstr ""
"Le modèle de secret permettant de construire le nom de l'élément recherché "
"dans le gestionnaire de secrets"
#: src/rougail/config/__init__.py:400
msgid "The pattern is in Jinja format"
msgstr "Le patron est au format Jinja"
#: src/rougail/config/__init__.py:406
msgid "The pattern is in Jinja2 format"
msgstr "Le modèle est au format Jinja2"
#: src/rougail/config/__init__.py:415
msgid "structural"
msgstr "structure"
#: src/rougail/config/__init__.py:416
msgid "user datas"
msgstr "données utilisateur"
#: src/rougail/config/__init__.py:417
msgid "output"
msgstr "sortie"
#: src/rougail/config/__init__.py:438
#: src/rougail/config/__init__.py:428
msgid "Select for {0}"
msgstr "Sélection pour {0}"
#: src/rougail/config/__init__.py:500
#: src/rougail/config/__init__.py:508
msgid "Override default parameters for option type"
msgstr "Sur charger les paramètre par défaut pour le type d'option"
#: src/rougail/config/__init__.py:503
#: src/rougail/config/__init__.py:511
msgid "Default parameters for option type"
msgstr "Paramètre par défaut pour le type d'option"
@ -363,42 +296,42 @@ msgstr ""
"définition invalide pour la définition des \"structures\" ({0}), aucun "
"fichier de structure ne peut être chargé !"
#: src/rougail/convert/object_model.py:132
#: src/rougail/convert/object_model.py:121
msgid "cannot find variable \"{0}\" defined in attribute \"{1}\" for \"{2}\""
msgstr ""
"ne peut trouver la variable \"{0}\" défini dans l'attribut \"{1}\" pour "
"\"{2}\""
#: src/rougail/convert/object_model.py:138
#: src/rougail/convert/object_model.py:127
msgid ""
"the variable \"{0}\" is in fact a family in attribute \"{1}\" for \"{2}\""
msgstr ""
"la variable \"{0}\" est en faite une famille dans l'attribut \"{1}\" pour "
"\"{2}\""
#: src/rougail/convert/object_model.py:143
#: src/rougail/convert/object_model.py:527
#: src/rougail/convert/object_model.py:132
#: src/rougail/convert/object_model.py:513
msgid "unknown object \"{0}\" in attribute \"{1}\" for \"{2}\""
msgstr "objet inconnu \"{0}\" dans l'attribut \"{1}\" pour \"{2}\""
#: src/rougail/convert/object_model.py:162
#: src/rougail/convert/object_model.py:151
msgid ""
"identifier parameter for \"{0}\" in \"{1}\" cannot be set none dynamic family"
msgstr ""
"le paramètre identifier pour \"{0}\" dans \"{1}\" ne peut être placé pour "
"une famille non dynamique"
#: src/rougail/convert/object_model.py:191
#: src/rougail/convert/object_model.py:180
msgid "cannot find variable \"{0}\" defined in \"{1}\" for \"{2}\""
msgstr "ne peut trouver la variable \"{0}\" défini dans \"{1}\" pour \"{2}\""
#: src/rougail/convert/object_model.py:196
#: src/rougail/convert/object_model.py:185
msgid "variable \"{0}\" defined in \"{1}\" for \"{2}\" is a dynamic variable"
msgstr ""
"la variable \"{0}\" défini dans \"{1}\" pour \"{2}\" est une variable "
"dynamique"
#: src/rougail/convert/object_model.py:213
#: src/rougail/convert/object_model.py:202
msgid ""
"the variable \"{0}\" is not a follower, so cannot have index type for param "
"in \"{1}\""
@ -406,7 +339,7 @@ msgstr ""
"la variable \"{0}\" n'est pas suiveuse, donc ne peut avoir de type index "
"comme paramètre dans \"{1}\""
#: src/rougail/convert/object_model.py:263
#: src/rougail/convert/object_model.py:252
msgid ""
"\"warnings\" are only available with attribute \"{self.attribute_name}\" for "
"variable \"{self.ori_path}\""
@ -414,16 +347,16 @@ msgstr ""
"\"warnings\" est seulement utilisable avec l'attribut \"{self.attribute_name}"
"\" pour la variable \"{self.ori_path}\""
#: src/rougail/convert/object_model.py:325
#: src/rougail/convert/object_model.py:314
msgid ""
"the variable \"{0}\" has a depreciated return_type \"{1}\", please use "
"\"{2}\" instead in {3}"
"\"{2}\" instead in \"{3}\""
msgstr ""
"la variable \"{0}\" a un attribut return_type déprécié \"{1}\", veuillez "
"utiliser \"{2}\" au lieu de \"{3}\""
"utiliser\"{2}\" au lieu de \"{3}\""
#: src/rougail/convert/object_model.py:415
#: src/rougail/convert/object_model.py:446
#: src/rougail/convert/object_model.py:404
#: src/rougail/convert/object_model.py:435
msgid ""
"variable \"{0}\" has a calculating \"{1}\" with an invalid return_type, "
"should be boolean or string, not \"{2}\""
@ -431,7 +364,7 @@ msgstr ""
"la variable \"{0}\" a un calcul \"{1}\" avec un return_type invalide, "
"devrait être un booléen ou une chaîne de caractère, et pas \"{2}\""
#: src/rougail/convert/object_model.py:422
#: src/rougail/convert/object_model.py:411
msgid ""
"the variable \"{0}\" has a return_type \"{1}\", for attribute \"{2}\" but "
"has not description in {3}"
@ -439,11 +372,11 @@ msgstr ""
"la variable \"{0}\" a un return_type \"{1}\", pour l'attribut \"{2}\" mais "
"n'a pas de description dans {3}"
#: src/rougail/convert/object_model.py:427
#: src/rougail/convert/object_model.py:416
msgid "value is invalid"
msgstr "la valeur est invalide"
#: src/rougail/convert/object_model.py:522
#: src/rougail/convert/object_model.py:508
msgid ""
"a variable \"{0}\" is needs in attribute \"{1}\" for \"{2}\" but it's a "
"family"
@ -451,7 +384,7 @@ msgstr ""
"une variable \"{0}\" est nécessaire pour l'attribut \"{1}\" pour \"{2}\" "
"mais c'est une famille"
#: src/rougail/convert/object_model.py:547
#: src/rougail/convert/object_model.py:533
msgid ""
"variable \"{0}\" has an attribute \"{1}\" calculated with the unknown "
"variable \"{2}\""
@ -459,7 +392,7 @@ msgstr ""
"la variable \"{0}\" a un attribut invalide \"{1}\" calculé avec la variable "
"inconnue \"{2}\""
#: src/rougail/convert/object_model.py:599
#: src/rougail/convert/object_model.py:585
msgid ""
"the variable \"{0}\" has an invalid \"{1}\" the variable \"{2}\" is in a sub "
"dynamic option"
@ -467,14 +400,14 @@ msgstr ""
"la variable \"{0}\" a un attribut invalide \"{1}\", la variable \"{2}\" est "
"dans une sous option dynamique"
#: src/rougail/convert/object_model.py:608
#: src/rougail/convert/object_model.py:594
msgid ""
"the leader \"{0}\" has an invalid \"{1}\" the follower \"{2}\" is a multi"
msgstr ""
"la variable meneuse \"{0}\" a un attribut invalide \"{1}\", la variable "
"suiveuse \"{2}\" est multiple"
#: src/rougail/convert/object_model.py:650
#: src/rougail/convert/object_model.py:636
msgid ""
"the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" "
"must not be multi"
@ -482,7 +415,7 @@ msgstr ""
"la variable \"{0}\" a un attribut invalide \"{1}\", la variable \"{2}\" ne "
"doit pas être multiple"
#: src/rougail/convert/object_model.py:664
#: src/rougail/convert/object_model.py:650
msgid ""
"the variable \"{0}\" has an invalid attribute \"{1}\", the variable must not "
"be a multi or the variable \"{2}\" must be multi"
@ -490,7 +423,7 @@ msgstr ""
"la variable \"{0}\" a un attribut invalide \"{1}\", la variable ne doit pas "
"être multiple ou la variable \"{2}\" doit être multiple"
#: src/rougail/convert/object_model.py:678
#: src/rougail/convert/object_model.py:664
msgid ""
"the variable \"{0}\" has an invalid attribute \"{1}\", the variable must be "
"a multi or the variable \"{2}\" must not be multi"
@ -498,7 +431,7 @@ msgstr ""
"la variable \"{0}\" a un attribut invalide \"{1}\", la variable doit être "
"multiple ou la variable \"{2}\" ne doit pas être multiple"
#: src/rougail/convert/object_model.py:692
#: src/rougail/convert/object_model.py:678
msgid ""
"the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" "
"is multi but is inside a list"
@ -506,7 +439,7 @@ msgstr ""
"la variable \"{0}\" a un attribut invalide \"{1}\", la variable \"{2}\" est "
"multiple mais est dans une liste"
#: src/rougail/convert/object_model.py:714
#: src/rougail/convert/object_model.py:700
msgid ""
"the variable \"{0}\" is waiting for a list as \"{1}\" but the attribute "
"\"default\" is not a list (\"{2}\")"
@ -514,7 +447,7 @@ msgstr ""
"la variable \"{0}\" attend une liste comme \"{1}\" mais l'attribut "
"\"default\" n'est pas une liste \"{2}\""
#: src/rougail/convert/object_model.py:718
#: src/rougail/convert/object_model.py:704
msgid ""
"the variable \"{0}\" is not waiting for a list as \"{1}\" but the attribute "
"\"default\" is a list (\"{2}\")"
@ -522,7 +455,7 @@ msgstr ""
"la variable \"{0}\" n'attend pas une liste comme \"{1}\" mais l'attribut "
"\"default\" est une liste \"{2}\""
#: src/rougail/convert/object_model.py:740
#: src/rougail/convert/object_model.py:726
msgid ""
"\"{0}\" attribut shall not have an \"optional\" attribute without the "
"\"default\" attribute for variable \"{1}\""
@ -530,7 +463,7 @@ msgstr ""
"l'attribut \"{0}\" ne devrait pas avoir d'attribut \"optional\" sans "
"l'attribut \"default\" pour la variable \"{1}\""
#: src/rougail/convert/object_model.py:762
#: src/rougail/convert/object_model.py:748
msgid ""
"variable \"{0}\" has a default value calculated with \"{1}\" which has "
"incompatible type"
@ -538,7 +471,7 @@ msgstr ""
"la variable \"{0}\" a une valeur par défaut calculé a partir de \"{1}\" "
"laquelle a un type incompatible"
#: src/rougail/convert/object_model.py:804
#: src/rougail/convert/object_model.py:790
msgid ""
"the variable \"{0}\" is waiting for a boolean as \"{1}\" but the attribute "
"\"default\" is not a boolean (\"{2}\")"
@ -546,7 +479,7 @@ msgstr ""
"la variable \"{0}\" attend un booléan comme \"{1}\" mais l'attribut "
"\"default\" n'est pas une booléan (\"{2}\")"
#: src/rougail/convert/object_model.py:826
#: src/rougail/convert/object_model.py:812
msgid ""
"\"when\" is not allowed in format version 1.0 for attribute \"{0}\" for "
"variable \"{1}\""
@ -554,7 +487,7 @@ msgstr ""
"\"when\" n'est pas autorisé avec le format en version 1.0 pour l'attribut "
"\"{0}\" pour la variable \"{1}\""
#: src/rougail/convert/object_model.py:831
#: src/rougail/convert/object_model.py:817
msgid ""
"the variable \"{0}\" has an invalid attribute \"{1}\", \"when\" and "
"\"when_not\" cannot set together"
@ -562,7 +495,7 @@ msgstr ""
"la variable \"{0}\" a un attribut invalide \"{1}\", \"when\" et \"when_not\" "
"ne peuvent pas être défini ensemble"
#: src/rougail/convert/object_model.py:839
#: src/rougail/convert/object_model.py:825
msgid ""
"\"when_not\" is not allowed in format version 1.0 for attribute \"{0}\" for "
"variable \"{1}\""
@ -570,15 +503,7 @@ msgstr ""
"\"when_not\" n'est pas autorisé au format 1.0 pour l'attribut \"{0}\" pour "
"la variable variable \"{1}\""
#: src/rougail/convert/object_model.py:850
msgid ""
"\"when\" or \"when_not\" is mandatory for the not boolean variable \"{0}\" "
"in attribute \"{1}\""
msgstr ""
"\"when\" ou \"when_not\" est obligatoire pour la variable non booléenne "
"\"{0}\" dans l'attribut \"{1}\""
#: src/rougail/convert/object_model.py:898
#: src/rougail/convert/object_model.py:881
msgid ""
"cannot find variable \"{0}\" for the information \"{1}\" when calculating "
"\"{2}\""
@ -586,19 +511,19 @@ msgstr ""
"ne peut trouver la variable \"{0}\" pour l'information \"{1}\" lors du "
"calcul de \"{2}\""
#: src/rougail/convert/object_model.py:903
#: src/rougail/convert/object_model.py:886
msgid ""
"identifier not allowed for the information \"{0}\" when calculating \"{1}\""
msgstr ""
"identifier n'est pas autorisé pour l'information \"{0}\" lors du calcul de "
"\"{1}\""
#: src/rougail/convert/object_model.py:955
#: src/rougail/convert/object_model.py:938
msgid "\"when\" is not allowed in format version 1.0 for attribute \"{0}\""
msgstr "\"when\" n'est pas autorisé au format 1.0 pour l'attribut \"{0}\""
#: src/rougail/convert/object_model.py:961
#: src/rougail/convert/object_model.py:971
#: src/rougail/convert/object_model.py:944
#: src/rougail/convert/object_model.py:954
msgid ""
"the identifier has an invalid attribute \"{0}\", \"when\" and \"when_not\" "
"cannot set together"
@ -606,7 +531,7 @@ msgstr ""
"l'identifiant a un attribut invalide \"{0}\", \"when\" et \"when_not\" ne "
"peuvent pas être défini ensemble"
#: src/rougail/convert/object_model.py:997
#: src/rougail/convert/object_model.py:980
msgid ""
"the variable \"{0}\" is not a follower, so cannot have index type for \"{1}\""
msgstr ""
@ -621,36 +546,20 @@ msgstr ""
"Une variable ou une famille localisé dans l'espace de nom \"{0}\" ne devrait "
"pas être utilisé dans l'espace de nom \"{1}\""
#: src/rougail/convert/tiramisureflector.py:348
msgid ""
"variable param \"{0}\" has whole attribute but it's not allowed for external "
"variable"
msgstr ""
"le paramètre de la variable \"{0}\" a un attribut whole mais ce n'est pas "
"autorisé pour une variable externe"
#: src/rougail/convert/tiramisureflector.py:351
msgid ""
"variable param \"{0}\" has dynamic attribute but it's not allowed for "
"external variable"
msgstr ""
"le paramètre de la variable \"{0}\" a un attribut dynamique mais ce n'est "
"pas autorisé pour une variable externe"
#: src/rougail/convert/tiramisureflector.py:360
#: src/rougail/convert/tiramisureflector.py:353
msgid "internal error, {0} is not a dynamic variable"
msgstr "erreur interne, \"{0}\" n'est pas une variable dynamique"
#: src/rougail/error.py:61 src/rougail/tiramisu.py:235
#: src/rougail/user_data.py:452 src/rougail/user_data.py:455
#: src/rougail/error.py:61 src/rougail/tiramisu.py:162
#: src/rougail/user_datas.py:412 src/rougail/user_datas.py:415
msgid "{0} in {1}"
msgstr "{0} dans {1}"
#: src/rougail/structural_commandline/annotator.py:67
#: src/rougail/structural_commandline/annotator.py:66
msgid "alternative_name \"{0}\" conflict with \"--help\""
msgstr "alternative_name \"{0}\" est en conflit avec \"--help\""
#: src/rougail/structural_commandline/annotator.py:72
#: src/rougail/structural_commandline/annotator.py:71
msgid "conflict alternative_name \"{0}\": \"{1}\" and \"{2}\""
msgstr "conflit dans les \"alternative_name\" \"{0}\": \"{1}\" et \"{2}\""
@ -659,33 +568,21 @@ msgid "duplicate structural file name {0}"
msgstr "nom de fichier {0} de structure dupliqué"
#: src/rougail/structural_directory/config.py:32
msgid "Main namespace name"
msgstr "Nom de l'espace de nom principal"
#: src/rougail/structural_directory/config.py:40
msgid "directory or string is not in \"_.step.structural\""
msgstr "directory ou string n'est pas dans \"_.step.structural\""
#: src/rougail/structural_directory/config.py:43
msgid "Directories where structural files are placed"
msgstr "Répertoires où sont placés les fichiers de structure"
#: src/rougail/structural_directory/config.py:60
#: src/rougail/structural_directory/config.py:49
msgid "Sort structural from differents directories"
msgstr "Trier les fichiers de structure à partir de différents répertoires"
#: src/rougail/structural_directory/config.py:58
msgid "Main namespace name"
msgstr "Nom de l'espace de nom principal"
#: src/rougail/structural_directory/config.py:69
msgid "Namespaces are isolated"
msgstr "Les espaces de noms sont isolés"
#: src/rougail/structural_directory/config.py:75
msgid ""
"directory or string is not in \"_.step.structural\" or \"_.main_namespace\" "
"is not set"
msgstr ""
"directory ou string n'est pas dans \"_.step.structural\" ou "
"\"_.main_namespace\" n'est pas défini"
#: src/rougail/structural_directory/config.py:78
msgid "Extra namespaces"
msgstr "Espaces de nom supplémentaires"
@ -700,234 +597,48 @@ msgstr ""
"Répertoires où sont placés les fichiers de structure de l'espace de nom "
"supplémentaire"
#: src/rougail/structural_directory/config.py:106
msgid "directory is not in \"__.step.structural\""
msgstr "directory n'est pas dans \"__.step.structural\""
#: src/rougail/structural_string/config.py:32
msgid "Structural files contents"
msgstr "Contenu des fichiers de structure"
#: src/rougail/structural_string/config.py:33
#: src/rougail/structural_string/config.py:51
msgid "This variable is a list of string with YAML file format"
msgstr ""
"Cette variable est une liste de chaîne de caractère avec le format d'un "
"fichier YAML"
#: src/rougail/structural_string/config.py:45
msgid "string is not in \"_.step.structural\""
msgstr "string n'est pas dans \"_.step.structural\""
#: src/rougail/structural_string/config.py:50
msgid "Extra structural contents"
msgstr "Contenu de structure supplémentaire"
#: src/rougail/structural_string/config.py:58
msgid "string is not in \"__.step.structural\""
msgstr "string n'est pas dans \"__.step.structural\""
#: src/rougail/tiramisu.py:83
msgid "unknown boolean value \"{0}\""
msgstr "valeur du booléen inconnue \"{0}\""
#: src/rougail/tiramisu.py:86
msgid "IP must be in CIDR format"
msgstr "l'IP doit être au format CIDR"
#: src/rougail/tiramisu.py:87
msgid "private IP are allowed"
msgstr "les IP privées sont autorisées"
#: src/rougail/tiramisu.py:88
msgid "reserved IP are allowed"
msgstr "les IP réservées sont autorisés"
#: src/rougail/tiramisu.py:91
msgid "network must be in CIDR format"
msgstr "le réseau doit être au format CIDR"
#: src/rougail/tiramisu.py:92
msgid "private network are allowed"
msgstr "les réseaux privés sont autorisés"
#: src/rougail/tiramisu.py:93
msgid "reserved network are allowed"
msgstr "les réseaux réservés sont autorisés"
#: src/rougail/tiramisu.py:96
msgid "can be range of port"
msgstr "peut être une plage de port"
#: src/rougail/tiramisu.py:97
msgid "can have the protocol"
msgstr "peut avoir le protocole"
#: src/rougail/tiramisu.py:98
msgid "port 0 is allowed"
msgstr "port 0 est autorisé"
#: src/rougail/tiramisu.py:99
msgid "well-known ports (1 to 1023) are allowed"
msgstr "les ports connus (1 à 1023) sont autorisés"
#: src/rougail/tiramisu.py:100
msgid "registred ports (1024 to 49151) are allowed"
msgstr "les ports enregistrés (1024 à 49151) sont autorisés"
#: src/rougail/tiramisu.py:101
msgid "private ports (greater than 49152) are allowed"
msgstr "les ports privés (supérieur à 49152) sont autorisés"
#: src/rougail/tiramisu.py:104
msgid "type of domainname"
msgstr "type de nom de domaine"
#: src/rougail/tiramisu.py:104
msgid "type {0}"
msgstr "type de {0}"
#: src/rougail/tiramisu.py:105
msgid "the domain name can starts by a dot"
msgstr "le nom de domaine peut démarré par un point"
#: src/rougail/tiramisu.py:106
msgid "the domain name can be a hostname"
msgstr "le nom de domaine peut être un nom d'hôte"
#: src/rougail/tiramisu.py:107
msgid "the domain name can be an IP"
msgstr "le nom de domaine peut être une IP"
#: src/rougail/tiramisu.py:108
msgid "the domain name can be network in CIDR format"
msgstr "le nom de domaine peut être un réseau au format CIDR"
#: src/rougail/tiramisu.py:109
msgid "the domain name must exist"
msgstr "le nom de domaine doit exister"
#: src/rougail/tiramisu.py:119 src/rougail/tiramisu.py:125
msgid "the minimum value"
msgstr "la valeur minimale"
#: src/rougail/tiramisu.py:119 src/rougail/tiramisu.py:125
msgid "the minimum value is {0}"
msgstr "la valeur minimale est {0}"
#: src/rougail/tiramisu.py:120 src/rougail/tiramisu.py:126
msgid "the maximum value"
msgstr "la valeur maximale"
#: src/rougail/tiramisu.py:120 src/rougail/tiramisu.py:126
msgid "the maximum value is {0}"
msgstr "la valeur maximale est {0}"
#: src/rougail/tiramisu.py:135
msgid "minimum characters length for the secret"
msgstr "longueur minimum de caractère pour un secret"
#: src/rougail/tiramisu.py:135
msgid "minimum length for the secret is {0} characters"
msgstr "longueur minimum pour un secret est de {0} caractères"
#: src/rougail/tiramisu.py:136
msgid "maximum characters length for the secret"
msgstr "longueur maximum de caractère pour un secret"
#: src/rougail/tiramisu.py:136
msgid "maximum length for the secret is {0} characters"
msgstr "longueur maximum pour un secret est de {0} caractères"
#: src/rougail/tiramisu.py:137
msgid "forbidden characters"
msgstr "caractères interdits"
#: src/rougail/tiramisu.py:137
msgid "forbidden characters: {0}"
msgstr "caractères interdits: {0}"
#: src/rougail/tiramisu.py:144
msgid "this filename could be a relative path"
msgstr "le nom de fichier peut être une chemin relatif"
#: src/rougail/tiramisu.py:145
msgid "this file must exist"
msgstr "le fichier doit exister"
#: src/rougail/tiramisu.py:146
msgid "file type allowed"
msgstr "type de fichier autorisé"
#: src/rougail/tiramisu.py:146
msgid "file type allowed: {0}"
msgstr "type de fichier autorisé: {0}"
#: src/rougail/tiramisu.py:436
msgid "cannot calculate the variable \"{0}\""
msgstr "ne peut calculer la variable \"{0}\""
#: src/rougail/tiramisu.py:437
#: src/rougail/tiramisu.py:335
msgid ""
"the attribute \"{0}\" in {1} with the parameters \"{2}\" causes the error: "
"{3}"
"cannot calculating \"{0}\" attribute for variable \"{1}\" in {2} with "
"parameters \"{3}\": {4}"
msgstr ""
"l'attribut \"{0}\" dans {1} avec les paramètres \"{2}\" provoque l'erreur : "
"{3}"
"ne peut calculer l'attribut \"{0}\" pour la variable \"{1}\" dans {2} avec "
"les paramètres \"{3}\" : {4}"
#: src/rougail/tiramisu.py:455
msgid "cannot converting the variable \"{0}\""
msgstr "ne peut convertir la variable \"{0}\""
#: src/rougail/tiramisu.py:456
msgid "\"{0}\" is an invalid {1}"
msgstr "\"{0}\" est un {1} invalide"
#: src/rougail/tiramisu.py:458
msgid "the attribute \"{0}\" in {1} causes the error: {2}"
msgstr "l'attribut \"{0}\" dans {1} provoque l'erreur : {2}"
#: src/rougail/user_data.py:146
#: src/rougail/user_datas.py:145
msgid ""
"cannot load variable path \"{0}\", the identifier \"{1}\" is not valid in {2}"
msgstr ""
"ne peut charger la variable \"{0}\", l'identifiant \"{1}\" n'est pas valide "
"dans {2}"
#: src/rougail/user_data.py:230
msgid "the variable contains secrets and should not be defined in {0}"
#: src/rougail/user_datas.py:229
msgid "the variable \"{0}\" contains secrets and should not be defined in {1}"
msgstr ""
"la variable contient des secrets et ne devrait pas être défini dans {0}"
"la variable \"{0}\" contient des secrets et ne devrait pas être défini dans "
"{1}"
#: src/rougail/user_data.py:269
#: src/rougail/user_datas.py:269
msgid "loaded from {0}"
msgstr "chargée depuis {0}"
#: src/rougail/user_data.py:311
#: src/rougail/user_datas.py:311
msgid ""
"is a family so we cannot set the value \"{0}\", it has been loading from {1}"
"cannot set the value \"{0}\" to the family {1}, it will be ignored when "
"loading from {2}"
msgstr ""
"est une famille donc il n'est pas possible de définir la valeur \"{0}\", "
"elle a été chargée depuis {1}"
"impossible de définir la valeur \"{0}\" à la famille {1}, elle sera ignorée "
"lors du chargement depuis {2}"
#: src/rougail/user_data.py:315
msgid ""
"is a family so we cannot set the value \"{0}\", it will be ignored when "
"loading from {1}"
msgstr ""
"est une famille donc il n'est pas possible de définir la valeur \"{0}\", "
"elle sera ignorée lors du chargement depuis {1}"
#: src/rougail/user_datas.py:322 src/rougail/user_datas.py:339
msgid "{0} loaded from {1}"
msgstr "{0} chargée depuis {1}"
#: src/rougail/user_data.py:326
msgid "{0}, it has been loaded from {1}"
msgstr "{0}, elle a été chargée depuis {1}"
#: src/rougail/user_data.py:332
msgid "variable or family \"{0}\" does not exist, it has been loading from {1}"
msgstr ""
"la variable ou la famille \"{0}\" n'existe pas, elle a été chargée depuis {1}"
#: src/rougail/user_data.py:336
#: src/rougail/user_datas.py:327
msgid ""
"variable or family \"{0}\" does not exist, it will be ignored when loading "
"from {1}"
@ -935,12 +646,7 @@ msgstr ""
"la variable ou la famille \"{0}\" n'existe pas, elle sera ignorée lors du "
"chargement depuis {1}"
#: src/rougail/user_data.py:342
msgid "\"{0}\" is the name of a dynamic family, it has been loading from {1}"
msgstr ""
"\"{0}\" est le nom d'une famille dynamique, elle a été chargée depuis {1}"
#: src/rougail/user_data.py:346
#: src/rougail/user_datas.py:333
msgid ""
"\"{0}\" is the name of a dynamic family, it will be ignored when loading "
"from {1}"
@ -948,16 +654,7 @@ msgstr ""
"\"{0}\" est le nom d'une famille dynamique, il sera ignoré lors du "
"chargement depuis {1}"
#: src/rougail/user_data.py:354
msgid "{0} loaded from {1}"
msgstr "{0} chargée depuis {1}"
#: src/rougail/user_data.py:385
msgid "variable {0} at index \"{1}\" is {2}, it has been loading from {3}"
msgstr ""
"la variable {0} à l'index \"{1}\" est {2}, elle a été chargée depuis {3}"
#: src/rougail/user_data.py:389
#: src/rougail/user_datas.py:369
msgid ""
"variable {0} at index \"{1}\" is {2}, it will be ignored when loading from "
"{3}"
@ -965,50 +662,23 @@ msgstr ""
"la variable {0} à l'index \"{1}\" est {2}, elle sera ignorée lors du "
"chargement depuis {3}"
#: src/rougail/user_data.py:402
msgid "family {0} is {1}, {2} at index \"{3}\", it has been loading from {4}"
msgstr ""
"la famille {0} est {1}, {2} à l'index \"{3}\", elle a été chargée depuis {4}"
#: src/rougail/user_data.py:406
#: src/rougail/user_datas.py:380
msgid ""
"family {0} is {1}, {2} at index \"{3}\", it will be ignored when loading "
"from {4}"
"family {0} is {1}, {2} at index \"{3}\" will be ignored when loading from {4}"
msgstr ""
"la famille {0} est {1}, {2} à l'index \"{3}\", elle a été chargée depuis {4}"
"la famille {0} est {1}, {2} à l'index \"{3}\" sera ignorée lors du "
"chargement depuis {4}"
#: src/rougail/user_data.py:421
msgid "variable is {0}, it has been loading from {1}"
msgstr "la variable est {0}, elle a été chargée depuis {1}"
#: src/rougail/user_data.py:425
msgid "variable is {0}, it will be ignored when loading from {1}"
msgstr "la variable est {0}, elle sera ignorée lors du chargement depuis {1}"
#: src/rougail/user_data.py:435
msgid ""
"family {0} is {1}, so cannot access to {2}, it has been loading from {3}"
#: src/rougail/user_datas.py:393
msgid "variable {0} is {1}, it will be ignored when loading from {2}"
msgstr ""
"la famille {0} est {1}, donc ne peut accéder à {2}, elle a été chargée "
"depuis {3}"
"la variable {0} est {1}, elle sera ignorée lors du chargement depuis {2}"
#: src/rougail/user_data.py:439
msgid ""
"family {0} is {1}, so cannot access to {2}, it will be ignored when loading "
"from {3}"
msgstr ""
"la famille {0} est {1}, donc ne peut accéder à {2}, sera ignorée lors du "
"chargement depuis {3}"
#: src/rougail/user_datas.py:401
msgid "family {0} is {1}, {2} will be ignored when loading from {3}"
msgstr "la famille {0} est {1}, {2} sera ignorée lors du chargement depuis {3}"
#: src/rougail/user_data.py:461
msgid ""
"the value \"{0}\" is an invalid {1} for {2} at index \"{3}\", {4}, it has "
"been loading from {5}"
msgstr ""
"la valeur \"{0}\" est un {1} invalide pour {2} à l'index \"{3}\", {4}, elle "
"a été chargée depuis {5}"
#: src/rougail/user_data.py:465
#: src/rougail/user_datas.py:421
msgid ""
"the value \"{0}\" is an invalid {1} for {2} at index \"{3}\", {4}, it will "
"be ignored when loading from {5}"
@ -1016,18 +686,13 @@ msgstr ""
"la valeur \"{0}\" est un {1} invalide pour {2} à l'index \"{3}\", {4}, elle "
"sera ignorée lors du chargement depuis {5}"
#: src/rougail/user_data.py:481
msgid "the value \"{0}\" is an invalid {1}, {2}, it has been loading from {3}"
msgstr ""
"la valeur \"{0}\" est un {1} invalide pour {2}, elle a été chargée depuis {3}"
#: src/rougail/user_data.py:485
#: src/rougail/user_datas.py:435
msgid ""
"the value \"{0}\" is an invalid {1}, {2}, it will be ignored when loading "
"from {3}"
"the value \"{0}\" is an invalid {1} for {2}, {3}, it will be ignored when "
"loading from {4}"
msgstr ""
"la valeur \"{0}\" est un {1} invalide pour {2}, elle sera ignorée lors du "
"chargement depuis {4}"
"la valeur \"{0}\" est un {1} invalide pour {2}, {3}, elle sera ignorée lors "
"du chargement depuis {4}"
#: src/rougail/utils.py:56
msgid ""
@ -1037,41 +702,30 @@ msgstr ""
"nom invalide pour la variable ou famille \"{0}\" doit seulement contenir des "
"caractères ascii minuscule, nombre or _"
#: src/rougail/utils.py:104
msgid "error for the variable \"{1}\" in jinja \"{0}\": {2}"
msgstr "erreur pour la variable \"{1}\" dans le jinja \"{0}\": {2}"
#: src/rougail/utils.py:103
msgid "error in jinja \"{0}\" for the variable \"{1}\": {2}"
msgstr "erreur dans Jinja \"{0}\" pour la variable \"{1}\": {2}"
#: src/rougail/utils.py:213
#: src/rougail/utils.py:212
msgid "mandatory"
msgstr "obligatoire"
#: src/rougail/utils.py:214
#: src/rougail/utils.py:213
msgid "hidden"
msgstr "cachée"
#: src/rougail/utils.py:215
#: src/rougail/utils.py:214
msgid "disabled"
msgstr "désactivé"
#: src/rougail/utils.py:216
#: src/rougail/utils.py:215
msgid "unique"
msgstr "unique"
#: src/rougail/utils.py:217
#: src/rougail/utils.py:216
msgid "auto modified"
msgstr "auto modifiée"
#~ msgid "The secret pattern to build item name in Bitwarden"
#~ msgstr ""
#~ "Le patron de secret pour construire le nom de l'élément dans Bitwarden"
#~ msgid ""
#~ "cannot calculating \"{0}\" attribute for variable \"{1}\" in {2} with "
#~ "parameters \"{3}\": {4}"
#~ msgstr ""
#~ "ne peut calculer l'attribut \"{0}\" pour la variable \"{1}\" dans {2} "
#~ "avec les paramètres \"{3}\" : {4}"
#, fuzzy
#~| msgid ""
#~| "we need {0} values when there are {{{{ var | length }}}} ({{{{ var | "
@ -1139,6 +793,9 @@ msgstr "auto modifiée"
#~ msgid "error in {0}: {1}"
#~ msgstr "erreur dans {0} : {1}"
#~ msgid "cannot find variable \"{0}\" from {1}: {2}"
#~ msgstr "ne peut trouver la variable \"{0}\" depuis {1} : {2}"
#~ msgid "the option \"{0}\" is an option description"
#~ msgstr "l'option \"{0}\" est une option description"

View file

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2025-12-22 08:46+0100\n"
"POT-Creation-Date: 2025-11-21 08:31+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"
@ -127,122 +127,75 @@ msgstr ""
msgid "the variable \"{0}\" has an unvalid default value \"{1}\" should be in {2}"
msgstr ""
#: src/rougail/config/__init__.py:271
msgid "Default version of the structural file format"
#: src/rougail/config/__init__.py:276
msgid "Structure format version by default, if not specified in structure file"
msgstr ""
#: src/rougail/config/__init__.py:272
msgid "This value is only used if the version is not set in the structural file"
msgstr ""
#: src/rougail/config/__init__.py:280
#: src/rougail/config/__init__.py:284
msgid "File with functions"
msgstr ""
#: src/rougail/config/__init__.py:281
msgid "This file contains filters and additional Jinja2 functions usable in structure files"
msgstr ""
#: src/rougail/config/__init__.py:293
#: src/rougail/config/__init__.py:296
msgid "All modes level available"
msgstr ""
#: src/rougail/config/__init__.py:305
#: src/rougail/config/__init__.py:308
msgid "Default mode for a family"
msgstr ""
#: src/rougail/config/__init__.py:311
msgid "the first one defined in \"modes_level\""
msgstr ""
#: src/rougail/config/__init__.py:317 src/rougail/config/__init__.py:344
msgid "when no mode is defined in \"modes_level\""
msgstr ""
#: src/rougail/config/__init__.py:324 src/rougail/config/__init__.py:351
msgid "this mode must be available in \"modes_level\""
msgstr ""
#: src/rougail/config/__init__.py:328
msgid "Default mode for a variable"
msgstr ""
#: src/rougail/config/__init__.py:338
msgid "if the variable \"modes_level\" is defined, the default value is the second available element, otherwise, the first"
msgstr ""
#: src/rougail/config/__init__.py:355
#: src/rougail/config/__init__.py:352
msgid "Option name for the base option"
msgstr ""
#: src/rougail/config/__init__.py:360
#: src/rougail/config/__init__.py:357
msgid "In cache file, do not importation of Tiramisu and other dependencies"
msgstr ""
#: src/rougail/config/__init__.py:365
msgid "Store Tiramisu cache filename"
#: src/rougail/config/__init__.py:362
msgid "Tiramisu cache filename"
msgstr ""
#: src/rougail/config/__init__.py:366
msgid ""
"This file contains the Tiramisu instructions used internally to load the variables.\n"
"\n"
"This file can be used for debugging"
msgstr ""
#: src/rougail/config/__init__.py:376
#: src/rougail/config/__init__.py:370
msgid "Name of internal functions that we can use as a function"
msgstr ""
#: src/rougail/config/__init__.py:382
#: src/rougail/config/__init__.py:376
msgid "Name of extra annotators"
msgstr ""
#: src/rougail/config/__init__.py:388
#: src/rougail/config/__init__.py:382
msgid "Suffix add to generated options name"
msgstr ""
#: src/rougail/config/__init__.py:394
#: src/rougail/config/__init__.py:388
msgid "Every variables in calculation are optionals"
msgstr ""
#: src/rougail/config/__init__.py:398
#: src/rougail/config/__init__.py:392
msgid "Loads redefine variables even if there don't already exists"
msgstr ""
#: src/rougail/config/__init__.py:402
msgid "The secret manager"
#: src/rougail/config/__init__.py:399
msgid "The secret pattern to build item name in Bitwarden"
msgstr ""
#: src/rougail/config/__init__.py:405
msgid "The secret pattern to constructing the name of the item searched for in the secret manager"
#: src/rougail/config/__init__.py:400
msgid "The pattern is in Jinja format"
msgstr ""
#: src/rougail/config/__init__.py:406
msgid "The pattern is in Jinja2 format"
msgstr ""
#: src/rougail/config/__init__.py:415
msgid "structural"
msgstr ""
#: src/rougail/config/__init__.py:416
msgid "user datas"
msgstr ""
#: src/rougail/config/__init__.py:417
msgid "output"
msgstr ""
#: src/rougail/config/__init__.py:438
#: src/rougail/config/__init__.py:428
msgid "Select for {0}"
msgstr ""
#: src/rougail/config/__init__.py:500
#: src/rougail/config/__init__.py:508
msgid "Override default parameters for option type"
msgstr ""
#: src/rougail/config/__init__.py:503
#: src/rougail/config/__init__.py:511
msgid "Default parameters for option type"
msgstr ""
@ -278,142 +231,138 @@ msgstr ""
msgid "invalid \"structural\" definition ({0}), we cannot load any structural file!"
msgstr ""
#: src/rougail/convert/object_model.py:132
#: src/rougail/convert/object_model.py:121
msgid "cannot find variable \"{0}\" defined in attribute \"{1}\" for \"{2}\""
msgstr ""
#: src/rougail/convert/object_model.py:138
#: src/rougail/convert/object_model.py:127
msgid "the variable \"{0}\" is in fact a family in attribute \"{1}\" for \"{2}\""
msgstr ""
#: src/rougail/convert/object_model.py:143
#: src/rougail/convert/object_model.py:527
#: src/rougail/convert/object_model.py:132
#: src/rougail/convert/object_model.py:513
msgid "unknown object \"{0}\" in attribute \"{1}\" for \"{2}\""
msgstr ""
#: src/rougail/convert/object_model.py:162
#: src/rougail/convert/object_model.py:151
msgid "identifier parameter for \"{0}\" in \"{1}\" cannot be set none dynamic family"
msgstr ""
#: src/rougail/convert/object_model.py:191
#: src/rougail/convert/object_model.py:180
msgid "cannot find variable \"{0}\" defined in \"{1}\" for \"{2}\""
msgstr ""
#: src/rougail/convert/object_model.py:196
#: src/rougail/convert/object_model.py:185
msgid "variable \"{0}\" defined in \"{1}\" for \"{2}\" is a dynamic variable"
msgstr ""
#: src/rougail/convert/object_model.py:213
#: src/rougail/convert/object_model.py:202
msgid "the variable \"{0}\" is not a follower, so cannot have index type for param in \"{1}\""
msgstr ""
#: src/rougail/convert/object_model.py:263
#: src/rougail/convert/object_model.py:252
msgid "\"warnings\" are only available with attribute \"{self.attribute_name}\" for variable \"{self.ori_path}\""
msgstr ""
#: src/rougail/convert/object_model.py:325
msgid "the variable \"{0}\" has a depreciated return_type \"{1}\", please use \"{2}\" instead in {3}"
#: src/rougail/convert/object_model.py:314
msgid "the variable \"{0}\" has a depreciated return_type \"{1}\", please use \"{2}\" instead in \"{3}\""
msgstr ""
#: src/rougail/convert/object_model.py:415
#: src/rougail/convert/object_model.py:446
#: src/rougail/convert/object_model.py:404
#: src/rougail/convert/object_model.py:435
msgid "variable \"{0}\" has a calculating \"{1}\" with an invalid return_type, should be boolean or string, not \"{2}\""
msgstr ""
#: src/rougail/convert/object_model.py:422
#: src/rougail/convert/object_model.py:411
msgid "the variable \"{0}\" has a return_type \"{1}\", for attribute \"{2}\" but has not description in {3}"
msgstr ""
#: src/rougail/convert/object_model.py:427
#: src/rougail/convert/object_model.py:416
msgid "value is invalid"
msgstr ""
#: src/rougail/convert/object_model.py:522
#: src/rougail/convert/object_model.py:508
msgid "a variable \"{0}\" is needs in attribute \"{1}\" for \"{2}\" but it's a family"
msgstr ""
#: src/rougail/convert/object_model.py:547
#: src/rougail/convert/object_model.py:533
msgid "variable \"{0}\" has an attribute \"{1}\" calculated with the unknown variable \"{2}\""
msgstr ""
#: src/rougail/convert/object_model.py:599
#: src/rougail/convert/object_model.py:585
msgid "the variable \"{0}\" has an invalid \"{1}\" the variable \"{2}\" is in a sub dynamic option"
msgstr ""
#: src/rougail/convert/object_model.py:608
#: src/rougail/convert/object_model.py:594
msgid "the leader \"{0}\" has an invalid \"{1}\" the follower \"{2}\" is a multi"
msgstr ""
#: src/rougail/convert/object_model.py:650
#: src/rougail/convert/object_model.py:636
msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" must not be multi"
msgstr ""
#: src/rougail/convert/object_model.py:664
#: src/rougail/convert/object_model.py:650
msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable must not be a multi or the variable \"{2}\" must be multi"
msgstr ""
#: src/rougail/convert/object_model.py:678
#: src/rougail/convert/object_model.py:664
msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable must be a multi or the variable \"{2}\" must not be multi"
msgstr ""
#: src/rougail/convert/object_model.py:692
#: src/rougail/convert/object_model.py:678
msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" is multi but is inside a list"
msgstr ""
#: src/rougail/convert/object_model.py:714
#: src/rougail/convert/object_model.py:700
msgid "the variable \"{0}\" is waiting for a list as \"{1}\" but the attribute \"default\" is not a list (\"{2}\")"
msgstr ""
#: src/rougail/convert/object_model.py:718
#: src/rougail/convert/object_model.py:704
msgid "the variable \"{0}\" is not waiting for a list as \"{1}\" but the attribute \"default\" is a list (\"{2}\")"
msgstr ""
#: src/rougail/convert/object_model.py:740
#: src/rougail/convert/object_model.py:726
msgid "\"{0}\" attribut shall not have an \"optional\" attribute without the \"default\" attribute for variable \"{1}\""
msgstr ""
#: src/rougail/convert/object_model.py:762
#: src/rougail/convert/object_model.py:748
msgid "variable \"{0}\" has a default value calculated with \"{1}\" which has incompatible type"
msgstr ""
#: src/rougail/convert/object_model.py:804
#: src/rougail/convert/object_model.py:790
msgid "the variable \"{0}\" is waiting for a boolean as \"{1}\" but the attribute \"default\" is not a boolean (\"{2}\")"
msgstr ""
#: src/rougail/convert/object_model.py:826
#: src/rougail/convert/object_model.py:812
msgid "\"when\" is not allowed in format version 1.0 for attribute \"{0}\" for variable \"{1}\""
msgstr ""
#: src/rougail/convert/object_model.py:831
#: src/rougail/convert/object_model.py:817
msgid "the variable \"{0}\" has an invalid attribute \"{1}\", \"when\" and \"when_not\" cannot set together"
msgstr ""
#: src/rougail/convert/object_model.py:839
#: src/rougail/convert/object_model.py:825
msgid "\"when_not\" is not allowed in format version 1.0 for attribute \"{0}\" for variable \"{1}\""
msgstr ""
#: src/rougail/convert/object_model.py:850
msgid "\"when\" or \"when_not\" is mandatory for the not boolean variable \"{0}\" in attribute \"{1}\""
msgstr ""
#: src/rougail/convert/object_model.py:898
#: src/rougail/convert/object_model.py:881
msgid "cannot find variable \"{0}\" for the information \"{1}\" when calculating \"{2}\""
msgstr ""
#: src/rougail/convert/object_model.py:903
#: src/rougail/convert/object_model.py:886
msgid "identifier not allowed for the information \"{0}\" when calculating \"{1}\""
msgstr ""
#: src/rougail/convert/object_model.py:955
#: src/rougail/convert/object_model.py:938
msgid "\"when\" is not allowed in format version 1.0 for attribute \"{0}\""
msgstr ""
#: src/rougail/convert/object_model.py:961
#: src/rougail/convert/object_model.py:971
#: src/rougail/convert/object_model.py:944
#: src/rougail/convert/object_model.py:954
msgid "the identifier has an invalid attribute \"{0}\", \"when\" and \"when_not\" cannot set together"
msgstr ""
#: src/rougail/convert/object_model.py:997
#: src/rougail/convert/object_model.py:980
msgid "the variable \"{0}\" is not a follower, so cannot have index type for \"{1}\""
msgstr ""
@ -421,28 +370,20 @@ msgstr ""
msgid "A variable or a family located in the \"{0}\" namespace shall not be used in the \"{1}\" namespace"
msgstr ""
#: src/rougail/convert/tiramisureflector.py:348
msgid "variable param \"{0}\" has whole attribute but it's not allowed for external variable"
msgstr ""
#: src/rougail/convert/tiramisureflector.py:351
msgid "variable param \"{0}\" has dynamic attribute but it's not allowed for external variable"
msgstr ""
#: src/rougail/convert/tiramisureflector.py:360
#: src/rougail/convert/tiramisureflector.py:353
msgid "internal error, {0} is not a dynamic variable"
msgstr ""
#: src/rougail/error.py:61 src/rougail/tiramisu.py:235
#: src/rougail/user_data.py:452 src/rougail/user_data.py:455
#: src/rougail/error.py:61 src/rougail/tiramisu.py:162
#: src/rougail/user_datas.py:412 src/rougail/user_datas.py:415
msgid "{0} in {1}"
msgstr ""
#: src/rougail/structural_commandline/annotator.py:67
#: src/rougail/structural_commandline/annotator.py:66
msgid "alternative_name \"{0}\" conflict with \"--help\""
msgstr ""
#: src/rougail/structural_commandline/annotator.py:72
#: src/rougail/structural_commandline/annotator.py:71
msgid "conflict alternative_name \"{0}\": \"{1}\" and \"{2}\""
msgstr ""
@ -451,29 +392,21 @@ msgid "duplicate structural file name {0}"
msgstr ""
#: src/rougail/structural_directory/config.py:32
msgid "Main namespace name"
msgstr ""
#: src/rougail/structural_directory/config.py:40
msgid "directory or string is not in \"_.step.structural\""
msgstr ""
#: src/rougail/structural_directory/config.py:43
msgid "Directories where structural files are placed"
msgstr ""
#: src/rougail/structural_directory/config.py:60
#: src/rougail/structural_directory/config.py:49
msgid "Sort structural from differents directories"
msgstr ""
#: src/rougail/structural_directory/config.py:58
msgid "Main namespace name"
msgstr ""
#: src/rougail/structural_directory/config.py:69
msgid "Namespaces are isolated"
msgstr ""
#: src/rougail/structural_directory/config.py:75
msgid "directory or string is not in \"_.step.structural\" or \"_.main_namespace\" is not set"
msgstr ""
#: src/rougail/structural_directory/config.py:78
msgid "Extra namespaces"
msgstr ""
@ -486,304 +419,91 @@ msgstr ""
msgid "Directories where extra structural files are placed"
msgstr ""
#: src/rougail/structural_directory/config.py:106
msgid "directory is not in \"__.step.structural\""
msgstr ""
#: src/rougail/structural_string/config.py:32
msgid "Structural files contents"
msgstr ""
#: src/rougail/structural_string/config.py:33
#: src/rougail/structural_string/config.py:51
msgid "This variable is a list of string with YAML file format"
msgstr ""
#: src/rougail/structural_string/config.py:45
msgid "string is not in \"_.step.structural\""
msgstr ""
#: src/rougail/structural_string/config.py:50
msgid "Extra structural contents"
msgstr ""
#: src/rougail/structural_string/config.py:58
msgid "string is not in \"__.step.structural\""
msgstr ""
#: src/rougail/tiramisu.py:83
msgid "unknown boolean value \"{0}\""
msgstr ""
#: src/rougail/tiramisu.py:86
msgid "IP must be in CIDR format"
#: src/rougail/tiramisu.py:335
msgid "cannot calculating \"{0}\" attribute for variable \"{1}\" in {2} with parameters \"{3}\": {4}"
msgstr ""
#: src/rougail/tiramisu.py:87
msgid "private IP are allowed"
msgstr ""
#: src/rougail/tiramisu.py:88
msgid "reserved IP are allowed"
msgstr ""
#: src/rougail/tiramisu.py:91
msgid "network must be in CIDR format"
msgstr ""
#: src/rougail/tiramisu.py:92
msgid "private network are allowed"
msgstr ""
#: src/rougail/tiramisu.py:93
msgid "reserved network are allowed"
msgstr ""
#: src/rougail/tiramisu.py:96
msgid "can be range of port"
msgstr ""
#: src/rougail/tiramisu.py:97
msgid "can have the protocol"
msgstr ""
#: src/rougail/tiramisu.py:98
msgid "port 0 is allowed"
msgstr ""
#: src/rougail/tiramisu.py:99
msgid "well-known ports (1 to 1023) are allowed"
msgstr ""
#: src/rougail/tiramisu.py:100
msgid "registred ports (1024 to 49151) are allowed"
msgstr ""
#: src/rougail/tiramisu.py:101
msgid "private ports (greater than 49152) are allowed"
msgstr ""
#: src/rougail/tiramisu.py:104
msgid "type of domainname"
msgstr ""
#: src/rougail/tiramisu.py:104
msgid "type {0}"
msgstr ""
#: src/rougail/tiramisu.py:105
msgid "the domain name can starts by a dot"
msgstr ""
#: src/rougail/tiramisu.py:106
msgid "the domain name can be a hostname"
msgstr ""
#: src/rougail/tiramisu.py:107
msgid "the domain name can be an IP"
msgstr ""
#: src/rougail/tiramisu.py:108
msgid "the domain name can be network in CIDR format"
msgstr ""
#: src/rougail/tiramisu.py:109
msgid "the domain name must exist"
msgstr ""
#: src/rougail/tiramisu.py:119 src/rougail/tiramisu.py:125
msgid "the minimum value"
msgstr ""
#: src/rougail/tiramisu.py:119 src/rougail/tiramisu.py:125
msgid "the minimum value is {0}"
msgstr ""
#: src/rougail/tiramisu.py:120 src/rougail/tiramisu.py:126
msgid "the maximum value"
msgstr ""
#: src/rougail/tiramisu.py:120 src/rougail/tiramisu.py:126
msgid "the maximum value is {0}"
msgstr ""
#: src/rougail/tiramisu.py:135
msgid "minimum characters length for the secret"
msgstr ""
#: src/rougail/tiramisu.py:135
msgid "minimum length for the secret is {0} characters"
msgstr ""
#: src/rougail/tiramisu.py:136
msgid "maximum characters length for the secret"
msgstr ""
#: src/rougail/tiramisu.py:136
msgid "maximum length for the secret is {0} characters"
msgstr ""
#: src/rougail/tiramisu.py:137
msgid "forbidden characters"
msgstr ""
#: src/rougail/tiramisu.py:137
msgid "forbidden characters: {0}"
msgstr ""
#: src/rougail/tiramisu.py:144
msgid "this filename could be a relative path"
msgstr ""
#: src/rougail/tiramisu.py:145
msgid "this file must exist"
msgstr ""
#: src/rougail/tiramisu.py:146
msgid "file type allowed"
msgstr ""
#: src/rougail/tiramisu.py:146
msgid "file type allowed: {0}"
msgstr ""
#: src/rougail/tiramisu.py:436
msgid "cannot calculate the variable \"{0}\""
msgstr ""
#: src/rougail/tiramisu.py:437
msgid "the attribute \"{0}\" in {1} with the parameters \"{2}\" causes the error: {3}"
msgstr ""
#: src/rougail/tiramisu.py:455
msgid "cannot converting the variable \"{0}\""
msgstr ""
#: src/rougail/tiramisu.py:456
msgid "\"{0}\" is an invalid {1}"
msgstr ""
#: src/rougail/tiramisu.py:458
msgid "the attribute \"{0}\" in {1} causes the error: {2}"
msgstr ""
#: src/rougail/user_data.py:146
#: src/rougail/user_datas.py:145
msgid "cannot load variable path \"{0}\", the identifier \"{1}\" is not valid in {2}"
msgstr ""
#: src/rougail/user_data.py:230
msgid "the variable contains secrets and should not be defined in {0}"
#: src/rougail/user_datas.py:229
msgid "the variable \"{0}\" contains secrets and should not be defined in {1}"
msgstr ""
#: src/rougail/user_data.py:269
#: src/rougail/user_datas.py:269
msgid "loaded from {0}"
msgstr ""
#: src/rougail/user_data.py:311
msgid "is a family so we cannot set the value \"{0}\", it has been loading from {1}"
#: src/rougail/user_datas.py:311
msgid "cannot set the value \"{0}\" to the family {1}, it will be ignored when loading from {2}"
msgstr ""
#: src/rougail/user_data.py:315
msgid "is a family so we cannot set the value \"{0}\", it will be ignored when loading from {1}"
msgstr ""
#: src/rougail/user_data.py:326
msgid "{0}, it has been loaded from {1}"
msgstr ""
#: src/rougail/user_data.py:332
msgid "variable or family \"{0}\" does not exist, it has been loading from {1}"
msgstr ""
#: src/rougail/user_data.py:336
msgid "variable or family \"{0}\" does not exist, it will be ignored when loading from {1}"
msgstr ""
#: src/rougail/user_data.py:342
msgid "\"{0}\" is the name of a dynamic family, it has been loading from {1}"
msgstr ""
#: src/rougail/user_data.py:346
msgid "\"{0}\" is the name of a dynamic family, it will be ignored when loading from {1}"
msgstr ""
#: src/rougail/user_data.py:354
#: src/rougail/user_datas.py:322 src/rougail/user_datas.py:339
msgid "{0} loaded from {1}"
msgstr ""
#: src/rougail/user_data.py:385
msgid "variable {0} at index \"{1}\" is {2}, it has been loading from {3}"
#: src/rougail/user_datas.py:327
msgid "variable or family \"{0}\" does not exist, it will be ignored when loading from {1}"
msgstr ""
#: src/rougail/user_data.py:389
#: src/rougail/user_datas.py:333
msgid "\"{0}\" is the name of a dynamic family, it will be ignored when loading from {1}"
msgstr ""
#: src/rougail/user_datas.py:369
msgid "variable {0} at index \"{1}\" is {2}, it will be ignored when loading from {3}"
msgstr ""
#: src/rougail/user_data.py:402
msgid "family {0} is {1}, {2} at index \"{3}\", it has been loading from {4}"
#: src/rougail/user_datas.py:380
msgid "family {0} is {1}, {2} at index \"{3}\" will be ignored when loading from {4}"
msgstr ""
#: src/rougail/user_data.py:406
msgid "family {0} is {1}, {2} at index \"{3}\", it will be ignored when loading from {4}"
#: src/rougail/user_datas.py:393
msgid "variable {0} is {1}, it will be ignored when loading from {2}"
msgstr ""
#: src/rougail/user_data.py:421
msgid "variable is {0}, it has been loading from {1}"
#: src/rougail/user_datas.py:401
msgid "family {0} is {1}, {2} will be ignored when loading from {3}"
msgstr ""
#: src/rougail/user_data.py:425
msgid "variable is {0}, it will be ignored when loading from {1}"
msgstr ""
#: src/rougail/user_data.py:435
msgid "family {0} is {1}, so cannot access to {2}, it has been loading from {3}"
msgstr ""
#: src/rougail/user_data.py:439
msgid "family {0} is {1}, so cannot access to {2}, it will be ignored when loading from {3}"
msgstr ""
#: src/rougail/user_data.py:461
msgid "the value \"{0}\" is an invalid {1} for {2} at index \"{3}\", {4}, it has been loading from {5}"
msgstr ""
#: src/rougail/user_data.py:465
#: src/rougail/user_datas.py:421
msgid "the value \"{0}\" is an invalid {1} for {2} at index \"{3}\", {4}, it will be ignored when loading from {5}"
msgstr ""
#: src/rougail/user_data.py:481
msgid "the value \"{0}\" is an invalid {1}, {2}, it has been loading from {3}"
msgstr ""
#: src/rougail/user_data.py:485
msgid "the value \"{0}\" is an invalid {1}, {2}, it will be ignored when loading from {3}"
#: src/rougail/user_datas.py:435
msgid "the value \"{0}\" is an invalid {1} for {2}, {3}, it will be ignored when loading from {4}"
msgstr ""
#: src/rougail/utils.py:56
msgid "invalid variable or family name \"{0}\" must only contains lowercase ascii character, number or _"
msgstr ""
#: src/rougail/utils.py:104
msgid "error for the variable \"{1}\" in jinja \"{0}\": {2}"
#: src/rougail/utils.py:103
msgid "error in jinja \"{0}\" for the variable \"{1}\": {2}"
msgstr ""
#: src/rougail/utils.py:213
#: src/rougail/utils.py:212
msgid "mandatory"
msgstr ""
#: src/rougail/utils.py:214
#: src/rougail/utils.py:213
msgid "hidden"
msgstr ""
#: src/rougail/utils.py:215
#: src/rougail/utils.py:214
msgid "disabled"
msgstr ""
#: src/rougail/utils.py:216
#: src/rougail/utils.py:215
msgid "unique"
msgstr ""
#: src/rougail/utils.py:217
#: src/rougail/utils.py:216
msgid "auto modified"
msgstr ""

View file

@ -78,7 +78,7 @@ class SpaceAnnotator: # pylint: disable=R0903
)
except ModuleNotFoundError:
pass
for user_data in objectspace.user_data:
for user_data in objectspace.user_datas:
try:
get_annotators(
ANNOTATORS, f"rougail.user_data_{user_data}", "annotator"
@ -97,7 +97,7 @@ class SpaceAnnotator: # pylint: disable=R0903
annotators.extend(ANNOTATORS[extra_annotator])
for structural in objectspace.structurals:
annotators.extend(ANNOTATORS[f"rougail.structural_{structural}.annotator"])
for user_data in objectspace.user_data:
for user_data in objectspace.user_datas:
annotators.extend(ANNOTATORS[f"rougail.user_data_{user_data}.annotator"])
if objectspace.output:
annotators.extend(

View file

@ -76,33 +76,31 @@ class _RougailConfig:
self.add_extra_options = add_extra_options
self.root = None
def copy(self, backward_compatibility=None):
if not self.root:
self.generate_config()
config = self.config.config.copy()
config.value.importation(self.config.value.exportation())
config.property.importation(
self.config.property.exportation()
def copy(self):
rougailconfig = _RougailConfig(
self.backward_compatibility,
self.add_extra_options,
)
config.property.read_only()
if backward_compatibility is None:
backward_compatibility = self.backward_compatibility
rougailconfig = _RougailConfig(backward_compatibility, self.add_extra_options)
rougailconfig.root = self.root
rougailconfig.config = config
rougailconfig.extra_vars = self.extra_vars.copy()
rougailconfig.not_in_tiramisu = NOT_IN_TIRAMISU | rougailconfig.extra_vars
for variable in self.not_in_tiramisu:
value = getattr(self, variable)
if not isinstance(value, str):
value = value.copy()
setattr(rougailconfig, variable, value)
if self.root:
rougailconfig.generate_config()
rougailconfig.config.value.importation(self.config.value.exportation())
rougailconfig.config.property.importation(
self.config.property.exportation()
)
rougailconfig.config.property.read_only()
rougailconfig.extra_vars = self.extra_vars.copy()
for variable in self.not_in_tiramisu:
value = getattr(self, variable)
if not isinstance(value, str):
value = value.copy()
setattr(rougailconfig, variable, value)
return rougailconfig
def generate_config(self):
self.root, extra_vars = _rougail_config(
root, extra_vars = _rougail_config(
self.backward_compatibility, self.add_extra_options
)
self.root = root
self.config = Config(
self.root,
)
@ -125,6 +123,8 @@ class _RougailConfig:
setattr(self, key, value)
else:
self.config.property.read_write()
if key == "export_with_import":
key = "not_export_with_import"
key = RENAMED.get(key, key)
option = self.config.option(key)
if option.isoptiondescription() and option.isleadership():
@ -139,6 +139,8 @@ class _RougailConfig:
follower = option.followers()[0]
for idx, val in enumerate(followers):
self.config.option(follower.path(), idx).value.set(val)
elif key == "not_export_with_import":
option.value.set(not value)
else:
option.value.set(value)
self.config.property.read_only()
@ -151,10 +153,14 @@ class _RougailConfig:
self.generate_config()
if key in self.not_in_tiramisu:
return getattr(self, key)
if key == "export_with_import":
key = "not_export_with_import"
option = self.config.option(key)
if option.isoptiondescription() and option.isleadership():
return self.get_leadership(option)
ret = self.config.option(key).value.get()
if key == "not_export_with_import":
return not ret
return ret
def __contains__(
@ -255,21 +261,19 @@ class FakeRougailConvert(RougailConvert):
self.internal_functions = []
self.force_optional = False
self.structurals = ["commandline"]
self.user_data = []
self.user_datas = []
self.output = None
self.add_extra_options = self.add_extra_options
self.tiramisu_cache = False
# self.tiramisu_cache = "a.py"
self.load_unexist_redefine = False
def get_common_rougail_config(
*,
backward_compatibility=True,
) -> str:
def _rougail_config(
backward_compatibility: bool = True,
add_extra_options: bool = True,
) -> "OptionDescription":
rougail_options = f"""default_structural_format_version:
description: {_('Default version of the structural file format')}
help: {_('This value is only used if the version is not set in the structural file')}
description: {_('Structure format version by default, if not specified in structure file')}
alternative_name: v
choices:
- '1.0'
@ -278,7 +282,6 @@ def get_common_rougail_config(
functions_files:
description: {_("File with functions")}
help: {_("This file contains filters and additional Jinja2 functions usable in structure files")}
alternative_name: c
type: unix_filename
params:
@ -308,20 +311,17 @@ default_family_mode:
{{% if modes_level %}}
{{{{ modes_level[0] }}}}
{{% endif %}}
description: {_('the first one defined in "modes_level"')}
disabled:
jinja: |
{{% if not modes_level %}}
No mode
{{% endif %}}
description: {_('when no mode is defined in "modes_level"')}
validators:
- type: jinja
jinja: |
{{% if default_family_mode not in modes_level %}}
not in modes_level ({{modes_level}})
{{% endif %}}
description: {_('this mode must be available in "modes_level"')}
commandline: false
default_variable_mode:
@ -335,20 +335,17 @@ default_variable_mode:
{{{{ modes_level[1] }}}}
{{% endif %}}
{{% endif %}}
description: {_('if the variable "modes_level" is defined, the default value is the second available element, otherwise, the first')}
disabled:
jinja: |
{{% if not modes_level %}}
No mode
{{% endif %}}
description: {_('when no mode is defined in "modes_level"')}
validators:
- type: jinja
jinja: |
{{% if default_variable_mode not in modes_level %}}
not in modes_level ({{modes_level}})
{{% endif %}}
description: {_('this mode must be available in "modes_level"')}
commandline: false
base_option_name:
@ -356,21 +353,18 @@ base_option_name:
default: baseoption
commandline: false
export_with_import:
not_export_with_import:
description: {_("In cache file, do not importation of Tiramisu and other dependencies")}
default: true
default: false
commandline: false
tiramisu_cache:
description: {_("Store Tiramisu cache filename")}
help: "{_("This file contains the Tiramisu instructions used internally to load the variables.\n\nThis file can be used for debugging")}"
description: {_("Tiramisu cache filename")}
alternative_name: t
type: unix_filename
mandatory: false
params:
allow_relative: true
types:
- file
internal_functions:
description: {_("Name of internal functions that we can use as a function")}
@ -399,11 +393,11 @@ load_unexist_redefine:
commandline: false
default: False
secret_manager: # {_("The secret manager")}
secret_manager:
pattern:
description: {_("The secret pattern to constructing the name of the item searched for in the secret manager")}
help: {_("The pattern is in Jinja2 format")}
description: {_("The secret pattern to build item name in Bitwarden")}
help: {_("The pattern is in Jinja format")}
default: "{{{{ project }}}} - {{{{ environment }}}} - {{{{ service }}}} - {{{{ user }}}}"
"""
@ -412,10 +406,6 @@ secret_manager: # {_("The secret manager")}
"user data": [],
"output": [],
}
processes_tr = {"structural": _("structural"),
"user data": _("user datas"),
"output": _("output"),
}
processes_empty = []
for module in get_sub_modules().values():
data = module.get_rougail_config(backward_compatibility=backward_compatibility)
@ -431,18 +421,20 @@ secret_manager: # {_("The secret manager")}
if processes[process]:
objects = processes[process]
process_name = normalize_family(process)
tr_process_name = processes_tr[process]
tr_process_name = _(process_name)
rougail_process += f"""
{process_name}:
description: {_('Select for {0}').format(tr_process_name)}
"""
if process != "structural":
rougail_process += """ alternative_name: {NAME[0]}
rougail_process += """
alternative_name: {NAME[0]}
""".format(
NAME=normalize_family(process),
)
rougail_process += """ choices:
rougail_process += """
choices:
"""
for obj in objects:
rougail_process += f" - {obj['name']}\n"
@ -452,6 +444,24 @@ secret_manager: # {_("The secret manager")}
default:
- directory
"""
hidden_outputs = [
process["name"]
for process in processes["output"]
if process.get("allow_user_data", True)
]
if hidden_outputs:
rougail_process += """
hidden:
type: jinja
jinja: |
"""
for hidden_output in hidden_outputs:
rougail_process += """ {% if _.output is not propertyerror and _.output == 'NAME' %}
Cannot load structural for NAME output
{% endif %}
""".replace(
"NAME", hidden_output
)
elif process == "user data":
rougail_process += """ multi: true
mandatory: false"""
@ -469,8 +479,7 @@ secret_manager: # {_("The secret manager")}
for hidden_output in hidden_outputs:
rougail_process += """ {% if _.output is not propertyerror and _.output == 'NAME' %}
Cannot load user data for NAME output
{% endif %}
description: _('cannot load user data for NAME output')""".replace(
{% endif %}""".replace(
"NAME", hidden_output
)
elif objects:
@ -496,7 +505,6 @@ secret_manager: # {_("The secret manager")}
PROP=prop,
)
rougail_process += f"""
define_default_params: false # {_('Override default parameters for option type')}
default_params:
@ -506,35 +514,20 @@ default_params:
when: false
"""
for typ, typ_description, params in get_convert_option_types():
for typ, params in get_convert_option_types():
rougail_process += f"""
{typ}: # {typ_description}
{typ}:
"""
for key, key_type, description, multi, value, choices in params:
for key, key_type, multi, value in params:
rougail_process += f"""
{key}:
"""
if description:
rougail_process += f""" description: "{description}"
"""
rougail_process += f""" type: {key_type}
type: {key_type}
multi: {multi}
mandatory: false
default: {value}
"""
if choices:
rougail_process += " choices:\n"
for choice in choices:
rougail_process += f" - {choice}\n"
# print(rougail_process)
rougail_options += rougail_process
return processes, processes_empty, rougail_options
def _rougail_config(
backward_compatibility: bool = True,
add_extra_options: bool = True,
) -> "OptionDescription":
processes, processes_empty, rougail_options = get_common_rougail_config(backward_compatibility=backward_compatibility)
convert = FakeRougailConvert(add_extra_options)
convert.init()
convert.namespace = None

View file

@ -21,11 +21,11 @@ from warnings import warn
from .convert import RougailConvert
from ..config import RougailConfig
from ..user_data import UserData
from ..user_datas import UserDatas
from ..tiramisu import tiramisu_display_name
class Rougail(UserData):
class Rougail(UserDatas):
"""Main Rougail object"""
def __init__(

View file

@ -180,9 +180,9 @@ class ParserVariable:
]
self.structurals = rougailconfig["step.structural"]
try:
self.user_data = rougailconfig["step.user_data"]
self.user_datas = rougailconfig["step.user_data"]
except:
self.user_data = []
self.user_datas = []
try:
self.output = rougailconfig["step.output"]
except:

View file

@ -43,7 +43,6 @@ BASETYPE = Union[StrictBool, StrictInt, StrictFloat, StrictStr, None]
def get_convert_option_types():
for typ, datas in CONVERT_OPTION.items():
typ_description = datas.get("msg", typ)
obj = getattr(tiramisu, datas["opttype"])
initkwargs = datas.get("initkwargs", {})
if obj == tiramisu.SymLinkOption:
@ -59,25 +58,16 @@ def get_convert_option_types():
for key, value in extra.items():
if key.startswith("_"):
continue
if "params" in datas and key in datas["params"]:
multi = datas["params"][key].get('multi', False)
description = datas["params"][key]["description"]
choices = datas["params"][key].get("choices")
else:
description = None
choices = None
multi = False
if choices:
key_type = "choice"
elif isinstance(value, bool):
multi = False
if isinstance(value, bool):
key_type = "boolean"
elif isinstance(value, str):
key_type = "string"
elif isinstance(value, list):
key_type = "string"
multi = True
params.append((key, key_type, description, multi, value, choices))
yield typ, typ_description, params
params.append((key, key_type, multi, value))
yield typ, params
class Param(BaseModel):
@ -111,7 +101,6 @@ class VariableParam(Param):
variable: str
propertyerror: bool = True
whole: bool = False
dynamic: bool = True
optional: bool = False
def to_param(
@ -322,7 +311,7 @@ class JinjaCalculation(Calculation):
idx += 1
objectspace.jinja[jinja_path] = self.jinja
if return_type in RENAME_TYPE:
warning = _('the variable "{0}" has a depreciated return_type "{1}", please use "{2}" instead in {3}')
warning = _('the variable "{0}" has a depreciated return_type "{1}", please use "{2}" instead in "{3}"')
warn(
warning.format(self.path, return_type, RENAME_TYPE[return_type], display_xmlfiles(self.xmlfiles)),
DeprecationWarning,
@ -471,12 +460,9 @@ class JinjaCalculation(Calculation):
objectspace,
)
elif self.attribute_name == "dynamic":
return_type = self.return_type
if return_type is None:
return_type = "string"
return self._jinja_to_function(
"jinja_to_function",
return_type,
"string",
True,
objectspace,
)
@ -847,10 +833,7 @@ class VariablePropertyCalculation(_VariableCalculation):
when = []
else:
if variable.type != "boolean":
msg = _(
'"when" or "when_not" is mandatory for the not boolean variable "{0}" in attribute "{1}"'
).format(self.path, self.attribute_name)
raise DictConsistencyError(msg, 106, variable.xmlfiles)
raise Exception("only boolean!")
when = True
inverse = False
params["when"] = when
@ -1093,7 +1076,6 @@ class Variable(BaseModel):
unique: Optional[bool] = None
hidden: Union[bool, Calculation] = False
disabled: Union[bool, Calculation] = False
frozen: Union[bool, Calculation] = False
# others
path: str
namespace: Optional[str]

View file

@ -82,15 +82,15 @@ class TiramisuReflector:
continue
self.text["header"].append(f"load_functions('{funcs_path}')")
if self.objectspace.export_with_import:
# if self.objectspace.has_namespace:
self.text["header"].extend(
[
"try:",
" groups.namespace",
"except:",
" groups.addgroup('namespace')",
]
)
if self.objectspace.has_namespace:
self.text["header"].extend(
[
"try:",
" groups.namespace",
"except:",
" groups.addgroup('namespace')",
]
)
for mode in self.objectspace.modes_level:
self.text["header"].append(f'ALLOWED_LEADER_PROPERTIES.add("{mode}")')
self.make_tiramisu_objects()
@ -338,18 +338,11 @@ class Common:
"""build variable parameters"""
variable = param["variable"]
whole = param.get("whole", False)
dynamic = param.get("dynamic", True)
if variable.path == self.elt.path:
ret = f"ParamSelfOption(whole={whole}"
if not dynamic:
ret += ", dynamic=False"
return ret + ')'
return f"ParamSelfOption(whole={whole})"
if whole:
msg = _('variable param "{0}" has whole attribute but it\'s not allowed for external variable')
raise DictConsistencyError(msg.format(variable.path), 34, self.elt.xmlfiles)
if not dynamic:
msg = _('variable param "{0}" has dynamic attribute but it\'s not allowed for external variable')
raise DictConsistencyError(msg.format(variable.path), 34, self.elt.xmlfiles)
msg = f'variable param "{variable.path}" has whole attribute but it\'s not allowed for external variable'
raise DictConsistencyError(msg, 34, self.elt.xmlfiles)
option_name = self.tiramisu.reflector_objects[variable.path].get(
self.calls, self.elt.path
)

View file

@ -59,7 +59,6 @@ class Annotator(Walk):
return
alternative_name = variable.alternative_name
variable_path = variable.path
self.objectspace.informations.add(variable_path, "alternative_name", alternative_name)
all_letters = ""
for letter in alternative_name:
all_letters += letter

View file

@ -33,7 +33,7 @@ structural_commandline:
default: true
"""
return {
"name": "commandline",
"name": "cmdline",
"process": "structural",
"options": options,
"level": 20,

View file

@ -141,12 +141,12 @@ class Walker:
"""Parse file"""
with open(filename, encoding="utf8") as file_fh:
objects = self.yaml.load(file_fh)
if objects is None:
return
version = self.convert.validate_file_version(
objects,
filename,
)
if objects is None:
return
self.convert.parse_root_file(
filename,
path,

View file

@ -28,17 +28,6 @@ def get_rougail_config(
else:
main_namespace_default = "null"
options = f"""
main_namespace:
description: {_("Main namespace name")}
default: {main_namespace_default}
alternative_name: s
mandatory: false
disabled:
jinja: >-
{{{{ 'directory' not in _.step.structural and 'string' not in _.step.structural }}}}
return_type: boolean
description: {_('directory or string is not in "_.step.structural"')}
main_structural_directories:
description: {_("Directories where structural files are placed")}
type: unix_filename
@ -65,21 +54,32 @@ sort_structural_files_all:
directory is not in _.step.structural
{{% endif %}}
main_namespace:
description: {_("Main namespace name")}
default: {main_namespace_default}
alternative_name: s
mandatory: false
disabled:
jinja: >-
{{{{ 'directory' not in _.step.structural }}}}
return_type: boolean
description: directory is not in _.step.structural
isolated_namespace:
description: {_("Namespaces are isolated")}
default: true
disabled:
jinja: >-
{{{{ 'directory' not in _.step.structural and 'string' not in _.step.structural }}}}
{{{{ 'directory' not in _.step.structural or not _.main_namespace }}}}
return_type: boolean
description: {_('directory or string is not in "_.step.structural" or "_.main_namespace" is not set')}
description: directory is not in _.step.structural or main_namespace is not set
extra_namespaces:
description: {_("Extra namespaces")}
type: leadership
disabled:
jinja: >-
{{{{ ('directory' not in _.step.structural and 'string' not in _.step.structural) or not _.main_namespace }}}}
{{{{ 'directory' not in _.step.structural or not _.main_namespace }}}}
return_type: boolean
description: directory is not in _.step.structural or main_namespace is not set
@ -99,11 +99,6 @@ extra_namespaces:
types:
- directory
multi: true
disabled:
jinja: >-
{{{{ 'directory' not in __.step.structural }}}}
return_type: boolean
description: {_('directory is not in "__.step.structural"')}
"""
return {
"name": "directory",

View file

@ -82,127 +82,54 @@ def convert_boolean(value: str) -> bool:
return None
raise Exception(_('unknown boolean value "{0}"').format(value))
_ip_params = {
"cidr": {"description": _("IP must be in CIDR format")},
"private_only": {"description": _("private IP are allowed")},
"allow_reserved": {"description": _("reserved IP are allowed")},
}
_network_params = {
"cidr": {"description": _("network must be in CIDR format")},
"private_only": {"description": _("private network are allowed")},
"allow_reserved": {"description": _("reserved network are allowed")},
}
_port_params = {
"allow_range": {"description": _("can be range of port")},
"allow_protocol": {"description": _("can have the protocol")},
"allow_zero": {"description": _("port 0 is allowed")},
"allow_wellknown": {"description": _("well-known ports (1 to 1023) are allowed")},
"allow_registred": {"description": _("registred ports (1024 to 49151) are allowed")},
"allow_private": {"description": _("private ports (greater than 49152) are allowed")},
}
_domain_params = {
"type": {"description": _("type of domainname"), "choices": ('domainname', 'netbios', 'hostname'), 'doc': _("type {0}")},
"allow_startswith_dot": {"description": _("the domain name can starts by a dot")},
"allow_without_dot": {"description": _("the domain name can be a hostname")},
"allow_ip": {"description": _("the domain name can be an IP")},
"allow_cidr_network": {"description": _("the domain name can be network in CIDR format")},
"test_existence": {"description": _("the domain name must exist")},
}
_web_params = _port_params | _domain_params
CONVERT_OPTION = {
"string": dict(opttype="StrOption", example="example"),
"number": dict(opttype="IntOption",
func=int,
params={
"min_number": {"description": _("the minimum value"), 'doc': _("the minimum value is {0}")},
"max_number": {"description": _("the maximum value"), 'doc': _("the maximum value is {0}")},
},
example=42),
"integer": dict(opttype="IntOption",
params={
"min_integer": {"description": _("the minimum value"), 'doc': _("the minimum value is {0}")},
"max_integer": {"description": _("the maximum value"), 'doc': _("the maximum value is {0}")},
},
func=int,
example=42,
),
"number": dict(opttype="IntOption", func=int, example=42),
"integer": dict(opttype="IntOption", func=int, example=42),
"float": dict(opttype="FloatOption", func=float, example=1.42),
"boolean": dict(opttype="BoolOption", func=convert_boolean),
"secret": dict(opttype="PasswordOption",
params={
"min_len": {"description": _("minimum characters length for the secret"), "doc": _("minimum length for the secret is {0} characters")},
"max_len": {"description": _("maximum characters length for the secret"), "doc": _("maximum length for the secret is {0} characters")},
"forbidden_char": {"description": _("forbidden characters"), "doc": _("forbidden characters: {0}")},
},
example="secrets"),
"secret": dict(opttype="PasswordOption", example="secrets"),
"mail": dict(opttype="EmailOption", example="user@example.net"),
"unix_filename": dict(opttype="FilenameOption",
msg="UNIX filename",
params={
"allow_relative": {"description": _("this filename could be a relative path")},
"test_existence": {"description": _("this file must exist")},
"types": {"description": _("file type allowed"), "doc": _("file type allowed: {0}"), "choices": ("file", "directory"), "multi": True},
},
example="/tmp/myfile.txt"),
"unix_filename": dict(opttype="FilenameOption", example="/tmp/myfile.txt"),
"date": dict(opttype="DateOption", example="2000-01-01"),
"unix_user": dict(opttype="UsernameOption", example="username",
msg="UNIX user"
),
"unix_user": dict(opttype="UsernameOption", example="username"),
"ip": dict(
opttype="IPOption", initkwargs={"allow_reserved": True},
msg="IP",
params=_ip_params,
example="1.1.1.1"
opttype="IPOption", initkwargs={"allow_reserved": True}, example="1.1.1.1"
),
"cidr": dict(opttype="IPOption", msg="CIDR", initkwargs={"cidr": True},
params=_ip_params,
example="1.1.1.0/24"),
"cidr": dict(opttype="IPOption", initkwargs={"cidr": True}, example="1.1.1.0/24"),
"netmask": dict(opttype="NetmaskOption", example="255.255.255.0"),
"network": dict(opttype="NetworkOption",
params=_network_params,
example="1.1.1.0"),
"network": dict(opttype="NetworkOption", example="1.1.1.0"),
"network_cidr": dict(
opttype="NetworkOption", initkwargs={"cidr": True}, example="1.1.1.0/24",
params=_network_params,
msg="network CIDR",
opttype="NetworkOption", initkwargs={"cidr": True}, example="1.1.1.0/24"
),
"broadcast": dict(opttype="BroadcastOption", example="1.1.1.255"),
"netbios": dict(
opttype="DomainnameOption",
initkwargs={"type": "netbios", "warnings_only": True},
params=_domain_params,
example="example",
),
"domainname": dict(
opttype="DomainnameOption",
initkwargs={"type": "domainname", "allow_ip": False},
params=_domain_params,
example="example.net",
),
"hostname": dict(
opttype="DomainnameOption",
initkwargs={"type": "hostname", "allow_ip": False},
params=_domain_params,
example="example",
),
"web_address": dict(
opttype="URLOption",
initkwargs={"allow_ip": False, "allow_without_dot": True},
msg="web address",
params=_web_params,
example="https://example.net",
),
"port": dict(
opttype="PortOption", initkwargs={"allow_private": True},
params=_port_params,
example="111", func=str,
opttype="PortOption", initkwargs={"allow_private": True}, example="111", func=str,
),
"mac": dict(opttype="MACOption", example="00:00:00:00:00"),
"unix_permissions": dict(
opttype="PermissionsOption",
msg="UNIX permissions",
initkwargs={"warnings_only": True},
func=int,
example="644",
@ -232,7 +159,7 @@ def raise_carry_out_calculation_error(subconfig, *args, **kwargs):
ymlfiles = subconfig.config_bag.context.get_values().get_information(
subconfig, "ymlfiles", []
)
raise ConfigError(_("{0} in {1}").format(err, display_xmlfiles(ymlfiles)), subconfig=subconfig)
raise ConfigError(_("{0} in {1}").format(err, display_xmlfiles(ymlfiles)))
errors.raise_carry_out_calculation_error = raise_carry_out_calculation_error
@ -241,7 +168,6 @@ errors.raise_carry_out_calculation_error = raise_carry_out_calculation_error
global func
dict_env = {}
ENV = SandboxedEnvironment(loader=DictLoader(dict_env), undefined=StrictUndefined)
ENV.add_extension('jinja2.ext.do')
func = ENV.filters
ENV.compile_templates("jinja_caches", zip=None)
@ -315,8 +241,20 @@ def tiramisu_display_name(
with_quote: bool = False,
) -> str:
"""Replace the Tiramisu display_name function to display path + description"""
def get_path():
if description_type in ["description", "name", "name_and_description"]:
config_bag = subconfig.config_bag
context = config_bag.context
values = context.get_values()
context_subconfig = context.get_root(config_bag)
doc = values.get_information(subconfig, "doc", None)
comment = doc if doc and doc != kls.impl_getname() else ""
if "{{ identifier }}" in comment and subconfig.identifiers:
comment = comment.replace("{{ identifier }}", str(subconfig.identifiers[-1]))
path_in_description = values.get_information(
context_subconfig, "path_in_description", True
)
if path_in_description or not comment:
comment = f" ({comment})" if comment else ""
if path_in_description is False:
path = kls.impl_getname()
else:
path = kls.impl_getpath()
@ -324,40 +262,12 @@ def tiramisu_display_name(
path = path.replace(
"{{ identifier }}", normalize_family(str(subconfig.identifiers[-1]))
)
return path
config_bag = subconfig.config_bag
context = config_bag.context
values = context.get_values()
context_subconfig = context.get_root(config_bag)
description_type = values.get_information(
context_subconfig, "description_type", "name_and_description"
)
if description_type in ["description", "name_and_description"]:
doc = values.get_information(subconfig, "doc", None)
description = doc if doc and doc != kls.impl_getname() else ""
if "{{ identifier }}" in description and subconfig.identifiers:
description = description.replace("{{ identifier }}", str(subconfig.identifiers[-1]))
if description_type in ["name", "path", "name_and_description"]:
path = get_path()
if description_type == "name_and_description":
if description:
if with_quote:
description = f'"{path}" ({description})'
else:
description = f"{path} ({description})"
else:
if with_quote:
description = f'"{path}"'
else:
description = path
else:
if description_type in ["name", "path"]:
description = path
elif not description:
description = get_path()
if with_quote:
description = f'"{description}"'
return description
path = comment
comment = ""
if with_quote:
return f'"{path}"{comment}'
return f"{path}{comment}"
def rougail_calc_value(*args, __default_value=None, __internal_multi=False, **kwargs):
@ -397,20 +307,8 @@ def jinja_to_function(
global ENV, CONVERT_OPTION
kw = {}
for key, value in kwargs.items():
if isinstance(value, list):
val = []
for v in value:
if isinstance(v, PropertiesOptionError):
v = JinjaError(v)
if v is None:
v = ''
val.append(v)
value = val
else:
if isinstance(value, PropertiesOptionError):
value = JinjaError(value)
if value is None:
value = ''
if isinstance(value, PropertiesOptionError):
value = JinjaError(value)
if "." in key:
c_kw = kw
path, var = key.rsplit(".", 1)
@ -433,14 +331,17 @@ def jinja_to_function(
values = ENV.get_template(__internal_jinja).render(kw, **func).strip()
except Exception as err:
kw_str = ", ".join(kw_to_string(kw))
prefix = _('cannot calculate the variable "{0}"').format(__internal_variable)
msg = _('the attribute "{0}" in {1} with the parameters "{2}" causes the error: {3}').format(
raise ConfigError(
_(
'cannot calculating "{0}" attribute for variable "{1}" in {2} with parameters "{3}": {4}'
).format(
__internal_attribute,
__internal_variable,
display_xmlfiles(__internal_files),
kw_str,
err,
)
raise ConfigError(msg, prefix=prefix) from err
) from err
convert = CONVERT_OPTION[__internal_type].get("func", str)
if __internal_multi:
values = [
@ -452,15 +353,9 @@ def jinja_to_function(
try:
values = convert(values)
except Exception as err:
prefix = _('cannot converting the variable "{0}"').format(__internal_variable)
msg = _('"{0}" is an invalid {1}').format(values, __internal_type)
if __internal_attribute != "default":
msg = _('the attribute "{0}" in {1} causes the error: {2}').format(
__internal_attribute,
display_xmlfiles(__internal_files),
msg,
)
raise ConfigError(msg, prefix=prefix) from err
raise ConfigError(
f'cannot converting "{__internal_attribute}" attribute for variable "{__internal_variable}" in {display_xmlfiles(__internal_files)}: {err}'
) from err
values = values if values != "" and values != "None" else None
if values is None and __default_value is not None:
return __default_value

View file

@ -21,7 +21,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
from typing import List
from tiramisu import Calculation, Params, ParamValue, owners
from tiramisu import Calculation, owners
from tiramisu.error import (
PropertiesOptionError,
AttributeOptionError,
@ -41,31 +41,30 @@ from .error import DictConsistencyError
from .i18n import _
class UserData:
class UserDatas:
def __init__(self, config) -> None:
self.config = config
def user_data(
def user_datas(
self,
user_data: List[dict],
user_datas: List[dict],
*,
invalid_user_data_error: bool = False,
unknown_user_data_error: bool = False,
invalid_user_datas_error: bool = False,
unknown_user_datas_error: bool = False,
):
self.values = {}
self.errors = []
self.warnings = []
self.invalid_user_data_error = invalid_user_data_error
if self.invalid_user_data_error:
if invalid_user_datas_error:
self.invalids = self.errors
else:
self.invalids = self.warnings
if unknown_user_data_error:
if unknown_user_datas_error:
self.unknowns = self.errors
else:
self.unknowns = self.warnings
self.show_secrets = False
self._populate_values(user_data)
self._populate_values(user_datas)
self._auto_configure_dynamics()
self._populate_config()
self.properties_to_string = get_properties_to_string()
@ -75,8 +74,8 @@ class UserData:
"warnings": self.warnings,
}
def _populate_values(self, user_data):
for datas in user_data:
def _populate_values(self, user_datas):
for datas in user_datas:
options = datas.get("options", {})
source = datas["source"]
for name, data in datas.get("values", {}).items():
@ -226,10 +225,10 @@ class UserData:
options.get("allow_secrets_variables", True) is False
and option.type() == "password"
):
self.errors.append({
self.errors.append(
_(
'the variable contains secrets and should not be defined in {0}'
).format(self.values[values_path]["source"]): option._subconfig}
'the variable "{0}" contains secrets and should not be defined in {1}'
).format(path, self.values[values_path]["source"])
)
self.values.pop(path)
continue
@ -258,6 +257,7 @@ class UserData:
option.value.pop(idx)
try:
self.set_value(option, value, options)
# option.value.set(value)
value_is_set = True
except Exception as err:
if path != option.path():
@ -297,8 +297,8 @@ class UserData:
def _populate_error_warnings(self):
# we don't find variable, apply value just to get error or warning messages
for path, options in self.values.items():
# if "{{ identifier }}" in path:
# continue
if "{{ identifier }}" in path:
continue
value = options["values"]
if options.get("secret_manager"):
option = self.config.forcepermissive.option(path)
@ -307,47 +307,32 @@ class UserData:
try:
if option.isoptiondescription():
if value:
if self.invalid_user_data_error:
msg = _(
'is a family so we cannot set the value "{0}", it has been loading from {1}'
)
else:
msg = _(
'is a family so we cannot set the value "{0}", it will be ignored when loading from {1}'
)
self.invalids.append({msg.format(
self.invalids.append(
_(
'cannot set the value "{0}" to the family {1}, it will be ignored when loading from {2}'
).format(
self._display_value(option, value),
option.description(with_quote=True),
options["source"],
): option._subconfig}
)
)
continue
except (ConfigError, PropertiesOptionError) as err:
self.unknowns.append({
_("{0}, it has been loaded from {1}").format(err, options["source"]): option._subconfig}
except PropertiesOptionError as err:
self.unknowns.append(
_("{0} loaded from {1}").format(err, options["source"])
)
continue
except AttributeOptionError as err:
if err.code == "option-not-found":
if self.invalid_user_data_error:
msg = _(
'variable or family "{0}" does not exist, it has been loading from {1}'
)
else:
msg = _(
self.unknowns.append(
_(
'variable or family "{0}" does not exist, it will be ignored when loading from {1}'
)
self.unknowns.append(msg.format(err.path, options["source"]))
).format(err.path, options["source"])
)
elif err.code == "option-dynamic":
if self.invalid_user_data_error:
msg = _(
'"{0}" is the name of a dynamic family, it has been loading from {1}'
)
else:
msg = _(
'"{0}" is the name of a dynamic family, it will be ignored when loading from {1}'
)
self.invalids.append(
{msg.format(option.description(with_quote=True), options["source"]): option._subconfig}
_(
'"{0}" is the name of a dynamic family, it will be ignored when loading from {1}'
).format(option.description(with_quote=True), options["source"])
)
else:
self.invalids.append(
@ -376,122 +361,86 @@ class UserData:
properties = display_list(
[_(prop) for prop in err.proptype], add_quote=False
)
err_path = err.subconfig.path
err_description = err.subconfig.option.impl_get_display_name(err.subconfig)
err_path = err._subconfig.path
display_name = option.description(with_quote=True)
if index is not None:
if path == err_path:
if self.invalid_user_data_error:
msg = _(
'variable {0} at index "{1}" is {2}, it has been loading from {3}'
)
else:
msg = _(
self.unknowns.append(
_(
'variable {0} at index "{1}" is {2}, it will be ignored when loading from {3}'
)
self.unknowns.append({
msg.format(
).format(
display_name,
index,
properties,
options["source"],
): option._subconfig}
)
)
else:
if self.invalid_user_data_error:
msg = _(
'family {0} is {1}, {2} at index "{3}", it has been loading from {4}'
)
else:
msg = _(
'family {0} is {1}, {2} at index "{3}", it will be ignored when loading from {4}'
)
self.unknowns.append({
msg.format(
err_description,
self.unknowns.append(
_(
'family {0} is {1}, {2} at index "{3}" will be ignored when loading from {4}'
).format(
err._name,
properties,
display_name,
index,
options["source"],
): option._subconfig}
)
)
else:
if path == err_path:
if self.invalid_user_data_error:
msg = _(
"variable is {0}, it has been loading from {1}"
self.unknowns.append(
_(
"variable {0} is {1}, it will be ignored when loading from {2}"
).format(
display_name, properties, options["source"]
)
else:
msg = _(
"variable is {0}, it will be ignored when loading from {1}"
)
self.unknowns.append({
msg.format(
properties, options["source"]
): option._subconfig}
)
else:
if self.invalid_user_data_error:
msg = _(
"family {0} is {1}, so cannot access to {2}, it has been loading from {3}"
)
else:
msg = _(
"family {0} is {1}, so cannot access to {2}, it will be ignored when loading from {3}"
)
self.unknowns.append({
msg.format(
err_description,
self.unknowns.append(
_(
"family {0} is {1}, {2} will be ignored when loading from {3}"
).format(
err._name,
properties,
display_name,
options["source"],
): option._subconfig}
)
)
else:
self.unknowns.append({
_("{0} in {1}").format(err, options["source"]): option._subconfig}
self.unknowns.append(
_("{0} in {1}").format(err, options["source"])
)
except LeadershipError as err:
self.unknowns.append({_("{0} in {1}").format(err, options["source"]): option._subconfig})
self.unknowns.append(_("{0} in {1}").format(err, options["source"]))
except ValueError as err:
err.prefix = ""
if index is not None:
type_ = option.type(translation=True)
if self.invalid_user_data_error:
msg = _(
'the value "{0}" is an invalid {1} for {2} at index "{3}", {4}, it has been loading from {5}'
)
else:
msg = _(
self.invalids.append(
_(
'the value "{0}" is an invalid {1} for {2} at index "{3}", {4}, it will be ignored when loading from {5}'
)
self.invalids.append({
msg.format(
).format(
self._display_value(option, value),
type_,
option.description(with_quote=True),
index,
err,
options["source"],
): option._subconfig}
)
)
else:
type_ = option.type(translation=True)
if self.invalid_user_data_error:
msg = _(
'the value "{0}" is an invalid {1}, {2}, it has been loading from {3}'
)
else:
msg = _(
'the value "{0}" is an invalid {1}, {2}, it will be ignored when loading from {3}'
)
self.invalids.append({
msg.format(
self.invalids.append(
_(
'the value "{0}" is an invalid {1} for {2}, {3}, it will be ignored when loading from {4}'
).format(
self._display_value(option, value),
type_,
option.description(with_quote=True),
err,
options["source"],
): option._subconfig}
)
)
except AttributeOptionError as err:
if err.code == "option-dynamic":
@ -502,8 +451,9 @@ class UserData:
is_secret_manager = options.get("secret_manager", False)
if is_secret_manager and isinstance(value, tuple):
# it's a function
params = tuple([ParamValue(val) for val in value[1:]])
value = Calculation(value[0], Params(params, kwargs={"option": ParamValue(option)}))
value = value[0](
*value[1:], option=option, warnings=self.warnings, errors=self.errors
)
option.value.set(value)

View file

@ -85,7 +85,6 @@ def get_jinja_variable_to_param(
):
try:
env = SandboxedEnvironment(loader=DictLoader({"tmpl": jinja_text}))
env.add_extension('jinja2.ext.do')
env.filters = functions
parsed_content = Parser(env, jinja_text, "", "").parse()
@ -101,7 +100,7 @@ def get_jinja_variable_to_param(
for g in parsed_content.find_all(Getattr):
variables.add(recurse_getattr(g))
except TemplateSyntaxError as err:
msg = _('error for the variable "{1}" in jinja "{0}": {2}').format(
msg = _('error in jinja "{0}" for the variable "{1}": {2}').format(
jinja_text, current_path, err
)
raise DictConsistencyError(msg, 39, xmlfiles) from err