Tâche #8707
Scénario #9379: Consolidation CREOLE
eosfunc.calc_multi_condition : il n'est pas possible de mettre des match/mismatch disabled
Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
Restant à faire (heures):
0.0
Description
Si on défini une variable disable en tant que variable match ou mismatch dans condition calc_multi_condition, ce sont les valeurs par défaut qui sont utilisés.
Il n'est pas possible avec le code actuel de changer les valeurs par défaut.
Je propose une nouvelle version calc_multi_condition (iso fonctionnel avec l'existant) :
def calc_multi_condition(param, match=None, mismatch=None, operator='AND',
default_match=None, default_mismatch=None,
**conditions):
"""param: réponse testée sur toutes les conditions. Si les réponses des
conditions sont différentes mettre une liste avec chacune des conditions
a tester
operator: doit être 'AND' ou 'OR'
match: valeur de retour si toutes les conditions sont validées (si
operator est à 'AND') ou si une des conditions sont validée
(si operator est à 'OR')
mismatch: valeur de retour si au moins une des conditions n'est pas
validée (si operator est à 'AND') ou toutes les conditions
ne sont pas validées (si operator est à 'OR')
si les variables match ou mismatch sont optional ou hidden, recupère le
contenu de la variable default_match ou default_mismatch
conditions: liste des conditions a tester.
exemple:
<auto name='calc_multi_condition' target='test_activer_bacula_dir'>
<param>['oui', 'non']</param>
<param type='eole' name='condition_1'>activer_bacula</param>
<param type='eole' name='condition_2'>activer_bacula_dir</param>
<param name='match'>oui</param>
<param name='mismatch'>non</param>
</auto>
"""
if operator not in ('AND', 'OR'):
raise ValueError('operator doit être "AND" ou "OR"')
if match is None:
if default_match is None:
match = 'oui'
else:
if default_match == 'None':
match = None
else:
match = default_match
if mismatch is None:
if default_mismatch is None:
mismatch = 'non'
else:
if default_mismatch == 'None':
mismatch = None
else:
mismatch = default_mismatch
conditions_keys = conditions.keys()
conditions_keys.sort()
for condition in conditions_keys:
if not condition.startswith('condition_'):
raise ValueError('Les clefs de condition doivent commencer par "condition_"')
if isinstance(param, list) and len(param) != len(conditions):
raise ValueError('Nombre de conditions et de params différent dans calc_multi_condition')
for num in range(0, len(conditions)):
key = conditions_keys[num]
value = conditions[key]
if type(param) != list:
if operator == 'AND' and value != param:
return mismatch
if operator == 'OR' and value == param:
return match
else:
if operator == 'AND' and value != param[num]:
return mismatch
if operator == 'OR' and value == param[num]:
return match
if operator == 'AND':
return match
else:
return mismatch
Demandes liées
Révisions associées
eosfunc.calc_multi_condition : avec match et mismatch disabled (fixes #8707 @1h)
Test unitaire pour calc_multi_condition avec default_mismatch
- tests/test_genconfig.py : maj de test_calc_multi_condition()
Ref: #8707 @30m
Historique
#1 Mis à jour par Luc Bourdot il y a plus de 11 ans
- Tâche parente mis à #9379
#2 Mis à jour par Benjamin Bohard il y a plus de 11 ans
- Temps estimé mis à 1.50 h
- Restant à faire (heures) mis à 1.5
#3 Mis à jour par Emmanuel GARETTE il y a plus de 11 ans
- Statut changé de Nouveau à En cours
- Début mis à 28/10/2014
#4 Mis à jour par Emmanuel GARETTE il y a plus de 11 ans
- Assigné à mis à Emmanuel GARETTE
#5 Mis à jour par Emmanuel GARETTE il y a plus de 11 ans
- Statut changé de En cours à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit 406660a763ee46dd9ccdf775d122adee07df3bd8.
#6 Mis à jour par Emmanuel GARETTE il y a plus de 11 ans
- Echéance mis à 07/11/2014
- Restant à faire (heures) changé de 1.5 à 0.0
#7 Mis à jour par Joël Cuissinat il y a plus de 11 ans
- Statut changé de Résolu à Fermé
OK validé par le test unitaire modifié.