Salome HOME
3a35d98fc8cbaa4d54f4382f8d1010527206683d
[tools/eficas.git] / Noyau / N_PROC.py
1 """ 
2     Ce module contient la classe de definition PROC
3     qui permet de spécifier les caractéristiques d'une procédure
4 """
5
6 import types,string,traceback
7
8 import N_ENTITE
9 import N_PROC_ETAPE
10
11 class PROC(N_ENTITE.ENTITE):
12    """
13     Classe pour definir un opérateur
14
15     Cette classe a deux attributs de classe 
16
17     - class_instance qui indique la classe qui devra etre utilisée 
18             pour créer l'objet qui servira à controler la conformité d'un 
19             opérateur avec sa définition
20
21     - label qui indique la nature de l'objet de définition (ici, PROC)
22
23
24     et les attributs d'instance suivants :
25
26     - nom   : son nom
27
28     - op   : le numéro d'opérateur
29
30     - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur
31                         réentrant peut modifier un concept d'entrée et le produire comme concept de sortie
32
33     - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur
34                         non répétable ne doit apparaitre qu'une fois dans une exécution. C'est du ressort
35                         de l'objet gérant le contexte d'exécution de vérifier cette contrainte.
36
37     - fr   : commentaire associé en français
38
39     - ang : commentaire associé en anglais
40
41     - docu : clé de documentation associée
42
43     - regles : liste des règles associées
44
45     - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette
46                       fonction est exécutée lors des phases d'initialisation de l'étape associée.
47
48     - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent être
49                      rangés par niveau. Ils apparaissent alors exclusivement dans leur niveau de rangement.
50                      Si niveau vaut None, l'opérateur est rangé au niveau global.
51
52     - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit
53                       des entités de définition pour les mots-clés : FACT, BLOC, SIMP. Cet attribut
54                       est initialisé avec args, c'est à dire les arguments d'appel restants.
55
56
57    """
58    class_instance = N_PROC_ETAPE.PROC_ETAPE
59    label = 'PROC'
60
61    def __init__(self,nom,op,reentrant='n',repetable='o',fr="",ang="",
62                 docu="",regles=(),op_init=None,niveau = None,**args):
63       """
64          Méthode d'initialisation de l'objet PROC. Les arguments sont utilisés pour initialiser
65          les attributs de meme nom
66       """
67       self.nom=nom
68       self.op=op
69       self.reentrant=reentrant
70       self.repetable = repetable
71       self.fr=fr
72       self.ang=ang
73       self.docu=docu
74       if type(regles)== types.TupleType:
75           self.regles=regles
76       else:
77           self.regles=(regles,)
78       # Attribut op_init : Fonction a appeler a la construction de l operateur sauf si == None
79       self.op_init=op_init
80       self.entites=args
81       current_cata=CONTEXT.get_current_cata()
82       if niveau == None:
83          self.niveau=None
84          current_cata.enregistre(self)
85       else:
86          self.niveau=current_cata.get_niveau(niveau)
87          self.niveau.enregistre(self)
88       self.affecter_parente()
89
90    def __call__(self,**args):
91       """
92           Construit l'objet PROC_ETAPE a partir de sa definition (self),
93           puis demande la construction de ses sous-objets et du concept produit.
94       """
95       etape= self.class_instance(oper=self,args=args)
96       etape.McBuild()
97       return etape.Build_sd()
98
99    def make_objet(self,mc_list='oui'):
100       """
101            Cette méthode crée l'objet PROC_ETAPE dont la définition est self sans
102             l'enregistrer ni créer sa sdprod.
103            Si l'argument mc_list vaut 'oui', elle déclenche en plus la construction
104            des objets MCxxx.
105       """
106       etape= self.class_instance(oper=self,args={})
107       if mc_list == 'oui':etape.McBuild()
108       return etape
109
110    def verif_cata(self):
111       """
112           Méthode de vérification des attributs de définition
113       """
114       if type(self.regles) != types.TupleType :
115         self.cr.fatal("L'attribut 'regles' doit être un tuple : %s" %`self.regles`)
116       if type(self.fr) != types.StringType :
117         self.cr.fatal("L'attribut 'fr' doit être une chaîne de caractères : %s" %`self.fr`)
118       if self.reentrant not in ('o','n','f'):
119         self.cr.fatal("L'attribut 'reentrant' doit valoir 'o','n' ou 'f' : %s" %`self.reentrant`)
120       if type(self.docu) != types.StringType :
121         self.cr.fatal("L'attribut 'docu' doit être une chaîne de caractères : %s" %`self.docu` )
122       if type(self.nom) != types.StringType :
123         self.cr.fatal("L'attribut 'nom' doit être une chaîne de caractères : %s" %`self.nom`)
124       if type(self.op) != types.IntType :
125         self.cr.fatal("L'attribut 'op' doit être un entier signé : %s" %`self.op`)
126       self.verif_cata_regles()
127
128    def supprime(self):
129       """
130           Méthode pour supprimer les références arrières susceptibles de provoquer
131           des cycles de références
132       """
133       self.niveau=None
134
135