Salome HOME
CCAR: Mise à jour de Noyau, Validation et Catalogue pour la version 7.0.13 d'Aster
[tools/eficas.git] / Noyau / N_PROC_ETAPE.py
1 #@ MODIF N_PROC_ETAPE Noyau  DATE 20/01/2003   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 PROC_ETAPE qui sert à vérifier et à exécuter
23     une procédure
24 """
25
26 # Modules Python
27 import types,sys,string
28 import traceback
29
30 # Modules EFICAS
31 import N_MCCOMPO, N_ETAPE
32 from N_Exception import AsException
33 import N_utils
34
35 class PROC_ETAPE(N_ETAPE.ETAPE):
36    """
37       Cette classe hérite de ETAPE. La seule différence porte sur le fait
38       qu'une procédure n'a pas de concept produit
39
40    """
41    nature = "PROCEDURE"
42    def __init__(self,oper=None,args={}):
43       """
44          Attributs :
45
46           - definition : objet portant les attributs de définition d'une étape de type opérateur. Il
47                          est initialisé par l'argument oper.
48
49           - valeur : arguments d'entrée de type mot-clé=valeur. Initialisé avec l'argument args.
50
51       """
52       self.definition=oper
53       self.valeur=args
54       self.nettoiargs()
55       self.parent=CONTEXT.get_current_step()
56       self.etape = self
57       self.nom=oper.nom
58       self.idracine=oper.label
59       self.appel=N_utils.callee_where()
60       self.mc_globaux={}
61       self.sd=None
62       self.actif=1
63       self.make_register()
64
65    def make_register(self):
66       """
67          Initialise les attributs jdc, id, niveau et réalise les enregistrements
68          nécessaires
69       """
70       if self.parent :
71          self.jdc = self.parent.get_jdc_root()
72          self.id=self.parent.register(self)
73          self.niveau=None
74       else:
75          self.jdc = self.parent =None
76          self.id=None
77          self.niveau=None
78
79    def McBuild(self):
80       """
81          Demande la construction des sous-objets et les stocke dans l'attribut
82          mc_liste.
83       """
84       self.mc_liste=self.build_mc()
85
86    def Build_sd(self):
87       """
88           Cette methode applique la fonction op_init au contexte du parent
89           et lance l'exécution en cas de traitement commande par commande
90           Elle doit retourner le concept produit qui pour une PROC est toujours None
91           En cas d'erreur, elle leve une exception : AsException ou EOFError
92       """
93       if not self.isactif():return
94       try:
95          if self.parent:
96             if type(self.definition.op_init) == types.FunctionType: 
97                apply(self.definition.op_init,(self,self.parent.g_context))
98          else:
99             pass
100          if self.jdc.par_lot == "NON" :
101             self.Execute()
102       except AsException,e:
103         raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
104                               'fichier : ',self.appel[1],e)
105       except EOFError:
106         raise
107       except :
108         l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
109         raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
110                           'fichier : ',self.appel[1]+'\n',
111                           string.join(l))
112
113    def supprime(self):
114       """
115          Méthode qui supprime toutes les références arrières afin que l'objet puisse
116          etre correctement détruit par le garbage collector
117       """
118       N_MCCOMPO.MCCOMPO.supprime(self)
119       self.jdc=None
120       self.appel=None
121
122    def accept(self,visitor):
123       """
124          Cette methode permet de parcourir l'arborescence des objets
125          en utilisant le pattern VISITEUR
126       """
127       visitor.visitPROC_ETAPE(self)
128
129    def update_context(self,d):
130       """
131          Met à jour le contexte de l'appelant passé en argument (d)
132          Une PROC_ETAPE n ajoute pas directement de concept dans le contexte
133          Seule une fonction enregistree dans op_init pourrait le faire
134       """
135       if type(self.definition.op_init) == types.FunctionType:
136         apply(self.definition.op_init,(self,d))
137
138
139