2 Ce module contient la classe de definition PROC
3 qui permet de spécifier les caractéristiques d'une procédure
6 import types,string,traceback
11 class PROC(N_ENTITE.ENTITE):
13 Classe pour definir un opérateur
15 Cette classe a deux attributs de classe
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
21 - label qui indique la nature de l'objet de définition (ici, PROC)
24 et les attributs d'instance suivants :
28 - op : le numéro d'opérateur
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
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.
37 - fr : commentaire associé en français
39 - ang : commentaire associé en anglais
41 - docu : clé de documentation associée
43 - regles : liste des règles associées
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.
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.
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.
58 class_instance = N_PROC_ETAPE.PROC_ETAPE
61 def __init__(self,nom,op,reentrant='n',repetable='o',fr="",ang="",
62 docu="",regles=(),op_init=None,niveau = None,**args):
64 Méthode d'initialisation de l'objet PROC. Les arguments sont utilisés pour initialiser
65 les attributs de meme nom
69 self.reentrant=reentrant
70 self.repetable = repetable
74 if type(regles)== types.TupleType:
78 # Attribut op_init : Fonction a appeler a la construction de l operateur sauf si == None
81 current_cata=CONTEXT.get_current_cata()
84 current_cata.enregistre(self)
86 self.niveau=current_cata.get_niveau(niveau)
87 self.niveau.enregistre(self)
88 self.affecter_parente()
90 def __call__(self,**args):
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.
95 etape= self.class_instance(oper=self,args=args)
97 return etape.Build_sd()
99 def make_objet(self,mc_list='oui'):
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
106 etape= self.class_instance(oper=self,args={})
107 if mc_list == 'oui':etape.McBuild()
110 def verif_cata(self):
112 Méthode de vérification des attributs de définition
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()
130 Méthode pour supprimer les références arrières susceptibles de provoquer
131 des cycles de références