]> SALOME platform Git repositories - tools/eficas.git/blob - Extensions/nuplet.py
Salome HOME
F.R: Plusieurs bugs corrigés pour arriver à écrire la première moitié
[tools/eficas.git] / Extensions / nuplet.py
1 """
2     Ce module contient la classe de définition pour les nuplets NUPL
3 """
4 # Modules Python
5 import types
6
7 # Modules Eficas
8 from Noyau import N_ENTITE,N_MCLIST,N_CR
9 import mcnuplet
10
11 class NUPL(N_ENTITE.ENTITE):
12    """
13    """
14    class_instance = mcnuplet.MCNUPLET
15    list_instance = N_MCLIST.MCList
16    label='NUPLET'
17    CR=N_CR.CR
18
19    def __init__(self,fr="",ang="",docu="",statut='f',defaut=None,min=0,max=1,
20                     elements=None):
21       N_ENTITE.ENTITE.__init__(self)
22       self.fr=fr
23       self.ang=ang
24       self.docu=docu
25       self.statut=statut
26       self.defaut=defaut
27       self.min=min
28       self.max=max
29       self.entites=elements
30       self.regles=()
31       # on force le statut des sous entites a obligatoire
32       for e in elements:e.statut='o'
33       self.idracine="NUPLET"
34       self.affecter_parente()
35
36    def verif_cata(self):
37       """
38           Cette methode sert à valider les attributs de l'objet de définition
39           de la classe NUPL
40       """
41       if type(self.min) != types.IntType :
42         if self.min != '**':
43           self.cr.fatal("L'attribut 'min' doit être un entier : "+`self.min`)
44       if type(self.max) != types.IntType :
45         if self.max != '**' :
46           self.cr.fatal("L'attribut 'max' doit être un entier : "+`self.max`)
47       if self.min > self.max :
48          self.cr.fatal("Nombres d'occurrence min et max invalides : %s %s" %(`self.min`,`self.max`))
49       if type(self.fr) != types.StringType :
50         self.cr.fatal("L'attribut 'fr' doit être une chaîne de caractères : %s" +`self.fr`)
51       if self.statut not in ['o','f','c','d']:
52         self.cr.fatal("L'attribut 'statut' doit valoir 'o','f','c' ou 'd' : %s" %`self.statut`)
53       if type(self.docu) != types.StringType :
54         self.cr.fatal("L'attribut 'docu' doit être une chaîne de caractères : %s" %`self.docu`)
55       self.verif_cata_regles()
56
57    def __call__(self,val,nom,parent):
58       """
59          Construit la structure de donnees pour un NUPLET a partir de sa definition (self)
60          de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent)
61       """
62       if (type(val) == types.TupleType or type(val) == types.ListType) and type(val[0]) == types.TupleType:
63         # On est en presence d une liste de nuplets
64         l=self.list_instance()
65         l.init(nom=nom,parent=parent)
66         for v in val:
67           objet=self.class_instance(nom=nom,definition=self,val=v,parent=parent)
68           l.append(objet)
69         return l
70       else:
71         # on est en presence d un seul nuplet
72         return self.class_instance(nom=nom,definition=self,val=val,parent=parent)
73
74    def report(self):
75       """ 
76            Méthode qui crée le rapport de vérification du catalogue du nuplet 
77       """
78       self.cr = self.CR()
79       self.verif_cata()
80       for v in self.entites :
81         cr = v.report()
82         cr.debut = "Début "+v.__class__.__name__+ ' : '
83         cr.fin = "Fin "+v.__class__.__name__+ ' : '
84         self.cr.add(cr)
85       return self.cr
86
87    def affecter_parente(self):
88       """
89           Cette methode a pour fonction de donner un nom et un pere aux
90           sous entités qui n'ont aucun moyen pour atteindre leur parent 
91           directement
92           Il s'agit principalement des mots cles
93       """
94       k=0
95       for v in self.entites:
96         v.pere = self
97         v.nom = str(k)
98         k=k+1
99