-#@ 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
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]
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
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
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.
"""
-#@ 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
La classe `Type` hérite de BaseType et y associe la métaclasse MetaType.
"""
-from copy import copy,deepcopy
+
import cPickle
__docformat__ = "restructuredtext"
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
-#@ 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
# ======================================================================
-import types
-
class AU_PLUS_UN:
"""
La règle vérifie que l'on trouve 1 (au plus) des mots-clés
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
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