rougail/doc/fill
2023-11-16 21:50:37 +01:00
..
README.md feat: new format 1.0 2023-11-16 21:50:37 +01:00

Table of Contents

Les valeurs par défault calculées

Synopsis

Une valeur peut être calculée. Dans ce cas on a quatre possibilités :

  • calcul via Jinja
  • calcul via une variable
  • calcul via une information
  • calcul via un suffix : dans le cas d'une variable dans une famille dynamique
  • calcul via un index : dans le cas d'une variable suiveuse

Si l'utilisateur modifie la valeur de la variable, la valeur par défaut n'est plus utilisé, donc le calcul n'est plus réalisé. C'est le cas également si la variable à l'attribut auto_save.

Par contre si la variable est caché (avec le paramètre hidden) c'est la valeur par défaut qui est utilisé et non la valeur personnalisée par l'utilisateur.

⚠️ Une variable suiveuse ne peut pas être calculé automatiquement.

Paramètres

Suivant les types de calcul les paramètres vont être différents :

Type de calcul Paramètre Commentaires Exemple
type
string
mandatory
Type du calcul, les valeurs possible sont : jinja, variable, information, suffix ou index jinja
Jinja jinja
string
mandatory
Template Jinja. Pour une variable multiple, chaque ligne représente une valeur. {% if rougail.variable %}{{ rougail.variable }}{% endif %}
Jinja params
list
Paramètres complémentaire passé au template Jinja
Variable (mandatory)
Information
variable
string
Nom de la variable associée rougail.variable
Variable propertyerror
boolean
Si l'accès à la variable n'est pas possible à cause d'une propriété (par exemple disabled) par défaut une erreur est retournée. Si l'attribut est à False, la valeur calculée est vide.
Valeur par défaut : True
False
Information information
string
mandatory
Nom de l'information dont on veut récupérer la valeur. doc

Dans le cas d'un calcul de type Jinja, il est possible d'avoir des paramètres.

Il existe deux types de paramètre :

  • les paramètres standards (string, boolean, integer, null), dans ce il suffit de faire : "key: value"

  • les paramètres avancés :

    • paramètre via une variable
    • paramètre via une information
    • paramètre via un suffix : dans le cas d'une variable dans une famille dynamique
    • paramètre via un index : dans le cas d'une variable suiveuse
Type du paramètre Paramètre Commentaires Exemple
name
string
mandatory
Le nom du paramètre my_param
type
string
mandatory
Type du paramètre, les valeurs possible sont : variable, information, suffix ou index suffix
Variable variable
string
mandatory
Nom de la variable rougail.variable
Variable (mandatory)
Information
propertyerror
boolean
Si l'accès à la variable n'est pas possible à cause d'une propriété (par exemple disabled) par défaut une erreur est retournée. Si l'attribut est à False, le paramètre n'est pas passé au template Jinja.
Valeur par défaut : True
False
Variable optional
boolean
La variable peut ne pas exister suivant les importations de fichier YAML. Si le paramètre optional est à True, le paramètre sera tout simplement supprimer si la variable n'existe pas.
Valeur par défaut : False
True
Information information
string
mandatory
Nom de l'information dont on veut récupérer la valeur. doc

Exemples

Calcul via un template Jinja

Commençons par exemple à partir d'un simple template Jinja :

---
version: '1.0'
my_calculated_variable:
  default:
    type: jinja
    jinja: 'no'

Voici un deuxième exemple avec une variable de type booléen :

---
version: '1.0'
my_calculated_variable:
  type: boolean
  default:
    type: jinja
    jinja: 'false'

Et une valeur multiple de type nombre :

---
version: '1.0'
my_calculated_variable:
  type: number
  multi: true
  default:
    type: jinja
    jinja: |
      1
      2
      3      

Créons une variable dont la valeur est retournée par une fonction Python :

---
version: '1.0'
my_calculated_variable:
  default:
    type: jinja
    jinja: '{{ return_no() }}'

Puis créons la fonction "return_no" :

def return_no():
    return 'no'

Un exemple avec des paramètres :

---
version: '1.0'
my_calculated_variable:
  description: my description
  default:
    type: jinja
    jinja: |
      {{ param1 }}{% if param2 is defined %}_{{ param2 }}{% endif %}_{{ param3 }}      
    params:
      param1: value
      param2:
        type: variable
        variable: rougail.unknown_variable
        optional: true
      param3:
        type: information
        information: doc
        variable: rougail.my_calculated_variable

Un exemple avec un paramètre de type suffix :

---
version: '1.0'
varname:
  multi: true
  default:
    - val1
    - val2
my_dyn_family_:
  type: dynamic
  variable: rougail.varname
  description: 'Describe '
  my_dyn_var_:
    type: string
    default:
      type: jinja
      jinja: 'the suffix is: {{ param1 }}'
      params:
        param1:
          type: suffix

Un exemple avec un paramètre de type index :

---
version: '1.0'
family:
  type: leadership
  leader:
    multi: true
    default:
      - val1
      - val2
  follower1:
    default:
      type: jinja
      jinja: 'the index is: {{ param1 }}'
      params:
        param1:
          type: index

Calcul via une variable

Copier une variable dans une autre :

---
version: '1.0'
my_variable:
  multi: true
  default:
    - val1
    - val2
my_calculated_variable:
  multi: true
  default:
    type: variable
    variable: rougail.my_variable

Copier une variable dans une autre si la source n'a pas de problème de propriété :

---
version: '1.0'
my_variable:
  default: val1
  disabled: true
my_calculated_variable:
  multi: true
  default:
    type: variable
    variable: rougail.my_variable
    propertyerror: false

Copier deux variables non multiple dans une variable multiple :

---
version: '1.0'
my_variable_1:
  default: val1
my_variable_2:
  default: val2
my_calculated_variable:
  multi: true
  default:
    - type: variable
      variable: rougail.my_variable_1
    - type: variable
      variable: rougail.my_variable_2

Une variable dans une famille dynamique peut également être utilisé dans un calcul.

Par exemple en utilisant la variable pour un suffixe particulier :

---
version: '1.0'
varname:
  multi: true
  default:
    - val1
    - val2
my_dyn_family_:
  type: dynamic
  variable: rougail.varname
  description: 'Describe '
  my_dyn_var_:
    type: string
    default:
      type: suffix
all_dyn_var:
  default:
    type: variable
    variable: rougail.my_dyn_family_val1.my_dyn_var_val1

Dans ce cas, on récupère la valeur val1.

Deuxième exemple en utilisant la variable pour tous les suffixes :

---
version: '1.0' 
varname:
  multi: true
  default:
    - val1
    - val2
my_dyn_family_:
  type: dynamic
  variable: rougail.varname
  description: 'Describe '
  my_dyn_var_:
    type: string
    default:
      type: suffix
all_dyn_var:
  multi: true
  default:
    type: variable
    variable: rougail.my_dyn_family_.my_dyn_var_

Dans ce cas, on récupère la liste val1 et val2.

Calcul via un suffix

---
version: '1.0'
varname:
  multi: true
  default:
    - val1
    - val2
my_dyn_family_:
  type: dynamic
  variable: rougail.varname
  description: 'Describe '
  my_dyn_var_:
    type: string
    default:
      type: suffix

Calcul via un index

---
version: '1.0'
family:
  type: leadership
  leader:
    multi: true
    default:
      - val1
      - val2
  follower1:
    type: number
    default:
      type: index

Rédéfinition

Dans un premier dictionnaire déclarons notre variable et notre calcule :

---
version: '1.0'
my_calculated_variable:
  default:
    type: jinja
    jinja: 'the value is calculated'

Dans un second dictionnaire il est possible de redéfinir le calcul :

---
version: '1.0'
my_calculated_variable:
  redefine: true
  default:
    type: jinja
    jinja: 'the value is redefined'

Dans un troisième on peut même supprimer le calcul :

---
version: '1.0'
my_calculated_variable:
  redefine: true
  default: null