Salome HOME
bug
[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 - 2017  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
23
24 from __future__ import print_function
25 from __future__ import absolute_import
26 try :
27   from builtins import str
28   from builtins import object
29 except : 
30   pass
31
32 class A_CLASSER(object):
33
34     """
35        La regle A_CLASSER verifie que ...
36
37     """
38
39     def __init__(self, *args):
40         if len(args) > 2:
41             print ("Erreur a la creation de la regle A_CLASSER(%s)" % str(args))
42             return
43         self.args = args
44         if type(args[0]) == tuple: self.args0 = args[0]
45         elif type(args[0]) == str: self.args0 = (args[0],)
46         else:
47             print ( "Le premier argument de : %s doit etre un tuple ou une chaine" % str(args))
48         if type(args[1]) == tuple:
49             self.args1 = args[1]
50         elif type(args[1]) == str:
51             self.args1 = (args[1],)
52         else:
53             print ("Le deuxieme argument de : %s doit etre un tuple ou une chaine" % str(args))
54         # creation de la liste des mcs
55         liste = []
56         liste.extend(self.args0)
57         liste.extend(self.args1)
58         self.mcs = liste
59         self.initCouplesPermis()
60
61     def initCouplesPermis(self):
62         """ Cree la liste des couples permis parmi les self.args, cad pour chaque element
63             de self.args0 cree tous les couples possibles avec un element de self.args1"""
64         liste = []
65         for arg0 in self.args0:
66             for arg1 in self.args1:
67                 liste.append((arg0, arg1))
68         self.liste_couples = liste
69
70     def verif(self, args):
71         """
72             args peut etre un dictionnaire ou une liste. Les elements de args
73             sont soit les elements de la liste soit les cles du dictionnaire.
74         """
75         # creation de la liste des couples presents dans le fichier de
76         # commandes
77         l_couples = []
78         couple = []
79         text = u''
80         test = 1
81         for nom in args:
82             if nom in self.mcs:
83                 couple.append(nom)
84                 if len(couple) == 2:
85                     l_couples.append(tuple(couple))
86                     couple = [nom, ]
87         if len(couple) > 0:
88             l_couples.append(tuple(couple))
89         # l_couples peut etre vide si l'on n'a pas reussi a trouver au moins un
90         # element de self.mcs
91         if len(l_couples) == 0:
92             message = "- Il faut qu'au moins un objet de la liste : %s  soit suivi d'au moins un objet de la liste %s : " % (self.args0,self.args1)
93             return message, 0
94         # A ce stade, on a trouve des couples : il faut verifier qu'ils sont
95         # tous licites
96         num = 0
97         for couple in l_couples:
98             num = num + 1
99             if len(couple) == 1:
100                 # on a un 'faux' couple
101                 if couple[0] not in self.args1:
102                     text = text + "- L'objet : %s doit etre suivi d'un objet de la liste : %r\n" %(couple[0], self.args1)
103                     test = 0
104                 else:
105                     if num > 1:
106                         # ce n'est pas le seul couple --> licite
107                         break
108                     else:
109                         text = text + "- L'objet : %s doit etre precede d'un objet de la liste : %r\n" %(couple[0], self.args0)
110                         test = 0
111             elif couple not in self.liste_couples:
112                 text = text + "- L'objet : %s ne peut etre suivi de : %s\n" %(couple[0], couple[1])
113                 test = 0
114         return text, test