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