]> SALOME platform Git repositories - modules/eficas.git/commitdiff
Salome HOME
Mise en coherence Aster 10.2.27
authorPascale Noyret <pascale.noyret@edf.fr>
Mon, 29 Nov 2010 11:06:10 +0000 (11:06 +0000)
committerPascale Noyret <pascale.noyret@edf.fr>
Mon, 29 Nov 2010 11:06:10 +0000 (11:06 +0000)
Noyau/N_ASSD.py
Noyau/basetype.py
Validation/V_AU_PLUS_UN.py

index 6a6ccf94c2afbd67318569526c702cb5690daeba..ecbc64f0dc88fae8ad76de9f89b34a0b5ddfaacc 100644 (file)
@@ -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.
       """
index 5eb7449f4b5e887e7c4b5593c6fbd256e7599ca5..fb3b839104b3fdd75fa437a05d65cde639c1b3d3 100644 (file)
@@ -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
index 8dc048a337d184b6d5f321760befc76b53889d68..d2f9fe0661ba30186df2158a786840efc8dd98c4 100644 (file)
@@ -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