Salome HOME
gitignore V1
[tools/eficas.git] / Validation / V_A_CLASSER.py
1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2012   EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 from Noyau.strfunc import convert, ufmt
21
22 class A_CLASSER:
23    """
24       La règle A_CLASSER vérifie que ...
25
26    """
27    def __init__(self,*args):
28       if len(args) > 2 :
29         print convert(ufmt(_(u"Erreur à la création de la règle A_CLASSER(%s)"),
30                            args))
31         return
32       self.args=args
33       if type(args[0]) == tuple:
34         self.args0 = args[0]
35       elif type(args[0]) == str:
36         self.args0 = (args[0],)
37       else :
38         print convert(ufmt(_(u"Le premier argument de : %s doit etre un "
39                              u"tuple ou une chaine"), args))
40       if type(args[1]) == tuple:
41         self.args1 = args[1]
42       elif type(args[1]) == str:
43         self.args1 = (args[1],)
44       else :
45         print convert(ufmt(_(u"Le deuxième argument de :%s doit etre un "
46                              u"tuple ou une chaine"), args))
47       # création de la liste des mcs
48       liste = []
49       liste.extend(self.args0)
50       liste.extend(self.args1)
51       self.mcs = liste
52       self.init_couples_permis()
53
54    def init_couples_permis(self):
55       """ Crée la liste des couples permis parmi les self.args, càd pour chaque élément
56           de self.args0 crée tous les couples possibles avec un élément de self.args1"""
57       liste = []
58       for arg0 in self.args0:
59         for arg1 in self.args1:
60           liste.append((arg0,arg1))
61       self.liste_couples = liste
62
63    def verif(self,args):
64       """
65           args peut etre un dictionnaire ou une liste. Les éléments de args
66           sont soit les éléments de la liste soit les clés du dictionnaire.
67       """
68       # création de la liste des couples présents dans le fichier de commandes
69       l_couples = []
70       couple = []
71       text = u''
72       test = 1
73       for nom in args:
74         if nom in self.mcs :
75           couple.append(nom)
76           if len(couple) == 2 :
77             l_couples.append(tuple(couple))
78             couple = [nom,]
79       if len(couple) > 0 :
80         l_couples.append(tuple(couple))
81       # l_couples peut etre vide si l'on n'a pas réussi à trouver au moins un
82       # élément de self.mcs
83       if len(l_couples) == 0 :
84         message = ufmt(_(u"- Il faut qu'au moins un objet de la liste : %r"
85                          u" soit suivi d'au moins un objet de la liste : %r"),
86                        self.args0, self.args1)
87         return message,0
88       # A ce stade, on a trouvé des couples : il faut vérifier qu'ils sont
89       # tous licites
90       num = 0
91       for couple in l_couples :
92         num = num+1
93         if len(couple) == 1 :
94           # on a un 'faux' couple
95           if couple[0] not in self.args1:
96             text = text + ufmt(_(u"- L'objet : %s doit être suivi d'un objet de la liste : %r\n"),
97                                couple[0], self.args1)
98             test = 0
99           else :
100             if num > 1 :
101               # ce n'est pas le seul couple --> licite
102               break
103             else :
104               text = text + ufmt(_(u"- L'objet : %s doit être précédé d'un objet de la liste : %r\n"),
105                                  couple[0], self.args0)
106               test = 0
107         elif couple not in self.liste_couples :
108           text = text + ufmt(_(u"- L'objet : %s ne peut être suivi de : %s\n"),
109                              couple[0], couple[1])
110           test = 0
111       return text,test
112
113
114