X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Noyau%2FN_ETAPE.py;h=377ce7523aa6d5cd963dc8a2e40fb194ea7f5837;hb=a7d5f18fe322c770026b50343adc09ed0472c192;hp=c7c5335df0793d88f695add0e4523d6393b30bb4;hpb=243fbe08b8fbc49d4ae0a5374069e9133b7b4b31;p=tools%2Feficas.git diff --git a/Noyau/N_ETAPE.py b/Noyau/N_ETAPE.py index c7c5335d..377ce752 100644 --- a/Noyau/N_ETAPE.py +++ b/Noyau/N_ETAPE.py @@ -1,4 +1,5 @@ -#@ MODIF N_ETAPE Noyau DATE 26/06/2002 AUTEUR DURAND C.DURAND +#@ MODIF N_ETAPE Noyau DATE 22/02/2005 AUTEUR DURAND C.DURAND +# -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG @@ -18,6 +19,8 @@ # # # ====================================================================== + + """ Ce module contient la classe ETAPE qui sert à vérifier et à exécuter une commande @@ -27,6 +30,7 @@ import types,sys,string,os import linecache import traceback +from copy import copy # Modules EFICAS import N_MCCOMPO @@ -128,16 +132,10 @@ class ETAPE(N_MCCOMPO.MCCOMPO): # On ne nomme le concept que dans le cas de non reutilisation # d un concept sd.nom=nom - if self.jdc and self.jdc.par_lot == "NON" : - self.Execute() - return sd except AsException,e: raise AsException("Etape ",self.nom,'ligne : ',self.appel[0], 'fichier : ',self.appel[1],e) except EOFError: - # XXX Normalement le contexte courant doit etre le parent. - # Il n'y a pas de raison de remettre le contexte au parent - #self.reset_current_step() raise except : l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]) @@ -145,11 +143,14 @@ class ETAPE(N_MCCOMPO.MCCOMPO): 'fichier : ',self.appel[1]+'\n', string.join(l)) + self.Execute() + return sd + def Execute(self): """ - Cette methode est prevue pour faire une execution dans le cas - ou par_lot == 'NON' - Par defaut, elle ne fait rien + Cette methode est un point d'entree prevu pour realiser une execution immediatement + apres avoir construit les mots cles et le concept produit. + Par defaut, elle ne fait rien. Elle doit etre surchargee dans une autre partie du programme. """ return @@ -182,19 +183,23 @@ class ETAPE(N_MCCOMPO.MCCOMPO): else: sd_prod=self.definition.sd_prod # on teste maintenant si la SD est réutilisée ou s'il faut la créer - if self.reuse: - # Il est preferable de traiter cette erreur ultérieurement : ce n'est pas une erreur fatale - #if AsType(self.reuse) != sd_prod: - # raise AsException("type de concept reutilise incompatible avec type produit") + if self.definition.reentrant != 'n' and self.reuse: + # Le concept produit est specifie reutilise (reuse=xxx). C'est une erreur mais non fatale. + # Elle sera traitee ulterieurement. self.sd=self.reuse else: self.sd= sd_prod(etape=self) - # Si reuse n'a pas ete donné, c'est une erreur. Ne pas corriger afin de la detecter ensuite - #if self.definition.reentrant == 'o': - # self.reuse = self.sd + # Si l'operateur est obligatoirement reentrant et reuse n'a pas ete specifie, c'est une erreur. + # On ne fait rien ici. L'erreur sera traiter par la suite. return self.sd def get_type_produit(self): + try: + return self.get_type_produit_brut() + except: + return None + + def get_type_produit_brut(self): """ Retourne le type du concept résultat de l'étape Deux cas : @@ -207,11 +212,7 @@ class ETAPE(N_MCCOMPO.MCCOMPO): """ if type(self.definition.sd_prod) == types.FunctionType: d=self.cree_dict_valeurs(self.mc_liste) - try: - sd_prod= apply(self.definition.sd_prod,(),d) - except: - #traceback.print_exc() - return None + sd_prod= apply(self.definition.sd_prod,(),d) else: sd_prod=self.definition.sd_prod return sd_prod @@ -317,6 +318,78 @@ class ETAPE(N_MCCOMPO.MCCOMPO): if self.sd: d[self.sd.nom]=self.sd + def copy(self): + """ Méthode qui retourne une copie de self non enregistrée auprès du JDC + et sans sd + """ + etape = copy(self) + etape.sd = None + etape.state = 'modified' + etape.reuse = None + etape.sdnom = None + etape.etape=etape + etape.mc_liste=[] + for objet in self.mc_liste: + new_obj = objet.copy() + new_obj.reparent(etape) + etape.mc_liste.append(new_obj) + return etape + + def copy_reuse(self,old_etape): + """ Méthode qui copie le reuse d'une autre étape. + """ + if hasattr(old_etape,"reuse") : + self.reuse = old_etape.reuse + def copy_sdnom(self,old_etape): + """ Méthode qui copie le sdnom d'une autre étape. + """ + if hasattr(old_etape,"sdnom") : + self.sdnom = old_etape.sdnom + + def reparent(self,parent): + """ + Cette methode sert a reinitialiser la parente de l'objet + """ + self.parent=parent + self.jdc=parent.get_jdc_root() + self.etape=self + for mocle in self.mc_liste: + mocle.reparent(self) + + def get_cmd(self,nomcmd): + """ + Méthode pour recuperer la definition d'une commande + donnee par son nom dans les catalogues declares + au niveau du jdc + Appele par un ops d'une macro en Python + """ + return self.jdc.get_cmd(nomcmd) + def copy_intern(self,etape): + """ + Méthode permettant lors du processus de recopie de copier + les elements internes d'une etape dans une autre + """ + return + def full_copy(self,parent=None): + """ + Méthode permettant d'effectuer une copie complète + d'une étape (y compris concept produit, éléments internes) + Si l'argument parent est fourni, la nouvelle étape + aura cet objet comme parent. + """ + new_etape = self.copy() + new_etape.copy_reuse(self) + new_etape.copy_sdnom(self) + if parent: new_etape.reparent(parent) + if self.sd : + new_sd = self.sd.__class__(etape=new_etape) + new_etape.sd = new_sd + if self.reuse == None : + new_etape.parent.NommerSdprod(new_sd,self.sd.nom) + else : + new_sd.nom = self.sd.nom + new_etape.copy_intern(self) + return new_etape