+#@ 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
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+
"""
Ce module contient la classe ETAPE qui sert à vérifier et à exécuter
une commande
import types,sys,string,os
import linecache
import traceback
+from copy import copy
# Modules EFICAS
import N_MCCOMPO
"""
if not self.isactif():return
+ self.sdnom=nom
try:
if self.parent:
sd= self.parent.create_sdprod(self,nom)
# 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])
'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
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:
- 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)
- 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 :
"""
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
def supprime(self):
"""
Méthode qui supprime toutes les références arrières afin que l'objet puisse
- être correctement détruit par le garbage collector
+ etre correctement détruit par le garbage collector
"""
N_MCCOMPO.MCCOMPO.supprime(self)
self.jdc=None
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