This commit is contained in:
Emmanuel Garette 2021-02-19 17:06:49 +01:00
parent 04f8fc048c
commit 99d9fb7e70
4 changed files with 23 additions and 19 deletions

View file

@ -44,7 +44,7 @@ En plus de la description, il est possible de préciser une aide complémentaire
## Mode de la famille ## Mode de la famille
Le [mode](../mode.md) par défaut d'une famille correspond au [mode](../mode.md) le plus petite des variables ou des familles qui sont contenu dans cette famille. Le [mode](../mode.md) par défaut d'une famille correspond au [mode](../mode.md) du mode le plus petit entre la famille parente, les variables enfants ou des familles enfants qui sont contenu dans cette famille.
Changer le [mode](../mode.md) d'une famille permet de définir le [mode](../mode.md) par défaut des variables ou des familles inclusent dans cette famille. Changer le [mode](../mode.md) d'une famille permet de définir le [mode](../mode.md) par défaut des variables ou des familles inclusent dans cette famille.

View file

@ -8,6 +8,8 @@ Une variable meneuse est une [variable](simple.md) qui est obligatoirement de ty
Une variable meneuse peut être obligatoire. Une variable meneuse peut être obligatoire.
Le [mode](../mode.md) par défaut correspond au plus petit mode définit par l'utilisateur des variables suiveuses.
## Variable suiveuse ## Variable suiveuse
Une variable suiveuse est une variable donc la longueur n'est pas déterminé par elle-même, mais est identique à celle de la variable meneuse dont elle dépend. Une variable suiveuse est une variable donc la longueur n'est pas déterminé par elle-même, mais est identique à celle de la variable meneuse dont elle dépend.

View file

@ -74,18 +74,6 @@ Pour définir une variable à valeur multiple :
<variable name="my_variable" multi="True"/> <variable name="my_variable" multi="True"/>
``` ```
## Mode de la variable
Le [mode](../mode.md) par défaut d'une variable correspond au [mode](../mode.md) de la [famille](../family/README.md).
Si la variable n'est pas dans une famille, la variable aura le mode "normal" par défaut.
Pour définir le [mode](../mode.md) :
```
<variable name="my_variable" mode="expert"/>
```
## Variable invisible ## Variable invisible
Il est possible de cacher une variable. Il est possible de cacher une variable.
@ -236,3 +224,19 @@ Il est possible de préciser plusieurs valeurs avec le séparateur "|" :
``` ```
<variable name="my_variable" test="yes|no"/> <variable name="my_variable" test="yes|no"/>
``` ```
## Mode de la variable
Le [mode](../mode.md) par défaut d'une variable correspond au [mode](../mode.md) de la [famille](../family/README.md).
Cas particuliers :
- une variable à valeur automatiquement modifiée ou une variable en lecture seule automatique est par défaut en mode "basic".
- si la variable n'est pas dans une famille, la variable aura le mode "normal" par défaut.
- une variable obligatoire sans valeur par défaut (calculer ou non) aura le mode "basic".
Pour définir le [mode](../mode.md) :
```
<variable name="my_variable" mode="expert"/>
```

View file

@ -145,7 +145,8 @@ class FamilyAnnotator(Walk):
(variable.auto_save is True or variable.auto_freeze is True): (variable.auto_save is True or variable.auto_freeze is True):
self._set_auto_mode(variable, modes_level[0]) self._set_auto_mode(variable, modes_level[0])
# mandatory variable without value is a basic variable # mandatory variable without value is a basic variable
elif variable.mandatory is True and \ elif not self._has_mode(variable) and \
variable.mandatory is True and \
not hasattr(variable, 'default') and \ not hasattr(variable, 'default') and \
not hasattr(variable, 'default_multi'): not hasattr(variable, 'default_multi'):
self._set_auto_mode(variable, modes_level[0]) self._set_auto_mode(variable, modes_level[0])
@ -170,11 +171,12 @@ class FamilyAnnotator(Walk):
msg = f'leader/followers "{follower.name}" could not be auto_freeze' msg = f'leader/followers "{follower.name}" could not be auto_freeze'
raise DictConsistencyError(_(msg), 30, leadership.xmlfiles) raise DictConsistencyError(_(msg), 30, leadership.xmlfiles)
if leader_mode is not None: if leader_mode is not None:
# leader's mode is minimum level
if modes[leader_mode] > modes[follower.mode]: if modes[leader_mode] > modes[follower.mode]:
if self._has_mode(follower) and not self._has_mode(leadership.variable[0]): if self._has_mode(follower) and not self._has_mode(leadership.variable[0]):
# if follower has mode but not the leader
self._set_auto_mode(leadership.variable[0], follower.mode) self._set_auto_mode(leadership.variable[0], follower.mode)
else: else:
# leader's mode is minimum level
if self._has_mode(follower): if self._has_mode(follower):
msg = _(f'the follower "{follower.name}" is in "{follower.mode}" mode ' msg = _(f'the follower "{follower.name}" is in "{follower.mode}" mode '
f'but leader have the higher mode "{leader_mode}"') f'but leader have the higher mode "{leader_mode}"')
@ -219,7 +221,6 @@ class FamilyAnnotator(Walk):
def _change_variable_mode(self, def _change_variable_mode(self,
variable, variable,
family_mode: str, family_mode: str,
is_follower=False,
) -> None: ) -> None:
# none basic variable in high level family has to be in high level # none basic variable in high level family has to be in high level
if modes[variable.mode] < modes[family_mode]: if modes[variable.mode] < modes[family_mode]:
@ -233,13 +234,10 @@ class FamilyAnnotator(Walk):
leadership, leadership,
family_mode: str, family_mode: str,
) -> None: ) -> None:
is_follower = False
for follower in leadership.variable: for follower in leadership.variable:
self._change_variable_mode(follower, self._change_variable_mode(follower,
family_mode, family_mode,
is_follower,
) )
is_follower = True
leadership.variable[0].mode = None leadership.variable[0].mode = None
def dynamic_families(self): def dynamic_families(self):