]> SALOME platform Git repositories - tools/eficas.git/blob - Noyau/N_MACRO.py
Salome HOME
Version Aster 6.3.14
[tools/eficas.git] / Noyau / N_MACRO.py
1 #@ MODIF N_MACRO Noyau  DATE 27/03/2002   AUTEUR DURAND C.DURAND 
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  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     Ce module contient la classe de definition MACRO
23     qui permet de spécifier les caractéristiques d'une macro-commande
24 """
25
26 import types,string,traceback
27
28 import N_ENTITE
29 import N_MACRO_ETAPE
30 import nommage
31
32 class MACRO(N_ENTITE.ENTITE):
33    """
34     Classe pour definir une macro-commande
35
36     Cette classe a trois attributs de classe 
37
38     - class_instance qui indique la classe qui devra etre utilisée 
39             pour créer l'objet qui servira à controler la conformité d'un 
40             macro-commande avec sa définition
41
42     - label qui indique la nature de l'objet de définition (ici, MACRO)
43
44     - nommage qui est un module Python qui fournit la fonctionnalité de nommage
45
46     et les attributs d'instance suivants :
47
48     - nom   : son nom
49
50     - op   : le numéro d'opérateur
51
52     - sd_prod : le type de concept produit. C'est une classe ou une fonction qui retourne
53                       une classe
54
55     - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur
56                         réentrant peut modifier un concept d'entrée et le produire comme concept de sortie
57
58     - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur
59                         non répétable ne doit apparaitre qu'une fois dans une exécution. C'est du ressort
60                         de l'objet gérant le contexte d'exécution de vérifier cette contrainte.
61
62     - fr   : commentaire associé en francais
63
64     - ang : commentaire associé en anglais
65
66     - docu : clé de documentation associée
67
68     - regles : liste des règles associées
69
70     - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette
71                       fonction est exécutée lors des phases d'initialisation de l'étape associée.
72
73     - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent etre
74                      rangés par niveau. Ils apparaissent alors exclusivement dans leur niveau de rangement.
75                      Si niveau vaut None, l'opérateur est rangé au niveau global.
76
77     - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit
78                       des entités de définition pour les mots-clés : FACT, BLOC, SIMP. Cet attribut
79                       est initialisé avec args, c'est à dire les arguments d'appel restants.
80
81
82    """
83    class_instance = N_MACRO_ETAPE.MACRO_ETAPE
84    label = 'MACRO'
85    nommage = nommage
86
87    def __init__(self,nom,op,sd_prod=None,reentrant='n',repetable='o',fr="",ang="",
88                 docu="",regles=(),op_init=None,niveau = None,fichier_ini=0,**args):
89       """
90          Méthode d'initialisation de l'objet MACRO. Les arguments sont utilisés pour initialiser
91          les attributs de meme nom
92       """
93       # XXX fichier_ini n'est pas utilisé pour l'instant
94       self.nom=nom
95       # op est obligatoire et permet de spécifier la procédure de construction de la macro
96       # - Si op est un entier la construction de la macro est réalisée par une subroutine fortran opsxxx ou
97       # xxx est donné par la valeur absolue de op. L'execution est egalement effectuée via cette subroutine.
98       # - Si op est une fonction Python, la construction de la macro est effectuée par l'appel à cette fonction
99       # Suivant le cas on garde l info dans self.op ou dans self.proc
100       if type(op) == types.IntType:
101         self.proc=None
102         self.op=op
103       else:
104         self.op=None
105         self.proc=op
106
107       self.sd_prod=sd_prod
108       self.reentrant=reentrant
109       self.fr=fr
110       self.ang=ang
111       self.repetable = repetable
112       self.docu=docu
113       if type(regles)== types.TupleType:
114           self.regles=regles
115       else:
116           self.regles=(regles,)
117       self.fichier_ini = fichier_ini
118       # Attribut op_init : Fonction a appeler a la construction de l operateur sauf si == None
119       self.op_init=op_init
120       self.entites=args
121       current_cata=CONTEXT.get_current_cata()
122       if niveau == None:
123          self.niveau=None
124          current_cata.enregistre(self)
125       else:
126          self.niveau=current_cata.get_niveau(niveau)
127          self.niveau.enregistre(self)
128       self.affecter_parente()
129
130    def __call__(self,reuse=None,**args):
131       """
132           Construit l'objet MACRO_ETAPE a partir de sa definition (self),
133           puis demande la construction de ses sous-objets et du concept produit.
134       """
135       nomsd=self.nommage.GetNomConceptResultat(self.nom)
136       etape= self.class_instance(oper=self,reuse=reuse,args=args)
137       etape.McBuild()
138       return etape.Build_sd(nomsd)
139
140    def make_objet(self,mc_list='oui'):
141       """
142            Cette méthode crée l'objet MACRO_ETAPE dont la définition est self sans
143            créer sa sdprod.
144            Normalement l'étape est enregistrée auprès de son parent.
145            Si l'argument mc_list vaut 'oui', elle déclenche en plus la construction
146            des objets MCxxx.
147       """
148       etape= self.class_instance(oper=self,reuse=None,args={})
149       if mc_list == 'oui':etape.McBuild()
150       return etape
151
152    def verif_cata(self):
153       """
154           Méthode de vérification des attributs de définition
155       """
156       if self.op is not None and (type(self.op) != types.IntType or self.op > 0) :
157         self.cr.fatal("L'attribut 'op' doit etre un entier signé : %s" %`self.op`)
158       if self.proc is not None and type(self.proc) != types.FunctionType:
159         self.cr.fatal("L'attribut op doit etre une fonction Python : %s" % `self.proc`)
160       if type(self.regles) != types.TupleType :
161         self.cr.fatal("L'attribut 'regles' doit etre un tuple : %s" %`self.regles`)
162       if type(self.fr) != types.StringType :
163         self.cr.fatal("L'attribut 'fr' doit etre une chaine de caractères : %s" %`self.fr`)
164       if type(self.docu) != types.StringType :
165         self.cr.fatal("L'attribut 'docu' doit etre une chaine de caractères : %s" %`self.docu` )
166       if type(self.nom) != types.StringType :
167         self.cr.fatal("L'attribut 'nom' doit etre une chaine de caractères : %s" %`self.nom`)
168       if self.reentrant not in ('o','n','f'):
169         self.cr.fatal("L'attribut 'reentrant' doit valoir 'o','n' ou 'f' : %s" %`self.reentrant`)
170       self.verif_cata_regles()
171
172    def supprime(self):
173       """
174           Méthode pour supprimer les références arrières susceptibles de provoquer
175           des cycles de références
176       """
177       self.niveau=None
178
179