Salome HOME
legere difference ds VARIABLES_TO_BE...
[tools/eficas.git] / Noyau / N_PROC_ETAPE.py
1 # coding=utf-8
2 # Copyright (C) 2007-2013   EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
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 from __future__ import absolute_import
28 import types
29 import sys
30 import traceback
31
32 # Modules EFICAS
33 from . import N_MCCOMPO
34 from . import N_ETAPE
35 from .N_Exception import AsException
36 from . import N_utils
37
38
39 class PROC_ETAPE(N_ETAPE.ETAPE):
40
41     """
42        Cette classe hérite de ETAPE. La seule différence porte sur le fait
43        qu'une procédure n'a pas de concept produit
44
45     """
46     nature = "PROCEDURE"
47
48     def __init__(self, oper=None, reuse=None, args={}):
49         """
50         Attributs :
51          - definition : objet portant les attributs de définition d'une étape de type opérateur. Il
52                         est initialisé par l'argument oper.
53          - valeur : arguments d'entrée de type mot-clé=valeur. Initialisé avec l'argument args.
54          - reuse : forcément None pour une PROC
55         """
56         N_ETAPE.ETAPE.__init__(self, oper, reuse=None, args=args, niveau=5)
57         self.reuse = None
58
59     def Build_sd(self):
60         """
61             Cette methode applique la fonction op_init au contexte du parent
62             et lance l'exécution en cas de traitement commande par commande
63             Elle doit retourner le concept produit qui pour une PROC est toujours None
64             En cas d'erreur, elle leve une exception : AsException ou EOFError
65         """
66         if not self.isactif():
67             return
68         try:
69             if self.parent:
70                 if type(self.definition.op_init) == types.FunctionType:
71                     self.definition.op_init(*(
72                         self, self.parent.g_context))
73             else:
74                 pass
75         except AsException as e:
76             raise AsException("Etape ", self.nom, 'ligne : ', self.appel[0],
77                               'fichier : ', self.appel[1], e)
78         except EOFError:
79             raise
80         except:
81             l = traceback.format_exception(
82                 sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])
83             raise AsException("Etape ", self.nom, 'ligne : ', self.appel[0],
84                               'fichier : ', self.appel[1] + '\n',
85                               ''.join(l))
86
87         self.Execute()
88         return None
89
90     def supprime(self):
91         """
92            Méthode qui supprime toutes les références arrières afin que l'objet puisse
93            etre correctement détruit par le garbage collector
94         """
95         N_MCCOMPO.MCCOMPO.supprime(self)
96         self.jdc = None
97         self.appel = None
98
99     def accept(self, visitor):
100         """
101            Cette methode permet de parcourir l'arborescence des objets
102            en utilisant le pattern VISITEUR
103         """
104         visitor.visitPROC_ETAPE(self)
105
106     def update_context(self, d):
107         """
108            Met à jour le contexte de l'appelant passé en argument (d)
109            Une PROC_ETAPE n ajoute pas directement de concept dans le contexte
110            Seule une fonction enregistree dans op_init pourrait le faire
111         """
112         if type(self.definition.op_init) == types.FunctionType:
113             self.definition.op_init(*(self, d))