diff --git a/README.fr.md b/README.fr.md new file mode 100644 index 000000000..d40b8c90b --- /dev/null +++ b/README.fr.md @@ -0,0 +1,210 @@ +--- +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 | +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------| +| **default_structural_format_version**
**Ligne de commande** : -v, --default_structural_format_version
**Variable d'environnement** : DEFAULT_STRUCTURAL_FORMAT_VERSION | Version par défaut du format des fichiers de structure.
Cette valeur n'est utilisée que si la version n'est pas définie dans le fichier de structure. | | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | **Choix** :
• 1.0
• 1.1
• null | +| **functions_files**
**Ligne de commande** : -c, --functions_files
**Variable d'environnement** : FUNCTIONS_FILES | Fichier avec les fonctions.
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`
• le nom de fichier peut être une chemin relatif
• le fichier doit exister
• type de fichier autorisé: "file". | +| **modes_level**
**Ligne de commande** : --modes_level
**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` | +| **default_family_mode**
**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)". | +| **default_variable_mode**
**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)". | +| **base_option_name**
**Variable d'environnement** : BASE_OPTION_NAME | Nom de l'option pour l'option de base. | baseoption | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | | +| **export_with_import**
**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` | | +| **tiramisu_cache**
**Ligne de commande** : -t, --tiramisu_cache
**Variable d'environnement** : TIRAMISU_CACHE | Store Tiramisu cache filename.
Ce fichier contient les instructions Tiramisu utilisé en interne pour charger les variables.
Ce fichier peut être utilisé pour le débogage. | | [`UNIX filename`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | • le nom de fichier peut être une chemin relatif
• type de fichier autorisé: "file". | +| **internal_functions**
**Variable d'environnement** : INTERNAL_FUNCTIONS | Nom des fonctions internes qu'il est possible d'utiliser comme fonction. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | | +| **extra_annotators**
**Variable d'environnement** : EXTRA_ANNOTATORS | Nom des annotators supplémentaires. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | | +| **suffix**
**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` | | +| **force_optional**
**Ligne de commande** :
• --force_optional
• --no-force_optional
**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` | | +| **load_unexist_redefine**
**Variable d'environnement** : LOAD_UNEXIST_REDEFINE | Charger les variables redéfinis même si elles n'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 | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------|--------------------------------------------------------------------------------------------------|----------------------| +| **secret_manager.pattern**
**Ligne de commande** : --secret_manager.pattern
**Variable d'environnement** : SECRET_MANAGER.PATTERN | Le modèle de secret permettant de construire le nom de l'élément recherché dans le gestionnaire de secrets.
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 | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------|---------------------|--------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **step.structural**
**Variable d'environnement** : STEP.STRUCTURAL | Sélection pour structure. | • directory | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | **Choix** :
• directory
• string
• commandline
• risotto
• bitwarden | +| **step.user_data**
**Ligne de commande** : -u, --step.user_data
**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é`*
**Désactivé** : _('cannot load user data for doc output') | `unique`
**Choix** :
• yaml
• environment
• commandline
• ansible
• questionary
• risotto
• bitwarden | +| **step.output**
**Ligne de commande** : -o, --step.output
**Variable d'environnement** : STEP.OUTPUT | Sélection pour sortie. | display | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | `standard` | **Choix** :
• display
• json
• doc
• table
• ansible | + +| Variable | Description | Valeur par défaut | Type | Contrôle des accès | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------|---------------------|---------------------------------------------------------------------------------------------------|----------------------| +| **define_default_params**
**Ligne de commande** :
• --define_default_params
• --no-define_default_params
**Variable d'environnement** : DEFINE_DEFAULT_PARAMS | Sur charger les paramètre par défaut pour le type d'option. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `obligatoire` | `standard` | + +## Paramètre par défaut pour le type d'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'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 | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|----------------------------------|-----------------------------------------------------------------------------------------------|----------------------|----------------------------------------------------------------| +| **default_params.unix_filename.allow_relative**
**Ligne de commande** :
• --default_params.unix_filename.allow_relative
• --default_params.unix_filename.no-allow_relative
**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` | | +| **default_params.unix_filename.test_existence**
**Ligne de commande** :
• --default_params.unix_filename.test_existence
• --default_params.unix_filename.no-test_existence
**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` | | +| **default_params.unix_filename.types**
**Ligne de commande** : --default_params.unix_filename.types
**Variable d'environnement** : DEFAULT_PARAMS.UNIX_FILENAME.TYPES | Type de fichier autorisé. | • file
• directory | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | `unique`
**Choix** :
• file
• directory | + +### IP + +> [!NOTE] +> +> **Chemin** : default_params.ip\ +> `standard` + +| Variable | Description | Valeur par défaut | Type | Contrôle des accès | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------| +| **default_params.ip.private_only**
**Ligne de commande** :
• --default_params.ip.private_only
• --default_params.ip.no-private_only
**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` | +| **default_params.ip.allow_reserved**
**Ligne de commande** :
• --default_params.ip.allow_reserved
• --default_params.ip.no-allow_reserved
**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` | +| **default_params.ip.cidr**
**Ligne de commande** :
• --default_params.ip.cidr
• --default_params.ip.no-cidr
**Variable d'environnement** : DEFAULT_PARAMS.IP.CIDR | L'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 | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------| +| **default_params.cidr.private_only**
**Ligne de commande** :
• --default_params.cidr.private_only
• --default_params.cidr.no-private_only
**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` | +| **default_params.cidr.allow_reserved**
**Ligne de commande** :
• --default_params.cidr.allow_reserved
• --default_params.cidr.no-allow_reserved
**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` | +| **default_params.cidr.cidr**
**Ligne de commande** :
• --default_params.cidr.cidr
• --default_params.cidr.no-cidr
**Variable d'environnement** : DEFAULT_PARAMS.CIDR.CIDR | L'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 | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------| +| **default_params.network.private_only**
**Ligne de commande** :
• --default_params.network.private_only
• --default_params.network.no-private_only
**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` | +| **default_params.network.allow_reserved**
**Ligne de commande** :
• --default_params.network.allow_reserved
• --default_params.network.no-allow_reserved
**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` | +| **default_params.network.cidr**
**Ligne de commande** :
• --default_params.network.cidr
• --default_params.network.no-cidr
**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 | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------| +| **default_params.network_cidr.private_only**
**Ligne de commande** :
• --default_params.network_cidr.private_only
• --default_params.network_cidr.no-private_only
**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` | +| **default_params.network_cidr.allow_reserved**
**Ligne de commande** :
• --default_params.network_cidr.allow_reserved
• --default_params.network_cidr.no-allow_reserved
**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` | +| **default_params.network_cidr.cidr**
**Ligne de commande** :
• --default_params.network_cidr.cidr
• --default_params.network_cidr.no-cidr
**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 | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------|-------------------------------------------------------------------------------------------| +| **default_params.netbios.type**
**Ligne de commande** : --default_params.netbios.type
**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** :
• domainname
• netbios
• hostname
• null | +| **default_params.netbios.allow_without_dot**
**Ligne de commande** :
• --default_params.netbios.allow_without_dot
• --default_params.netbios.no-allow_without_dot
**Variable d'environnement** : DEFAULT_PARAMS.NETBIOS.ALLOW_WITHOUT_DOT | Le nom de domaine peut être un nom d'hôte. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | | +| **default_params.netbios.test_existence**
**Ligne de commande** :
• --default_params.netbios.test_existence
• --default_params.netbios.no-test_existence
**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` | | +| **default_params.netbios.allow_ip**
**Ligne de commande** :
• --default_params.netbios.allow_ip
• --default_params.netbios.no-allow_ip
**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` | | +| **default_params.netbios.allow_cidr_network**
**Ligne de commande** :
• --default_params.netbios.allow_cidr_network
• --default_params.netbios.no-allow_cidr_network
**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` | | +| **default_params.netbios.allow_startswith_dot**
**Ligne de commande** :
• --default_params.netbios.allow_startswith_dot
• --default_params.netbios.no-allow_startswith_dot
**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 | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------|-------------------------------------------------------------------------------------------| +| **default_params.domainname.type**
**Ligne de commande** : --default_params.domainname.type
**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** :
• domainname
• netbios
• hostname
• null | +| **default_params.domainname.allow_without_dot**
**Ligne de commande** :
• --default_params.domainname.allow_without_dot
• --default_params.domainname.no-allow_without_dot
**Variable d'environnement** : DEFAULT_PARAMS.DOMAINNAME.ALLOW_WITHOUT_DOT | Le nom de domaine peut être un nom d'hôte. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | | +| **default_params.domainname.test_existence**
**Ligne de commande** :
• --default_params.domainname.test_existence
• --default_params.domainname.no-test_existence
**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` | | +| **default_params.domainname.allow_ip**
**Ligne de commande** :
• --default_params.domainname.allow_ip
• --default_params.domainname.no-allow_ip
**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` | | +| **default_params.domainname.allow_cidr_network**
**Ligne de commande** :
• --default_params.domainname.allow_cidr_network
• --default_params.domainname.no-allow_cidr_network
**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` | | +| **default_params.domainname.allow_startswith_dot**
**Ligne de commande** :
• --default_params.domainname.allow_startswith_dot
• --default_params.domainname.no-allow_startswith_dot
**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 | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------|-------------------------------------------------------------------------------------------| +| **default_params.hostname.type**
**Ligne de commande** : --default_params.hostname.type
**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** :
• domainname
• netbios
• hostname
• null | +| **default_params.hostname.allow_without_dot**
**Ligne de commande** :
• --default_params.hostname.allow_without_dot
• --default_params.hostname.no-allow_without_dot
**Variable d'environnement** : DEFAULT_PARAMS.HOSTNAME.ALLOW_WITHOUT_DOT | Le nom de domaine peut être un nom d'hôte. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | | +| **default_params.hostname.test_existence**
**Ligne de commande** :
• --default_params.hostname.test_existence
• --default_params.hostname.no-test_existence
**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` | | +| **default_params.hostname.allow_ip**
**Ligne de commande** :
• --default_params.hostname.allow_ip
• --default_params.hostname.no-allow_ip
**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` | | +| **default_params.hostname.allow_cidr_network**
**Ligne de commande** :
• --default_params.hostname.allow_cidr_network
• --default_params.hostname.no-allow_cidr_network
**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` | | +| **default_params.hostname.allow_startswith_dot**
**Ligne de commande** :
• --default_params.hostname.allow_startswith_dot
• --default_params.hostname.no-allow_startswith_dot
**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 | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------|-------------------------------------------------------------------------------------------| +| **default_params.web_address.type**
**Ligne de commande** : --default_params.web_address.type
**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** :
• domainname
• netbios
• hostname
• null | +| **default_params.web_address.allow_without_dot**
**Ligne de commande** :
• --default_params.web_address.allow_without_dot
• --default_params.web_address.no-allow_without_dot
**Variable d'environnement** : DEFAULT_PARAMS.WEB_ADDRESS.ALLOW_WITHOUT_DOT | Le nom de domaine peut être un nom d'hôte. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | | +| **default_params.web_address.test_existence**
**Ligne de commande** :
• --default_params.web_address.test_existence
• --default_params.web_address.no-test_existence
**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` | | +| **default_params.web_address.allow_ip**
**Ligne de commande** :
• --default_params.web_address.allow_ip
• --default_params.web_address.no-allow_ip
**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` | | +| **default_params.web_address.allow_cidr_network**
**Ligne de commande** :
• --default_params.web_address.allow_cidr_network
• --default_params.web_address.no-allow_cidr_network
**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` | | +| **default_params.web_address.allow_startswith_dot**
**Ligne de commande** :
• --default_params.web_address.allow_startswith_dot
• --default_params.web_address.no-allow_startswith_dot
**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` | | +| **default_params.web_address.allow_range**
**Ligne de commande** :
• --default_params.web_address.allow_range
• --default_params.web_address.no-allow_range
**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` | | +| **default_params.web_address.allow_protocol**
**Ligne de commande** :
• --default_params.web_address.allow_protocol
• --default_params.web_address.no-allow_protocol
**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` | | +| **default_params.web_address.allow_zero**
**Ligne de commande** :
• --default_params.web_address.allow_zero
• --default_params.web_address.no-allow_zero
**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` | | +| **default_params.web_address.allow_wellknown**
**Ligne de commande** :
• --default_params.web_address.allow_wellknown
• --default_params.web_address.no-allow_wellknown
**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` | | +| **default_params.web_address.allow_registred**
**Ligne de commande** :
• --default_params.web_address.allow_registred
• --default_params.web_address.no-allow_registred
**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` | | +| **default_params.web_address.allow_private**
**Ligne de commande** :
• --default_params.web_address.allow_private
• --default_params.web_address.no-allow_private
**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 | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------|---------------------|-------------------------------------------------------------------------------------|----------------------| +| **default_params.port.allow_range**
**Ligne de commande** :
• --default_params.port.allow_range
• --default_params.port.no-allow_range
**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` | +| **default_params.port.allow_protocol**
**Ligne de commande** :
• --default_params.port.allow_protocol
• --default_params.port.no-allow_protocol
**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` | +| **default_params.port.allow_zero**
**Ligne de commande** :
• --default_params.port.allow_zero
• --default_params.port.no-allow_zero
**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` | +| **default_params.port.allow_wellknown**
**Ligne de commande** :
• --default_params.port.allow_wellknown
• --default_params.port.no-allow_wellknown
**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` | +| **default_params.port.allow_registred**
**Ligne de commande** :
• --default_params.port.allow_registred
• --default_params.port.no-allow_registred
**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` | +| **default_params.port.allow_private**
**Ligne de commande** :
• --default_params.port.allow_private
• --default_params.port.no-allow_private
**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` | + + diff --git a/README.md b/README.md index debc1d8ae..1e528dd42 100644 --- a/README.md +++ b/README.md @@ -1,105 +1,210 @@ -![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 they’re 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 --- -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 -``` +gitea: none +include_toc: true +--- +[🇬🇧 (EN)](README.md) - [🇫🇷 (FR)](README.fr.md) -## Generate variable +| Variable | Description | Default value | Type | Access control | Validator | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|------------------|----------------------------------------------------------------------------------------------------------------------------------| +| **default_structural_format_version**
**Command line**: -v, --default_structural_format_version
**Environment variable**: DEFAULT_STRUCTURAL_FORMAT_VERSION | Default version of the structural file format.
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**:
• 1.0
• 1.1
• null | +| **functions_files**
**Command line**: -c, --functions_files
**Environment variable**: FUNCTIONS_FILES | File with functions.
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`
• this filename could be a relative path
• this file must exist
• file type allowed: "file". | +| **modes_level**
**Command line**: --modes_level
**Environment variable**: MODES_LEVEL | All modes level available. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | `unique` | +| **default_family_mode**
**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)". | +| **default_variable_mode**
**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)". | +| **base_option_name**
**Environment variable**: BASE_OPTION_NAME | Option name for the base option. | baseoption | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | | +| **export_with_import**
**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` | | +| **tiramisu_cache**
**Command line**: -t, --tiramisu_cache
**Environment variable**: TIRAMISU_CACHE | Store Tiramisu cache filename.
This file contains the Tiramisu instructions used internally to load the variables.
This file can be used for debugging. | | [`UNIX filename`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | • this filename could be a relative path
• file type allowed: "file". | +| **internal_functions**
**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` | | +| **extra_annotators**
**Environment variable**: EXTRA_ANNOTATORS | Name of extra annotators. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | | +| **suffix**
**Environment variable**: SUFFIX | Suffix add to generated options name. | | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | | +| **force_optional**
**Command line**:
• --force_optional
• --no-force_optional
**Environment variable**: FORCE_OPTIONAL | Every variables in calculation are optionals. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | `standard` | | +| **load_unexist_redefine**
**Environment variable**: LOAD_UNEXIST_REDEFINE | Loads redefine variables even if there don't already exists. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | | -### With commandline: +## The secret manager -```bash -# rougail -m dict -Variables: -┣━━ 📓 my_first_variable: my_value -┗━━ 📂 my_family - ┗━━ 📓 my_second_variable: 1 +> [!NOTE] +> +> **Path**: secret_manager\ +> `standard` -``` +| Variable | Description | Default value | Type | Access control | +|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------|------------------------------------------------------------------------------------------------|------------------| +| **secret_manager.pattern**
**Command line**: --secret_manager.pattern
**Environment variable**: SECRET_MANAGER.PATTERN | The secret pattern to constructing the name of the item searched for in the secret manager.
The pattern is in Jinja2 format. | {{ project }} - {{ environment }} - {{ service }} - {{ user }} | [`string`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | `standard` | -### With default value: +## Load and exporter steps -Here is a python3 example file: +> [!NOTE] +> +> **Path**: step\ +> `standard` -```python -from rougail import Rougail, RougailConfig -from pprint import pprint +| Variable | Description | Default value | Type | Access control | Validator | +|-------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------|------------------|------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **step.structural**
**Environment variable**: STEP.STRUCTURAL | Select for structural. | • directory | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | **Choices**:
• directory
• string
• commandline
• risotto
• bitwarden | +| **step.user_data**
**Command line**: -u, --step.user_data
**Environment variable**: STEP.USER_DATA | Select for user datas. | | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` *`disabled`*
**Disabled**: _('cannot load user data for doc output') | `unique`
**Choices**:
• yaml
• environment
• commandline
• ansible
• questionary
• risotto
• bitwarden | +| **step.output**
**Command line**: -o, --step.output
**Environment variable**: STEP.OUTPUT | Select for output. | display | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `mandatory` | `standard` | **Choices**:
• display
• json
• doc
• table
• ansible | -RougailConfig['dictionaries_dir'] = ['dict'] -rougail = Rougail() -config = rougail.run() -pprint(config.value.get(), sort_dicts=False) -``` +| Variable | Description | Default value | Type | Access control | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------|-----------------|-------------------------------------------------------------------------------------------------|------------------| +| **define_default_params**
**Command line**:
• --define_default_params
• --no-define_default_params
**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` | -The result is: +## Default parameters for option type -```json -{: {: 'my_value', - : {: 1}}} -``` +> [!NOTE] +> +> **Path**: default_params\ +> `standard` *`disabled`*\ +> **Disabled**: when the variable "[Override default parameters for option type](#define_default_params)" has the value "false" -### With modified value +### UNIX filename + +> [!NOTE] +> +> **Path**: default_params.unix_filename\ +> `standard` + +| Variable | Description | Default value | Type | Access control | Validator | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------|----------------------------------|-----------------------------------------------------------------------------------------------|------------------|-----------------------------------------------------------------| +| **default_params.unix_filename.allow_relative**
**Command line**:
• --default_params.unix_filename.allow_relative
• --default_params.unix_filename.no-allow_relative
**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` | | +| **default_params.unix_filename.test_existence**
**Command line**:
• --default_params.unix_filename.test_existence
• --default_params.unix_filename.no-test_existence
**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` | | +| **default_params.unix_filename.types**
**Command line**: --default_params.unix_filename.types
**Environment variable**: DEFAULT_PARAMS.UNIX_FILENAME.TYPES | File type allowed. | • file
• directory | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) `multiple` | `standard` | `unique`
**Choices**:
• file
• directory | + +### IP + +> [!NOTE] +> +> **Path**: default_params.ip\ +> `standard` + +| Variable | Description | Default value | Type | Access control | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|-----------------|-------------------------------------------------------------------------------------|------------------| +| **default_params.ip.private_only**
**Command line**:
• --default_params.ip.private_only
• --default_params.ip.no-private_only
**Environment variable**: DEFAULT_PARAMS.IP.PRIVATE_ONLY | Private IP are allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | +| **default_params.ip.allow_reserved**
**Command line**:
• --default_params.ip.allow_reserved
• --default_params.ip.no-allow_reserved
**Environment variable**: DEFAULT_PARAMS.IP.ALLOW_RESERVED | Reserved IP are allowed. | true | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | +| **default_params.ip.cidr**
**Command line**:
• --default_params.ip.cidr
• --default_params.ip.no-cidr
**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 | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|-----------------|-------------------------------------------------------------------------------------|------------------| +| **default_params.cidr.private_only**
**Command line**:
• --default_params.cidr.private_only
• --default_params.cidr.no-private_only
**Environment variable**: DEFAULT_PARAMS.CIDR.PRIVATE_ONLY | Private IP are allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | +| **default_params.cidr.allow_reserved**
**Command line**:
• --default_params.cidr.allow_reserved
• --default_params.cidr.no-allow_reserved
**Environment variable**: DEFAULT_PARAMS.CIDR.ALLOW_RESERVED | Reserved IP are allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | +| **default_params.cidr.cidr**
**Command line**:
• --default_params.cidr.cidr
• --default_params.cidr.no-cidr
**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 | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------|-----------------|-------------------------------------------------------------------------------------|------------------| +| **default_params.network.private_only**
**Command line**:
• --default_params.network.private_only
• --default_params.network.no-private_only
**Environment variable**: DEFAULT_PARAMS.NETWORK.PRIVATE_ONLY | Private network are allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | +| **default_params.network.allow_reserved**
**Command line**:
• --default_params.network.allow_reserved
• --default_params.network.no-allow_reserved
**Environment variable**: DEFAULT_PARAMS.NETWORK.ALLOW_RESERVED | Reserved network are allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | +| **default_params.network.cidr**
**Command line**:
• --default_params.network.cidr
• --default_params.network.no-cidr
**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 | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------|-----------------|-------------------------------------------------------------------------------------|------------------| +| **default_params.network_cidr.private_only**
**Command line**:
• --default_params.network_cidr.private_only
• --default_params.network_cidr.no-private_only
**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` | +| **default_params.network_cidr.allow_reserved**
**Command line**:
• --default_params.network_cidr.allow_reserved
• --default_params.network_cidr.no-allow_reserved
**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` | +| **default_params.network_cidr.cidr**
**Command line**:
• --default_params.network_cidr.cidr
• --default_params.network_cidr.no-cidr
**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 | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------|-----------------|-------------------------------------------------------------------------------------|------------------|--------------------------------------------------------------------------------------------| +| **default_params.netbios.type**
**Command line**: --default_params.netbios.type
**Environment variable**: DEFAULT_PARAMS.NETBIOS.TYPE | Type of domainname. | netbios | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | **Choices**:
• domainname
• netbios
• hostname
• null | +| **default_params.netbios.allow_without_dot**
**Command line**:
• --default_params.netbios.allow_without_dot
• --default_params.netbios.no-allow_without_dot
**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` | | +| **default_params.netbios.test_existence**
**Command line**:
• --default_params.netbios.test_existence
• --default_params.netbios.no-test_existence
**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` | | +| **default_params.netbios.allow_ip**
**Command line**:
• --default_params.netbios.allow_ip
• --default_params.netbios.no-allow_ip
**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` | | +| **default_params.netbios.allow_cidr_network**
**Command line**:
• --default_params.netbios.allow_cidr_network
• --default_params.netbios.no-allow_cidr_network
**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` | | +| **default_params.netbios.allow_startswith_dot**
**Command line**:
• --default_params.netbios.allow_startswith_dot
• --default_params.netbios.no-allow_startswith_dot
**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 | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------|-----------------|-------------------------------------------------------------------------------------|------------------|--------------------------------------------------------------------------------------------| +| **default_params.domainname.type**
**Command line**: --default_params.domainname.type
**Environment variable**: DEFAULT_PARAMS.DOMAINNAME.TYPE | Type of domainname. | domainname | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | **Choices**:
• domainname
• netbios
• hostname
• null | +| **default_params.domainname.allow_without_dot**
**Command line**:
• --default_params.domainname.allow_without_dot
• --default_params.domainname.no-allow_without_dot
**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` | | +| **default_params.domainname.test_existence**
**Command line**:
• --default_params.domainname.test_existence
• --default_params.domainname.no-test_existence
**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` | | +| **default_params.domainname.allow_ip**
**Command line**:
• --default_params.domainname.allow_ip
• --default_params.domainname.no-allow_ip
**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` | | +| **default_params.domainname.allow_cidr_network**
**Command line**:
• --default_params.domainname.allow_cidr_network
• --default_params.domainname.no-allow_cidr_network
**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` | | +| **default_params.domainname.allow_startswith_dot**
**Command line**:
• --default_params.domainname.allow_startswith_dot
• --default_params.domainname.no-allow_startswith_dot
**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 | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------|-----------------|-------------------------------------------------------------------------------------|------------------|--------------------------------------------------------------------------------------------| +| **default_params.hostname.type**
**Command line**: --default_params.hostname.type
**Environment variable**: DEFAULT_PARAMS.HOSTNAME.TYPE | Type of domainname. | hostname | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | **Choices**:
• domainname
• netbios
• hostname
• null | +| **default_params.hostname.allow_without_dot**
**Command line**:
• --default_params.hostname.allow_without_dot
• --default_params.hostname.no-allow_without_dot
**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` | | +| **default_params.hostname.test_existence**
**Command line**:
• --default_params.hostname.test_existence
• --default_params.hostname.no-test_existence
**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` | | +| **default_params.hostname.allow_ip**
**Command line**:
• --default_params.hostname.allow_ip
• --default_params.hostname.no-allow_ip
**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` | | +| **default_params.hostname.allow_cidr_network**
**Command line**:
• --default_params.hostname.allow_cidr_network
• --default_params.hostname.no-allow_cidr_network
**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` | | +| **default_params.hostname.allow_startswith_dot**
**Command line**:
• --default_params.hostname.allow_startswith_dot
• --default_params.hostname.no-allow_startswith_dot
**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 | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|-----------------|-------------------------------------------------------------------------------------|------------------|--------------------------------------------------------------------------------------------| +| **default_params.web_address.type**
**Command line**: --default_params.web_address.type
**Environment variable**: DEFAULT_PARAMS.WEB_ADDRESS.TYPE | Type of domainname. | domainname | [`choice`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | **Choices**:
• domainname
• netbios
• hostname
• null | +| **default_params.web_address.allow_without_dot**
**Command line**:
• --default_params.web_address.allow_without_dot
• --default_params.web_address.no-allow_without_dot
**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` | | +| **default_params.web_address.test_existence**
**Command line**:
• --default_params.web_address.test_existence
• --default_params.web_address.no-test_existence
**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` | | +| **default_params.web_address.allow_ip**
**Command line**:
• --default_params.web_address.allow_ip
• --default_params.web_address.no-allow_ip
**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` | | +| **default_params.web_address.allow_cidr_network**
**Command line**:
• --default_params.web_address.allow_cidr_network
• --default_params.web_address.no-allow_cidr_network
**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` | | +| **default_params.web_address.allow_startswith_dot**
**Command line**:
• --default_params.web_address.allow_startswith_dot
• --default_params.web_address.no-allow_startswith_dot
**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` | | +| **default_params.web_address.allow_range**
**Command line**:
• --default_params.web_address.allow_range
• --default_params.web_address.no-allow_range
**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` | | +| **default_params.web_address.allow_protocol**
**Command line**:
• --default_params.web_address.allow_protocol
• --default_params.web_address.no-allow_protocol
**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` | | +| **default_params.web_address.allow_zero**
**Command line**:
• --default_params.web_address.allow_zero
• --default_params.web_address.no-allow_zero
**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` | | +| **default_params.web_address.allow_wellknown**
**Command line**:
• --default_params.web_address.allow_wellknown
• --default_params.web_address.no-allow_wellknown
**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` | | +| **default_params.web_address.allow_registred**
**Command line**:
• --default_params.web_address.allow_registred
• --default_params.web_address.no-allow_registred
**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` | | +| **default_params.web_address.allow_private**
**Command line**:
• --default_params.web_address.allow_private
• --default_params.web_address.no-allow_private
**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 | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|-----------------|-------------------------------------------------------------------------------------|------------------| +| **default_params.port.allow_range**
**Command line**:
• --default_params.port.allow_range
• --default_params.port.no-allow_range
**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` | +| **default_params.port.allow_protocol**
**Command line**:
• --default_params.port.allow_protocol
• --default_params.port.no-allow_protocol
**Environment variable**: DEFAULT_PARAMS.PORT.ALLOW_PROTOCOL | Can have the protocol. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | +| **default_params.port.allow_zero**
**Command line**:
• --default_params.port.allow_zero
• --default_params.port.no-allow_zero
**Environment variable**: DEFAULT_PARAMS.PORT.ALLOW_ZERO | Port 0 is allowed. | false | [`boolean`](https://rougail.readthedocs.io/en/latest/variable.html#variables-types) | `standard` | +| **default_params.port.allow_wellknown**
**Command line**:
• --default_params.port.allow_wellknown
• --default_params.port.no-allow_wellknown
**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` | +| **default_params.port.allow_registred**
**Command line**:
• --default_params.port.allow_registred
• --default_params.port.no-allow_registred
**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` | +| **default_params.port.allow_private**
**Command line**:
• --default_params.port.allow_private
• --default_params.port.no-allow_private
**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` | -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 -{: {: 'modified_value', - : {: 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) diff --git a/locale/fr/LC_MESSAGES/rougail.po b/locale/fr/LC_MESSAGES/rougail.po index d753b707b..19449893d 100644 --- a/locale/fr/LC_MESSAGES/rougail.po +++ b/locale/fr/LC_MESSAGES/rougail.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2025-11-21 08:31+0100\n" -"PO-Revision-Date: 2025-11-21 08:31+0100\n" +"POT-Creation-Date: 2025-12-22 08:45+0100\n" +"PO-Revision-Date: 2025-12-22 08:46+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -185,79 +185,146 @@ msgid "" msgstr "" "la variable \"{0}\" a la valeur par défaut invalide \"{1}\" devrait être {2}" -#: src/rougail/config/__init__.py:276 -msgid "Structure format version by default, if not specified in structure file" +#: 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" msgstr "" -"La version du format de la structure par défaut, si non spécifier dans le " +"Cette valeur n'est utilisée que si la version n'est pas définie dans le " "fichier de structure" -#: src/rougail/config/__init__.py:284 +#: src/rougail/config/__init__.py:280 msgid "File with functions" msgstr "Fichier avec les fonctions" -#: src/rougail/config/__init__.py:296 +#: 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 msgid "All modes level available" msgstr "Tous les niveaux de modes valides" -#: src/rougail/config/__init__.py:308 +#: src/rougail/config/__init__.py:305 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:352 +#: 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 msgid "Option name for the base option" msgstr "Nom de l'option pour l'option de base" -#: src/rougail/config/__init__.py:357 +#: src/rougail/config/__init__.py:360 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:362 -msgid "Tiramisu cache filename" -msgstr "Nom du fichier du cache Tiramisu" +#: 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:370 +#: 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 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:376 +#: src/rougail/config/__init__.py:382 msgid "Name of extra annotators" msgstr "Nom des annotators supplémentaires" -#: src/rougail/config/__init__.py:382 +#: src/rougail/config/__init__.py:388 msgid "Suffix add to generated options name" msgstr "Suffix ajouté pour généré le nom des options" -#: src/rougail/config/__init__.py:388 +#: src/rougail/config/__init__.py:394 msgid "Every variables in calculation are optionals" msgstr "Toutes les variables dans un calcul sont optionnelles" -#: src/rougail/config/__init__.py:392 +#: src/rougail/config/__init__.py:398 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: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:402 +msgid "The secret manager" +msgstr "Le gestionnaire de secret" -#: 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: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:428 +#: 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 msgid "Select for {0}" msgstr "Sélection pour {0}" -#: src/rougail/config/__init__.py:508 +#: src/rougail/config/__init__.py:500 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:511 +#: src/rougail/config/__init__.py:503 msgid "Default parameters for option type" msgstr "Paramètre par défaut pour le type d'option" @@ -296,42 +363,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:121 +#: src/rougail/convert/object_model.py:132 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:127 +#: src/rougail/convert/object_model.py:138 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:132 -#: src/rougail/convert/object_model.py:513 +#: src/rougail/convert/object_model.py:143 +#: src/rougail/convert/object_model.py:527 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:151 +#: src/rougail/convert/object_model.py:162 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:180 +#: src/rougail/convert/object_model.py:191 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:185 +#: src/rougail/convert/object_model.py:196 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:202 +#: src/rougail/convert/object_model.py:213 msgid "" "the variable \"{0}\" is not a follower, so cannot have index type for param " "in \"{1}\"" @@ -339,7 +406,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:252 +#: src/rougail/convert/object_model.py:263 msgid "" "\"warnings\" are only available with attribute \"{self.attribute_name}\" for " "variable \"{self.ori_path}\"" @@ -347,16 +414,16 @@ msgstr "" "\"warnings\" est seulement utilisable avec l'attribut \"{self.attribute_name}" "\" pour la variable \"{self.ori_path}\"" -#: src/rougail/convert/object_model.py:314 +#: src/rougail/convert/object_model.py:325 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:404 -#: src/rougail/convert/object_model.py:435 +#: src/rougail/convert/object_model.py:415 +#: src/rougail/convert/object_model.py:446 msgid "" "variable \"{0}\" has a calculating \"{1}\" with an invalid return_type, " "should be boolean or string, not \"{2}\"" @@ -364,7 +431,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:411 +#: src/rougail/convert/object_model.py:422 msgid "" "the variable \"{0}\" has a return_type \"{1}\", for attribute \"{2}\" but " "has not description in {3}" @@ -372,11 +439,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:416 +#: src/rougail/convert/object_model.py:427 msgid "value is invalid" msgstr "la valeur est invalide" -#: src/rougail/convert/object_model.py:508 +#: src/rougail/convert/object_model.py:522 msgid "" "a variable \"{0}\" is needs in attribute \"{1}\" for \"{2}\" but it's a " "family" @@ -384,7 +451,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:533 +#: src/rougail/convert/object_model.py:547 msgid "" "variable \"{0}\" has an attribute \"{1}\" calculated with the unknown " "variable \"{2}\"" @@ -392,7 +459,7 @@ msgstr "" "la variable \"{0}\" a un attribut invalide \"{1}\" calculé avec la variable " "inconnue \"{2}\"" -#: src/rougail/convert/object_model.py:585 +#: src/rougail/convert/object_model.py:599 msgid "" "the variable \"{0}\" has an invalid \"{1}\" the variable \"{2}\" is in a sub " "dynamic option" @@ -400,14 +467,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:594 +#: src/rougail/convert/object_model.py:608 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:636 +#: src/rougail/convert/object_model.py:650 msgid "" "the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" " "must not be multi" @@ -415,7 +482,7 @@ msgstr "" "la variable \"{0}\" a un attribut invalide \"{1}\", la variable \"{2}\" ne " "doit pas être multiple" -#: src/rougail/convert/object_model.py:650 +#: src/rougail/convert/object_model.py:664 msgid "" "the variable \"{0}\" has an invalid attribute \"{1}\", the variable must not " "be a multi or the variable \"{2}\" must be multi" @@ -423,7 +490,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:664 +#: src/rougail/convert/object_model.py:678 msgid "" "the variable \"{0}\" has an invalid attribute \"{1}\", the variable must be " "a multi or the variable \"{2}\" must not be multi" @@ -431,7 +498,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:678 +#: src/rougail/convert/object_model.py:692 msgid "" "the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" " "is multi but is inside a list" @@ -439,7 +506,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:700 +#: src/rougail/convert/object_model.py:714 msgid "" "the variable \"{0}\" is waiting for a list as \"{1}\" but the attribute " "\"default\" is not a list (\"{2}\")" @@ -447,7 +514,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:704 +#: src/rougail/convert/object_model.py:718 msgid "" "the variable \"{0}\" is not waiting for a list as \"{1}\" but the attribute " "\"default\" is a list (\"{2}\")" @@ -455,7 +522,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:726 +#: src/rougail/convert/object_model.py:740 msgid "" "\"{0}\" attribut shall not have an \"optional\" attribute without the " "\"default\" attribute for variable \"{1}\"" @@ -463,7 +530,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:748 +#: src/rougail/convert/object_model.py:762 msgid "" "variable \"{0}\" has a default value calculated with \"{1}\" which has " "incompatible type" @@ -471,7 +538,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:790 +#: src/rougail/convert/object_model.py:804 msgid "" "the variable \"{0}\" is waiting for a boolean as \"{1}\" but the attribute " "\"default\" is not a boolean (\"{2}\")" @@ -479,7 +546,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:812 +#: src/rougail/convert/object_model.py:826 msgid "" "\"when\" is not allowed in format version 1.0 for attribute \"{0}\" for " "variable \"{1}\"" @@ -487,7 +554,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:817 +#: src/rougail/convert/object_model.py:831 msgid "" "the variable \"{0}\" has an invalid attribute \"{1}\", \"when\" and " "\"when_not\" cannot set together" @@ -495,7 +562,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:825 +#: src/rougail/convert/object_model.py:839 msgid "" "\"when_not\" is not allowed in format version 1.0 for attribute \"{0}\" for " "variable \"{1}\"" @@ -503,7 +570,15 @@ 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:881 +#: 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 msgid "" "cannot find variable \"{0}\" for the information \"{1}\" when calculating " "\"{2}\"" @@ -511,19 +586,19 @@ msgstr "" "ne peut trouver la variable \"{0}\" pour l'information \"{1}\" lors du " "calcul de \"{2}\"" -#: src/rougail/convert/object_model.py:886 +#: src/rougail/convert/object_model.py:903 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:938 +#: src/rougail/convert/object_model.py:955 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:944 -#: src/rougail/convert/object_model.py:954 +#: src/rougail/convert/object_model.py:961 +#: src/rougail/convert/object_model.py:971 msgid "" "the identifier has an invalid attribute \"{0}\", \"when\" and \"when_not\" " "cannot set together" @@ -531,7 +606,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:980 +#: src/rougail/convert/object_model.py:997 msgid "" "the variable \"{0}\" is not a follower, so cannot have index type for \"{1}\"" msgstr "" @@ -546,20 +621,36 @@ 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:353 +#: 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 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:162 -#: src/rougail/user_datas.py:412 src/rougail/user_datas.py:415 +#: src/rougail/error.py:61 src/rougail/tiramisu.py:235 +#: src/rougail/user_data.py:452 src/rougail/user_data.py:455 msgid "{0} in {1}" msgstr "{0} dans {1}" -#: src/rougail/structural_commandline/annotator.py:66 +#: src/rougail/structural_commandline/annotator.py:67 msgid "alternative_name \"{0}\" conflict with \"--help\"" msgstr "alternative_name \"{0}\" est en conflit avec \"--help\"" -#: src/rougail/structural_commandline/annotator.py:71 +#: src/rougail/structural_commandline/annotator.py:72 msgid "conflict alternative_name \"{0}\": \"{1}\" and \"{2}\"" msgstr "conflit dans les \"alternative_name\" \"{0}\": \"{1}\" et \"{2}\"" @@ -568,21 +659,33 @@ 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:49 +#: src/rougail/structural_directory/config.py:60 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" @@ -597,48 +700,234 @@ 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:335 -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}" +#: src/rougail/tiramisu.py:86 +msgid "IP must be in CIDR format" +msgstr "l'IP doit être au format CIDR" -#: src/rougail/user_datas.py:145 +#: 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 +msgid "" +"the attribute \"{0}\" in {1} with the parameters \"{2}\" causes the error: " +"{3}" +msgstr "" +"l'attribut \"{0}\" dans {1} avec les paramètres \"{2}\" provoque l'erreur : " +"{3}" + +#: 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 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_datas.py:229 -msgid "the variable \"{0}\" contains secrets and should not be defined in {1}" +#: src/rougail/user_data.py:230 +msgid "the variable contains secrets and should not be defined in {0}" msgstr "" -"la variable \"{0}\" contient des secrets et ne devrait pas être défini dans " -"{1}" +"la variable contient des secrets et ne devrait pas être défini dans {0}" -#: src/rougail/user_datas.py:269 +#: src/rougail/user_data.py:269 msgid "loaded from {0}" msgstr "chargée depuis {0}" -#: src/rougail/user_datas.py:311 +#: src/rougail/user_data.py:311 msgid "" -"cannot set the value \"{0}\" to the family {1}, it will be ignored when " -"loading from {2}" +"is a family so we cannot set the value \"{0}\", it has been loading from {1}" msgstr "" -"impossible de définir la valeur \"{0}\" à la famille {1}, elle sera ignorée " -"lors du chargement depuis {2}" +"est une famille donc il n'est pas possible de définir la valeur \"{0}\", " +"elle a été chargée 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: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:327 +#: 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 msgid "" "variable or family \"{0}\" does not exist, it will be ignored when loading " "from {1}" @@ -646,7 +935,12 @@ msgstr "" "la variable ou la famille \"{0}\" n'existe pas, elle sera ignorée lors du " "chargement depuis {1}" -#: src/rougail/user_datas.py:333 +#: 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 msgid "" "\"{0}\" is the name of a dynamic family, it will be ignored when loading " "from {1}" @@ -654,7 +948,16 @@ msgstr "" "\"{0}\" est le nom d'une famille dynamique, il sera ignoré lors du " "chargement depuis {1}" -#: src/rougail/user_datas.py:369 +#: 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 msgid "" "variable {0} at index \"{1}\" is {2}, it will be ignored when loading from " "{3}" @@ -662,23 +965,50 @@ msgstr "" "la variable {0} à l'index \"{1}\" est {2}, elle sera ignorée lors du " "chargement depuis {3}" -#: src/rougail/user_datas.py:380 +#: 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 msgid "" -"family {0} is {1}, {2} at index \"{3}\" will be ignored when loading from {4}" +"family {0} is {1}, {2} at index \"{3}\", it will be ignored when loading " +"from {4}" msgstr "" -"la famille {0} est {1}, {2} à l'index \"{3}\" sera ignorée lors du " -"chargement depuis {4}" +"la famille {0} est {1}, {2} à l'index \"{3}\", elle a été chargée depuis {4}" -#: src/rougail/user_datas.py:393 -msgid "variable {0} is {1}, it will be ignored when loading from {2}" +#: 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}" msgstr "" -"la variable {0} est {1}, elle sera ignorée lors du chargement depuis {2}" +"la famille {0} est {1}, donc ne peut accéder à {2}, elle a été chargée " +"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: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:421 +#: 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 msgid "" "the value \"{0}\" is an invalid {1} for {2} at index \"{3}\", {4}, it will " "be ignored when loading from {5}" @@ -686,13 +1016,18 @@ 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_datas.py:435 -msgid "" -"the value \"{0}\" is an invalid {1} for {2}, {3}, it will be ignored when " -"loading from {4}" +#: 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}, {3}, elle sera ignorée lors " -"du chargement depuis {4}" +"la valeur \"{0}\" est un {1} invalide pour {2}, elle a été chargée depuis {3}" + +#: src/rougail/user_data.py:485 +msgid "" +"the value \"{0}\" is an invalid {1}, {2}, it will be ignored when loading " +"from {3}" +msgstr "" +"la valeur \"{0}\" est un {1} invalide pour {2}, elle sera ignorée lors du " +"chargement depuis {4}" #: src/rougail/utils.py:56 msgid "" @@ -702,30 +1037,41 @@ msgstr "" "nom invalide pour la variable ou famille \"{0}\" doit seulement contenir des " "caractères ascii minuscule, nombre or _" -#: 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: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:212 +#: src/rougail/utils.py:213 msgid "mandatory" msgstr "obligatoire" -#: src/rougail/utils.py:213 +#: src/rougail/utils.py:214 msgid "hidden" msgstr "cachée" -#: src/rougail/utils.py:214 +#: src/rougail/utils.py:215 msgid "disabled" msgstr "désactivé" -#: src/rougail/utils.py:215 +#: src/rougail/utils.py:216 msgid "unique" msgstr "unique" -#: src/rougail/utils.py:216 +#: src/rougail/utils.py:217 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 | " @@ -793,9 +1139,6 @@ 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" diff --git a/locale/rougail.pot b/locale/rougail.pot index 80f552d81..6aae804f1 100644 --- a/locale/rougail.pot +++ b/locale/rougail.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2025-11-21 08:31+0100\n" +"POT-Creation-Date: 2025-12-22 08:46+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -127,75 +127,122 @@ msgstr "" msgid "the variable \"{0}\" has an unvalid default value \"{1}\" should be in {2}" msgstr "" -#: src/rougail/config/__init__.py:276 -msgid "Structure format version by default, if not specified in structure file" +#: src/rougail/config/__init__.py:271 +msgid "Default version of the structural file format" msgstr "" -#: src/rougail/config/__init__.py:284 +#: 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 msgid "File with functions" msgstr "" -#: src/rougail/config/__init__.py:296 +#: 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 msgid "All modes level available" msgstr "" -#: src/rougail/config/__init__.py:308 +#: src/rougail/config/__init__.py:305 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:352 +#: 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 msgid "Option name for the base option" msgstr "" -#: src/rougail/config/__init__.py:357 +#: src/rougail/config/__init__.py:360 msgid "In cache file, do not importation of Tiramisu and other dependencies" msgstr "" -#: src/rougail/config/__init__.py:362 -msgid "Tiramisu cache filename" +#: src/rougail/config/__init__.py:365 +msgid "Store Tiramisu cache filename" msgstr "" -#: src/rougail/config/__init__.py:370 -msgid "Name of internal functions that we can use as a function" +#: 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 -msgid "Name of extra annotators" +msgid "Name of internal functions that we can use as a function" msgstr "" #: src/rougail/config/__init__.py:382 -msgid "Suffix add to generated options name" +msgid "Name of extra annotators" msgstr "" #: src/rougail/config/__init__.py:388 +msgid "Suffix add to generated options name" +msgstr "" + +#: src/rougail/config/__init__.py:394 msgid "Every variables in calculation are optionals" msgstr "" -#: src/rougail/config/__init__.py:392 +#: src/rougail/config/__init__.py:398 msgid "Loads redefine variables even if there don't already exists" msgstr "" -#: src/rougail/config/__init__.py:399 -msgid "The secret pattern to build item name in Bitwarden" +#: src/rougail/config/__init__.py:402 +msgid "The secret manager" msgstr "" -#: src/rougail/config/__init__.py:400 -msgid "The pattern is in Jinja format" +#: src/rougail/config/__init__.py:405 +msgid "The secret pattern to constructing the name of the item searched for in the secret manager" msgstr "" -#: src/rougail/config/__init__.py:428 +#: 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 msgid "Select for {0}" msgstr "" -#: src/rougail/config/__init__.py:508 +#: src/rougail/config/__init__.py:500 msgid "Override default parameters for option type" msgstr "" -#: src/rougail/config/__init__.py:511 +#: src/rougail/config/__init__.py:503 msgid "Default parameters for option type" msgstr "" @@ -231,138 +278,142 @@ msgstr "" msgid "invalid \"structural\" definition ({0}), we cannot load any structural file!" msgstr "" -#: src/rougail/convert/object_model.py:121 +#: src/rougail/convert/object_model.py:132 msgid "cannot find variable \"{0}\" defined in attribute \"{1}\" for \"{2}\"" msgstr "" -#: src/rougail/convert/object_model.py:127 +#: src/rougail/convert/object_model.py:138 msgid "the variable \"{0}\" is in fact a family in attribute \"{1}\" for \"{2}\"" msgstr "" -#: src/rougail/convert/object_model.py:132 -#: src/rougail/convert/object_model.py:513 +#: src/rougail/convert/object_model.py:143 +#: src/rougail/convert/object_model.py:527 msgid "unknown object \"{0}\" in attribute \"{1}\" for \"{2}\"" msgstr "" -#: src/rougail/convert/object_model.py:151 +#: src/rougail/convert/object_model.py:162 msgid "identifier parameter for \"{0}\" in \"{1}\" cannot be set none dynamic family" msgstr "" -#: src/rougail/convert/object_model.py:180 +#: src/rougail/convert/object_model.py:191 msgid "cannot find variable \"{0}\" defined in \"{1}\" for \"{2}\"" msgstr "" -#: src/rougail/convert/object_model.py:185 +#: src/rougail/convert/object_model.py:196 msgid "variable \"{0}\" defined in \"{1}\" for \"{2}\" is a dynamic variable" msgstr "" -#: src/rougail/convert/object_model.py:202 +#: src/rougail/convert/object_model.py:213 msgid "the variable \"{0}\" is not a follower, so cannot have index type for param in \"{1}\"" msgstr "" -#: src/rougail/convert/object_model.py:252 +#: src/rougail/convert/object_model.py:263 msgid "\"warnings\" are only available with attribute \"{self.attribute_name}\" for variable \"{self.ori_path}\"" msgstr "" -#: src/rougail/convert/object_model.py:314 -msgid "the variable \"{0}\" has a depreciated return_type \"{1}\", please use \"{2}\" instead in \"{3}\"" +#: src/rougail/convert/object_model.py:325 +msgid "the variable \"{0}\" has a depreciated return_type \"{1}\", please use \"{2}\" instead in {3}" msgstr "" -#: src/rougail/convert/object_model.py:404 -#: src/rougail/convert/object_model.py:435 +#: src/rougail/convert/object_model.py:415 +#: src/rougail/convert/object_model.py:446 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:411 +#: src/rougail/convert/object_model.py:422 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:416 +#: src/rougail/convert/object_model.py:427 msgid "value is invalid" msgstr "" -#: src/rougail/convert/object_model.py:508 +#: src/rougail/convert/object_model.py:522 msgid "a variable \"{0}\" is needs in attribute \"{1}\" for \"{2}\" but it's a family" msgstr "" -#: src/rougail/convert/object_model.py:533 +#: src/rougail/convert/object_model.py:547 msgid "variable \"{0}\" has an attribute \"{1}\" calculated with the unknown variable \"{2}\"" msgstr "" -#: src/rougail/convert/object_model.py:585 +#: src/rougail/convert/object_model.py:599 msgid "the variable \"{0}\" has an invalid \"{1}\" the variable \"{2}\" is in a sub dynamic option" msgstr "" -#: src/rougail/convert/object_model.py:594 +#: src/rougail/convert/object_model.py:608 msgid "the leader \"{0}\" has an invalid \"{1}\" the follower \"{2}\" is a multi" msgstr "" -#: src/rougail/convert/object_model.py:636 +#: src/rougail/convert/object_model.py:650 msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" must not be multi" msgstr "" -#: src/rougail/convert/object_model.py:650 +#: src/rougail/convert/object_model.py:664 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:664 +#: src/rougail/convert/object_model.py:678 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:678 +#: src/rougail/convert/object_model.py:692 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:700 +#: src/rougail/convert/object_model.py:714 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:704 +#: src/rougail/convert/object_model.py:718 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:726 +#: src/rougail/convert/object_model.py:740 msgid "\"{0}\" attribut shall not have an \"optional\" attribute without the \"default\" attribute for variable \"{1}\"" msgstr "" -#: src/rougail/convert/object_model.py:748 +#: src/rougail/convert/object_model.py:762 msgid "variable \"{0}\" has a default value calculated with \"{1}\" which has incompatible type" msgstr "" -#: src/rougail/convert/object_model.py:790 +#: src/rougail/convert/object_model.py:804 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:812 +#: src/rougail/convert/object_model.py:826 msgid "\"when\" is not allowed in format version 1.0 for attribute \"{0}\" for variable \"{1}\"" msgstr "" -#: src/rougail/convert/object_model.py:817 +#: src/rougail/convert/object_model.py:831 msgid "the variable \"{0}\" has an invalid attribute \"{1}\", \"when\" and \"when_not\" cannot set together" msgstr "" -#: src/rougail/convert/object_model.py:825 +#: src/rougail/convert/object_model.py:839 msgid "\"when_not\" is not allowed in format version 1.0 for attribute \"{0}\" for variable \"{1}\"" msgstr "" -#: src/rougail/convert/object_model.py:881 +#: 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 msgid "cannot find variable \"{0}\" for the information \"{1}\" when calculating \"{2}\"" msgstr "" -#: src/rougail/convert/object_model.py:886 +#: src/rougail/convert/object_model.py:903 msgid "identifier not allowed for the information \"{0}\" when calculating \"{1}\"" msgstr "" -#: src/rougail/convert/object_model.py:938 +#: src/rougail/convert/object_model.py:955 msgid "\"when\" is not allowed in format version 1.0 for attribute \"{0}\"" msgstr "" -#: src/rougail/convert/object_model.py:944 -#: src/rougail/convert/object_model.py:954 +#: src/rougail/convert/object_model.py:961 +#: src/rougail/convert/object_model.py:971 msgid "the identifier has an invalid attribute \"{0}\", \"when\" and \"when_not\" cannot set together" msgstr "" -#: src/rougail/convert/object_model.py:980 +#: src/rougail/convert/object_model.py:997 msgid "the variable \"{0}\" is not a follower, so cannot have index type for \"{1}\"" msgstr "" @@ -370,20 +421,28 @@ 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:353 +#: 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 msgid "internal error, {0} is not a dynamic variable" msgstr "" -#: src/rougail/error.py:61 src/rougail/tiramisu.py:162 -#: src/rougail/user_datas.py:412 src/rougail/user_datas.py:415 +#: src/rougail/error.py:61 src/rougail/tiramisu.py:235 +#: src/rougail/user_data.py:452 src/rougail/user_data.py:455 msgid "{0} in {1}" msgstr "" -#: src/rougail/structural_commandline/annotator.py:66 +#: src/rougail/structural_commandline/annotator.py:67 msgid "alternative_name \"{0}\" conflict with \"--help\"" msgstr "" -#: src/rougail/structural_commandline/annotator.py:71 +#: src/rougail/structural_commandline/annotator.py:72 msgid "conflict alternative_name \"{0}\": \"{1}\" and \"{2}\"" msgstr "" @@ -392,21 +451,29 @@ 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:49 +#: src/rougail/structural_directory/config.py:60 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 "" @@ -419,91 +486,304 @@ 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:335 -msgid "cannot calculating \"{0}\" attribute for variable \"{1}\" in {2} with parameters \"{3}\": {4}" +#: src/rougail/tiramisu.py:86 +msgid "IP must be in CIDR format" msgstr "" -#: src/rougail/user_datas.py:145 +#: 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 msgid "cannot load variable path \"{0}\", the identifier \"{1}\" is not valid in {2}" msgstr "" -#: src/rougail/user_datas.py:229 -msgid "the variable \"{0}\" contains secrets and should not be defined in {1}" +#: src/rougail/user_data.py:230 +msgid "the variable contains secrets and should not be defined in {0}" msgstr "" -#: src/rougail/user_datas.py:269 +#: src/rougail/user_data.py:269 msgid "loaded from {0}" msgstr "" -#: src/rougail/user_datas.py:311 -msgid "cannot set the value \"{0}\" to the family {1}, it will be ignored when loading from {2}" +#: src/rougail/user_data.py:311 +msgid "is a family so we cannot set the value \"{0}\", it has been loading from {1}" msgstr "" -#: src/rougail/user_datas.py:322 src/rougail/user_datas.py:339 -msgid "{0} loaded from {1}" +#: 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_datas.py:327 +#: 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_datas.py:333 +#: 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_datas.py:369 +#: src/rougail/user_data.py:354 +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}" +msgstr "" + +#: src/rougail/user_data.py:389 msgid "variable {0} at index \"{1}\" is {2}, it will be ignored when loading from {3}" msgstr "" -#: src/rougail/user_datas.py:380 -msgid "family {0} is {1}, {2} at index \"{3}\" will be ignored when loading from {4}" +#: src/rougail/user_data.py:402 +msgid "family {0} is {1}, {2} at index \"{3}\", it has been loading from {4}" msgstr "" -#: src/rougail/user_datas.py:393 -msgid "variable {0} is {1}, it will be ignored when loading from {2}" +#: src/rougail/user_data.py:406 +msgid "family {0} is {1}, {2} at index \"{3}\", it will be ignored when loading from {4}" msgstr "" -#: src/rougail/user_datas.py:401 -msgid "family {0} is {1}, {2} will be ignored when loading from {3}" +#: src/rougail/user_data.py:421 +msgid "variable is {0}, it has been loading from {1}" msgstr "" -#: src/rougail/user_datas.py:421 +#: 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 msgid "the value \"{0}\" is an invalid {1} for {2} at index \"{3}\", {4}, it will be ignored when loading from {5}" msgstr "" -#: src/rougail/user_datas.py:435 -msgid "the value \"{0}\" is an invalid {1} for {2}, {3}, it will be ignored when loading from {4}" +#: 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}" 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:103 -msgid "error in jinja \"{0}\" for the variable \"{1}\": {2}" -msgstr "" - -#: src/rougail/utils.py:212 -msgid "mandatory" +#: src/rougail/utils.py:104 +msgid "error for the variable \"{1}\" in jinja \"{0}\": {2}" msgstr "" #: src/rougail/utils.py:213 -msgid "hidden" +msgid "mandatory" msgstr "" #: src/rougail/utils.py:214 -msgid "disabled" +msgid "hidden" msgstr "" #: src/rougail/utils.py:215 -msgid "unique" +msgid "disabled" msgstr "" #: src/rougail/utils.py:216 +msgid "unique" +msgstr "" + +#: src/rougail/utils.py:217 msgid "auto modified" msgstr "" diff --git a/src/rougail/config/__init__.py b/src/rougail/config/__init__.py index d388cc635..62458d5ab 100644 --- a/src/rougail/config/__init__.py +++ b/src/rougail/config/__init__.py @@ -76,31 +76,33 @@ class _RougailConfig: self.add_extra_options = add_extra_options self.root = None - def copy(self): - rougailconfig = _RougailConfig( - self.backward_compatibility, - self.add_extra_options, + 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() ) - 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) + 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) return rougailconfig def generate_config(self): - root, extra_vars = _rougail_config( + self.root, extra_vars = _rougail_config( self.backward_compatibility, self.add_extra_options ) - self.root = root self.config = Config( self.root, ) @@ -123,8 +125,6 @@ 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,8 +139,6 @@ 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() @@ -153,14 +151,10 @@ 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__( @@ -261,19 +255,21 @@ class FakeRougailConvert(RougailConvert): self.internal_functions = [] self.force_optional = False self.structurals = ["commandline"] - self.user_datas = [] + self.user_data = [] 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 _rougail_config( - backward_compatibility: bool = True, - add_extra_options: bool = True, -) -> "OptionDescription": +def get_common_rougail_config( + *, + backward_compatibility=True, +) -> str: rougail_options = f"""default_structural_format_version: - description: {_('Structure format version by default, if not specified in structure file')} + description: {_('Default version of the structural file format')} + help: {_('This value is only used if the version is not set in the structural file')} alternative_name: v choices: - '1.0' @@ -282,6 +278,7 @@ def _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: @@ -311,17 +308,20 @@ 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,17 +335,20 @@ 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: @@ -353,18 +356,21 @@ base_option_name: default: baseoption commandline: false -not_export_with_import: +export_with_import: description: {_("In cache file, do not importation of Tiramisu and other dependencies")} - default: false + default: true commandline: false tiramisu_cache: - description: {_("Tiramisu cache filename")} + 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")}" 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")} @@ -393,11 +399,11 @@ load_unexist_redefine: commandline: false default: False -secret_manager: +secret_manager: # {_("The secret manager")} pattern: - description: {_("The secret pattern to build item name in Bitwarden")} - help: {_("The pattern is in Jinja format")} + description: {_("The secret pattern to constructing the name of the item searched for in the secret manager")} + help: {_("The pattern is in Jinja2 format")} default: "{{{{ project }}}} - {{{{ environment }}}} - {{{{ service }}}} - {{{{ user }}}}" """ @@ -406,6 +412,10 @@ 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) @@ -421,20 +431,18 @@ secret_manager: if processes[process]: objects = processes[process] process_name = normalize_family(process) - tr_process_name = _(process_name) + tr_process_name = processes_tr[process] 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" @@ -444,24 +452,6 @@ 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""" @@ -479,7 +469,8 @@ 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 %}""".replace( + {% endif %} + description: _('cannot load user data for NAME output')""".replace( "NAME", hidden_output ) elif objects: @@ -505,6 +496,7 @@ secret_manager: PROP=prop, ) rougail_process += f""" + define_default_params: false # {_('Override default parameters for option type')} default_params: @@ -514,20 +506,35 @@ default_params: when: false """ - for typ, params in get_convert_option_types(): + for typ, typ_description, params in get_convert_option_types(): rougail_process += f""" - {typ}: + {typ}: # {typ_description} """ - for key, key_type, multi, value in params: + for key, key_type, description, multi, value, choices in params: rougail_process += f""" {key}: - type: {key_type} +""" + if description: + rougail_process += f""" description: "{description}" +""" + rougail_process += f""" type: {key_type} multi: {multi} mandatory: false default: {value} """ - # print(rougail_process) + if choices: + rougail_process += " choices:\n" + for choice in choices: + rougail_process += f" - {choice}\n" 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 diff --git a/src/rougail/convert/object_model.py b/src/rougail/convert/object_model.py index f24a972c6..88488f2c5 100644 --- a/src/rougail/convert/object_model.py +++ b/src/rougail/convert/object_model.py @@ -43,6 +43,7 @@ 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: @@ -58,16 +59,25 @@ def get_convert_option_types(): for key, value in extra.items(): if key.startswith("_"): continue - multi = False - if isinstance(value, bool): + 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): key_type = "boolean" elif isinstance(value, str): key_type = "string" elif isinstance(value, list): key_type = "string" multi = True - params.append((key, key_type, multi, value)) - yield typ, params + params.append((key, key_type, description, multi, value, choices)) + yield typ, typ_description, params class Param(BaseModel): @@ -101,6 +111,7 @@ class VariableParam(Param): variable: str propertyerror: bool = True whole: bool = False + dynamic: bool = True optional: bool = False def to_param( @@ -311,7 +322,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, @@ -460,9 +471,12 @@ 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", - "string", + return_type, True, objectspace, ) @@ -833,7 +847,10 @@ class VariablePropertyCalculation(_VariableCalculation): when = [] else: if variable.type != "boolean": - raise Exception("only 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) when = True inverse = False params["when"] = when @@ -1076,6 +1093,7 @@ 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] diff --git a/src/rougail/convert/tiramisureflector.py b/src/rougail/convert/tiramisureflector.py index d95b90b0a..0fe6e6935 100644 --- a/src/rougail/convert/tiramisureflector.py +++ b/src/rougail/convert/tiramisureflector.py @@ -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,11 +338,18 @@ class Common: """build variable parameters""" variable = param["variable"] whole = param.get("whole", False) + dynamic = param.get("dynamic", True) if variable.path == self.elt.path: - return f"ParamSelfOption(whole={whole})" + ret = f"ParamSelfOption(whole={whole}" + if not dynamic: + ret += ", dynamic=False" + return ret + ')' if whole: - msg = f'variable param "{variable.path}" has whole attribute but it\'s not allowed for external variable' - raise DictConsistencyError(msg, 34, self.elt.xmlfiles) + 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) option_name = self.tiramisu.reflector_objects[variable.path].get( self.calls, self.elt.path ) diff --git a/src/rougail/locale/fr/LC_MESSAGES/rougail.mo b/src/rougail/locale/fr/LC_MESSAGES/rougail.mo index 403a3f487..bd475d13c 100644 Binary files a/src/rougail/locale/fr/LC_MESSAGES/rougail.mo and b/src/rougail/locale/fr/LC_MESSAGES/rougail.mo differ diff --git a/src/rougail/structural_commandline/annotator.py b/src/rougail/structural_commandline/annotator.py index 543f6e011..0e35035b6 100644 --- a/src/rougail/structural_commandline/annotator.py +++ b/src/rougail/structural_commandline/annotator.py @@ -59,6 +59,7 @@ 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 diff --git a/src/rougail/structural_commandline/config.py b/src/rougail/structural_commandline/config.py index 99aa6506b..263ba7b3c 100644 --- a/src/rougail/structural_commandline/config.py +++ b/src/rougail/structural_commandline/config.py @@ -33,7 +33,7 @@ structural_commandline: default: true """ return { - "name": "cmdline", + "name": "commandline", "process": "structural", "options": options, "level": 20, diff --git a/src/rougail/structural_directory/__init__.py b/src/rougail/structural_directory/__init__.py index a7c62b156..61f858225 100644 --- a/src/rougail/structural_directory/__init__.py +++ b/src/rougail/structural_directory/__init__.py @@ -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, diff --git a/src/rougail/structural_directory/config.py b/src/rougail/structural_directory/config.py index 6398f9c51..d7f3a53b7 100644 --- a/src/rougail/structural_directory/config.py +++ b/src/rougail/structural_directory/config.py @@ -28,6 +28,17 @@ 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 @@ -54,32 +65,21 @@ 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 or not _.main_namespace }}}} + {{{{ 'directory' not in _.step.structural and 'string' not in _.step.structural }}}} return_type: boolean - description: directory is not in _.step.structural or main_namespace is not set + description: {_('directory or string 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 or not _.main_namespace }}}} + {{{{ ('directory' not in _.step.structural and 'string' 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,6 +99,11 @@ 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", diff --git a/src/rougail/tiramisu.py b/src/rougail/tiramisu.py index db43ad524..25a6cf8f7 100644 --- a/src/rougail/tiramisu.py +++ b/src/rougail/tiramisu.py @@ -82,54 +82,127 @@ 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, example=42), - "integer": dict(opttype="IntOption", func=int, example=42), + "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, + ), "float": dict(opttype="FloatOption", func=float, example=1.42), "boolean": dict(opttype="BoolOption", func=convert_boolean), - "secret": dict(opttype="PasswordOption", example="secrets"), + "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"), "mail": dict(opttype="EmailOption", example="user@example.net"), - "unix_filename": dict(opttype="FilenameOption", example="/tmp/myfile.txt"), + "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"), "date": dict(opttype="DateOption", example="2000-01-01"), - "unix_user": dict(opttype="UsernameOption", example="username"), + "unix_user": dict(opttype="UsernameOption", example="username", + msg="UNIX user" + ), "ip": dict( - opttype="IPOption", initkwargs={"allow_reserved": True}, example="1.1.1.1" + opttype="IPOption", initkwargs={"allow_reserved": True}, + msg="IP", + params=_ip_params, + example="1.1.1.1" ), - "cidr": dict(opttype="IPOption", initkwargs={"cidr": True}, example="1.1.1.0/24"), + "cidr": dict(opttype="IPOption", msg="CIDR", initkwargs={"cidr": True}, + params=_ip_params, + example="1.1.1.0/24"), "netmask": dict(opttype="NetmaskOption", example="255.255.255.0"), - "network": dict(opttype="NetworkOption", example="1.1.1.0"), + "network": dict(opttype="NetworkOption", + params=_network_params, + example="1.1.1.0"), "network_cidr": dict( - opttype="NetworkOption", initkwargs={"cidr": True}, example="1.1.1.0/24" + opttype="NetworkOption", initkwargs={"cidr": True}, example="1.1.1.0/24", + params=_network_params, + msg="network CIDR", ), "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}, example="111", func=str, + opttype="PortOption", initkwargs={"allow_private": True}, + params=_port_params, + 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", @@ -159,7 +232,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))) + raise ConfigError(_("{0} in {1}").format(err, display_xmlfiles(ymlfiles)), subconfig=subconfig) errors.raise_carry_out_calculation_error = raise_carry_out_calculation_error @@ -168,6 +241,7 @@ 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) @@ -241,20 +315,8 @@ def tiramisu_display_name( with_quote: bool = False, ) -> str: """Replace the Tiramisu display_name function to display path + 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: + def get_path(): + if description_type in ["description", "name", "name_and_description"]: path = kls.impl_getname() else: path = kls.impl_getpath() @@ -262,12 +324,40 @@ 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: - path = comment - comment = "" - if with_quote: - return f'"{path}"{comment}' - return f"{path}{comment}" + if description_type in ["name", "path"]: + description = path + elif not description: + description = get_path() + if with_quote: + description = f'"{description}"' + return description def rougail_calc_value(*args, __default_value=None, __internal_multi=False, **kwargs): @@ -307,8 +397,20 @@ def jinja_to_function( global ENV, CONVERT_OPTION kw = {} for key, value in kwargs.items(): - if isinstance(value, PropertiesOptionError): - value = JinjaError(value) + 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 "." in key: c_kw = kw path, var = key.rsplit(".", 1) @@ -331,17 +433,14 @@ 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)) - raise ConfigError( - _( - 'cannot calculating "{0}" attribute for variable "{1}" in {2} with parameters "{3}": {4}' - ).format( + prefix = _('cannot calculate the variable "{0}"').format(__internal_variable) + msg = _('the attribute "{0}" in {1} with the parameters "{2}" causes the error: {3}').format( __internal_attribute, - __internal_variable, display_xmlfiles(__internal_files), kw_str, err, ) - ) from err + raise ConfigError(msg, prefix=prefix) from err convert = CONVERT_OPTION[__internal_type].get("func", str) if __internal_multi: values = [ @@ -353,9 +452,15 @@ def jinja_to_function( try: values = convert(values) except Exception as err: - raise ConfigError( - f'cannot converting "{__internal_attribute}" attribute for variable "{__internal_variable}" in {display_xmlfiles(__internal_files)}: {err}' - ) from 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 values = values if values != "" and values != "None" else None if values is None and __default_value is not None: return __default_value