]> SALOME platform Git repositories - tools/eficas.git/blob - Validation/V_A_CLASSER.py
Salome HOME
merge Nizhny
[tools/eficas.git] / Validation / V_A_CLASSER.py
1 # coding=utf-8
2 # person_in_charge: mathieu.courtois at edf.fr
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2015  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
18 #
19 #
20 # ======================================================================
21
22 from Noyau.strfunc import convert, ufmt
23
24
25 class A_CLASSER:
26
27     """
28        La règle A_CLASSER vérifie que ...
29
30     """
31
32     def __init__(self, *args):
33         if len(args) > 2:
34             print convert(
35                 ufmt(_(u"Erreur à la création de la règle A_CLASSER(%s)"),
36                      args))
37             return
38         self.args = args
39         if type(args[0]) == tuple:
40             self.args0 = args[0]
41         elif type(args[0]) == str:
42             self.args0 = (args[0],)
43         else:
44             print convert(ufmt(_(u"Le premier argument de : %s doit etre un "
45                                  u"tuple ou une chaine"), args))
46         if type(args[1]) == tuple:
47             self.args1 = args[1]
48         elif type(args[1]) == str:
49             self.args1 = (args[1],)
50         else:
51             print convert(ufmt(_(u"Le deuxième argument de :%s doit etre un "
52                                  u"tuple ou une chaine"), args))
53         # création de la liste des mcs
54         liste = []
55         liste.extend(self.args0)
56         liste.extend(self.args1)
57         self.mcs = liste
58         self.init_couples_permis()
59
60     def init_couples_permis(self):
61         """ Crée la liste des couples permis parmi les self.args, càd pour chaque élément
62             de self.args0 crée tous les couples possibles avec un élément de self.args1"""
63         liste = []
64         for arg0 in self.args0:
65             for arg1 in self.args1:
66                 liste.append((arg0, arg1))
67         self.liste_couples = liste
68
69     def verif(self, args):
70         """
71             args peut etre un dictionnaire ou une liste. Les éléments de args
72             sont soit les éléments de la liste soit les clés du dictionnaire.
73         """
74         # création de la liste des couples présents dans le fichier de
75         # commandes
76         l_couples = []
77         couple = []
78         text = u''
79         test = 1
80         for nom in args:
81             if nom in self.mcs:
82                 couple.append(nom)
83                 if len(couple) == 2:
84                     l_couples.append(tuple(couple))
85                     couple = [nom, ]
86         if len(couple) > 0:
87             l_couples.append(tuple(couple))
88         # l_couples peut etre vide si l'on n'a pas réussi à trouver au moins un
89         # élément de self.mcs
90         if len(l_couples) == 0:
91             message = ufmt(_(u"- Il faut qu'au moins un objet de la liste : %r"
92                              u" soit suivi d'au moins un objet de la liste : %r"),
93                            self.args0, self.args1)
94             return message, 0
95         # A ce stade, on a trouvé des couples : il faut vérifier qu'ils sont
96         # tous licites
97         num = 0
98         for couple in l_couples:
99             num = num + 1
100             if len(couple) == 1:
101                 # on a un 'faux' couple
102                 if couple[0] not in self.args1:
103                     text = text + ufmt(
104                         _(u"- L'objet : %s doit être suivi d'un objet de la liste : %r\n"),
105                         couple[0], self.args1)
106                     test = 0
107                 else:
108                     if num > 1:
109                         # ce n'est pas le seul couple --> licite
110                         break
111                     else:
112                         text = text + ufmt(
113                             _(u"- L'objet : %s doit être précédé d'un objet de la liste : %r\n"),
114                             couple[0], self.args0)
115                         test = 0
116             elif couple not in self.liste_couples:
117                 text = text + ufmt(
118                     _(u"- L'objet : %s ne peut être suivi de : %s\n"),
119                     couple[0], couple[1])
120                 test = 0
121         return text, test