From: Pascale Noyret Date: Mon, 29 Nov 2010 11:06:10 +0000 (+0000) Subject: Mise en coherence Aster 10.2.27 X-Git-Tag: V2_1_1_beta~1 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=67b4765c806123c1751d1d8293b151738f0a5b3d;p=modules%2Feficas.git Mise en coherence Aster 10.2.27 --- diff --git a/Noyau/N_ASSD.py b/Noyau/N_ASSD.py index 6a6ccf94..ecbc64f0 100644 --- a/Noyau/N_ASSD.py +++ b/Noyau/N_ASSD.py @@ -1,4 +1,4 @@ -#@ MODIF N_ASSD Noyau DATE 14/12/2009 AUTEUR COURTOIS M.COURTOIS +#@ MODIF N_ASSD Noyau DATE 09/11/2010 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -59,6 +59,8 @@ class ASSD(object): self.id = self.parent.o_register(self) # permet de savoir si le concept a été calculé (1) ou non (0) self.executed = 0 + # permet de savoir si le catalogue de SD a déjà été supprimé (1) ou non (0) + self.sd_deleted = 0 def __getitem__(self,key): return self.etape[key] @@ -80,6 +82,19 @@ class ASSD(object): if hasattr(sup, 'nomj'): # == AsBase sup.reparent(None, None) + def rebuild_sd(self): + """Reconstruit les attributs de la SD associée. + """ + etape = getattr(self, "etape", None) + sd = getattr(self, "sd", None) + new = self.__class__(etape=etape, sd=sd) + new.set_name(self.nom) + datt = new.__dict__ + for nam in datt.keys(): + if hasattr(self, nam) and getattr(self, nam) is None: + setattr(self, nam, getattr(new, nam)) + self.reparent_sd() + def get_name(self): """ Retourne le nom de self, éventuellement en le demandant au JDC @@ -102,6 +117,20 @@ class ASSD(object): self.jdc = None self.parent = None + def supprime_sd(self, delete=False): + """Supprime la partie du catalogue de SD. + Si `delete` vaut False, on ne supprime que les références + pour permettre la destruction complète lors de la suppression + de l'ASSD. + Si `delete` vaut True, on supprime immédiatement les + objets du catalogue de SD.""" + sup = super(ASSD, self) + if hasattr(sup, 'nomj'): # == AsBase + if self.sd_deleted == 1: + return + sup.supprime(delete) + self.sd_deleted = 1 + def accept(self,visitor): """ Cette methode permet de parcourir l'arborescence des objets @@ -115,15 +144,17 @@ class ASSD(object): Ceci est possible car on coupe les liens avec les objets parent, etape et jdc qui conduiraient à pickler de nombreux objets inutiles ou non picklables. + En sortie, l'objet n'est plus tout à fait le même ! """ - d=self.__dict__.copy() - for key in ('parent','etape','jdc'): - if d.has_key(key):del d[key] + d = self.__dict__.copy() + for key in ('parent', 'etape', 'jdc'): + if d.has_key(key): + del d[key] for key in d.keys(): - if key[0]=='_':del d[key] + if key[0] == '_': + del d[key] return d - def accessible(self): """Dit si on peut acceder aux "valeurs" (jeveux) de l'ASSD. """ diff --git a/Noyau/basetype.py b/Noyau/basetype.py index 5eb7449f..fb3b8391 100644 --- a/Noyau/basetype.py +++ b/Noyau/basetype.py @@ -1,4 +1,4 @@ -#@ MODIF basetype Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS +#@ MODIF basetype Noyau DATE 09/11/2010 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -38,7 +38,7 @@ C'est ce comportement qui est captur La classe `Type` hérite de BaseType et y associe la métaclasse MetaType. """ -from copy import copy,deepcopy + import cPickle __docformat__ = "restructuredtext" @@ -131,6 +131,22 @@ class BaseType(object): obj = getattr( self, nam ) obj.reparent( self, nam ) + def supprime(self, delete=False): + """Permet de casser les boucles de références pour que les ASSD + puissent être détruites. + Si `delete` vaut True, on supprime l'objet lui-même et pas + seulement les références remontantes.""" + self._parent = None + self._name = None + for nam in self._subtypes: + obj = getattr(self, nam) + obj.supprime(delete) + if delete: + for nam in self._subtypes: + if hasattr(self, nam): + delattr(self, nam) + self._subtypes.remove(nam) + def base( self ): if self._parent is None: return self diff --git a/Validation/V_AU_PLUS_UN.py b/Validation/V_AU_PLUS_UN.py index 8dc048a3..d2f9fe06 100644 --- a/Validation/V_AU_PLUS_UN.py +++ b/Validation/V_AU_PLUS_UN.py @@ -1,4 +1,4 @@ -#@ MODIF V_AU_PLUS_UN Validation DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS +#@ MODIF V_AU_PLUS_UN Validation DATE 09/11/2010 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -20,8 +20,6 @@ # ====================================================================== -import types - class AU_PLUS_UN: """ La règle vérifie que l'on trouve 1 (au plus) des mots-clés @@ -31,7 +29,7 @@ class AU_PLUS_UN: d'une liste de noms de mots-clés ou d'un dictionnaire dont les clés sont des noms de mots-clés. """ - def verif(self,args): + def verif(self, args): """ La méthode verif vérifie que l'on trouve 1 (au plus) des mos-clés de la liste self.mcs parmi les éléments de args @@ -40,26 +38,23 @@ class AU_PLUS_UN: sont soit les éléments de la liste soit les clés du dictionnaire. """ # on compte le nombre de mots cles presents - text ='' + text = '' count = 0 args = self.liste_to_dico(args) for mc in self.mcs: - if args.has_key(mc):count=count+args[mc] + count = count + args.get(mc, 0) if count > 1: - text = "- Il ne faut qu'un mot-clé (au plus) parmi : "+`self.mcs`+'\n' - return text,0 - return text,1 + text = "- Il ne faut qu'un mot-clé (au plus) parmi : "+`self.mcs`+'\n' + return text, 0 + return text, 1 - def liste_to_dico(self,args) : - if type(args) == types.DictionaryType: - return args - elif type(args) == types.ListType: - dico={} - for arg in args : - if dico.has_key(arg): - dico[arg]=dico[arg]+1 - else : - dico[arg]=1 - return dico + def liste_to_dico(self, args) : + if type(args) is dict: + return args + elif type(args) in (list, tuple): + dico={} + for arg in args: + dico[arg] = dico.get(arg, 0) + 1 + return dico else : - raise "Erreur ce n'est ni un dictionnaire ni une liste",args + raise "Erreur ce n'est ni un dictionnaire ni une liste", args