Salome HOME
*** empty log message ***
[tools/eficas.git] / Noyau / N_PROC_ETAPE.py
1 #@ MODIF N_PROC_ETAPE Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
2 # -*- coding: iso-8859-1 -*-
3 # RESPONSABLE COURTOIS M.COURTOIS
4 #            CONFIGURATION MANAGEMENT OF EDF VERSION
5 # ======================================================================
6 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
7 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
8 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
9 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
10 # (AT YOUR OPTION) ANY LATER VERSION.                                 
11 #
12 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
13 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
14 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
15 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
16 #
17 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
18 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
19 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
20 #                                                                       
21 #                                                                       
22 # ======================================================================
23
24
25 """ 
26     Ce module contient la classe PROC_ETAPE qui sert à vérifier et à exécuter
27     une procédure
28 """
29
30 # Modules Python
31 import types,sys,string
32 import traceback
33
34 # Modules EFICAS
35 import N_MCCOMPO, N_ETAPE
36 from N_Exception import AsException
37 import N_utils
38
39 class PROC_ETAPE(N_ETAPE.ETAPE):
40    """
41       Cette classe hérite de ETAPE. La seule différence porte sur le fait
42       qu'une procédure n'a pas de concept produit
43
44    """
45    nature = "PROCEDURE"
46    def __init__(self,oper=None,args={}):
47       """
48          Attributs :
49
50           - definition : objet portant les attributs de définition d'une étape de type opérateur. Il
51                          est initialisé par l'argument oper.
52
53           - valeur : arguments d'entrée de type mot-clé=valeur. Initialisé avec l'argument args.
54
55       """
56       self.definition=oper
57       self.valeur=args
58       self.nettoiargs()
59       self.parent=CONTEXT.get_current_step()
60       self.etape = self
61       self.nom=oper.nom
62       self.idracine=oper.label
63       self.appel=N_utils.callee_where()
64       self.mc_globaux={}
65       self.sd=None
66       self.actif=1
67       self.make_register()
68
69    def make_register(self):
70       """
71          Initialise les attributs jdc, id, niveau et réalise les enregistrements
72          nécessaires
73       """
74       if self.parent :
75          self.jdc = self.parent.get_jdc_root()
76          self.id=self.parent.register(self)
77          self.niveau=None
78       else:
79          self.jdc = self.parent =None
80          self.id=None
81          self.niveau=None
82
83    def McBuild(self):
84       """
85          Demande la construction des sous-objets et les stocke dans l'attribut
86          mc_liste.
87       """
88       self.mc_liste=self.build_mc()
89
90    def Build_sd(self):
91       """
92           Cette methode applique la fonction op_init au contexte du parent
93           et lance l'exécution en cas de traitement commande par commande
94           Elle doit retourner le concept produit qui pour une PROC est toujours None
95           En cas d'erreur, elle leve une exception : AsException ou EOFError
96       """
97       if not self.isactif():return
98       try:
99          if self.parent:
100             if type(self.definition.op_init) == types.FunctionType: 
101                apply(self.definition.op_init,(self,self.parent.g_context))
102          else:
103             pass
104       except AsException,e:
105         raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
106                               'fichier : ',self.appel[1],e)
107       except EOFError:
108         raise
109       except :
110         l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
111         raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
112                           'fichier : ',self.appel[1]+'\n',
113                           string.join(l))
114
115       self.Execute()
116       return None
117
118    def supprime(self):
119       """
120          Méthode qui supprime toutes les références arrières afin que l'objet puisse
121          etre correctement détruit par le garbage collector
122       """
123       N_MCCOMPO.MCCOMPO.supprime(self)
124       self.jdc=None
125       self.appel=None
126
127    def accept(self,visitor):
128       """
129          Cette methode permet de parcourir l'arborescence des objets
130          en utilisant le pattern VISITEUR
131       """
132       visitor.visitPROC_ETAPE(self)
133
134    def update_context(self,d):
135       """
136          Met à jour le contexte de l'appelant passé en argument (d)
137          Une PROC_ETAPE n ajoute pas directement de concept dans le contexte
138          Seule une fonction enregistree dans op_init pourrait le faire
139       """
140       if type(self.definition.op_init) == types.FunctionType:
141         apply(self.definition.op_init,(self,d))
142
143
144