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