]> SALOME platform Git repositories - modules/eficas.git/commitdiff
Salome HOME
Mise en coherence avec la 10.1.27 (attention diffenrece dans N_VALIDATORS)
authorPascale Noyret <pascale.noyret@edf.fr>
Thu, 3 Jun 2010 09:37:46 +0000 (09:37 +0000)
committerPascale Noyret <pascale.noyret@edf.fr>
Thu, 3 Jun 2010 09:37:46 +0000 (09:37 +0000)
Noyau/N_ASSD.py
Noyau/N_CONVERT.py
Noyau/N_GEOM.py
Noyau/N_MACRO_ETAPE.py
Noyau/N_VALIDATOR.py
Noyau/N_types.py [new file with mode: 0644]
Noyau/N_utils.py

index 0e7f5d2c2bc8a2751c749d2638e1a9f15ec7f0be..6a6ccf94c2afbd67318569526c702cb5690daeba 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_ASSD Noyau  DATE 16/11/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_ASSD Noyau  DATE 14/12/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
@@ -133,6 +133,17 @@ class ASSD(object):
       return is_accessible
 
 
+   def par_lot(self):
+      """Conserver uniquement pour la compatibilite avec le catalogue v9 dans eficas.
+      """
+      #XXX eficas
+      if not hasattr(self, 'jdc') or self.jdc == None:
+         val = None
+      else:
+         val = self.jdc.par_lot
+      return val == 'OUI'
+
+
 class assd(ASSD):
    def __convert__(cls,valeur):
       return valeur
index 511c3fe4fa139b9e623a027ae86d6bf0576010d5..6c9b17bb48a22b5f59b8dc2300bc3cc151c53619 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_CONVERT Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_CONVERT Noyau  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
    Module de conversion des valeurs saisies par l'utilisateur après vérification.
 """
 
-# -----------------------------------------------------------------------------
-def is_int(real):
+from N_types import is_int, is_float, is_enum
+
+
+def has_int_value(real):
    """Est-ce que 'real' a une valeur entière ?
    """
    return abs(int(real) - real) < 1.e-12
 
-# -----------------------------------------------------------------------------
+
 class Conversion:
    """Conversion de type.
    """
@@ -40,15 +42,15 @@ class Conversion:
    def convert(self, obj):
       """Filtre liste
       """
-      in_type = type(obj)
-      if in_type not in (list, tuple):
+      in_as_enum = is_enum(obj)
+      if not in_as_enum:
          obj = (obj,)
       
       result = []
       for o in obj:
          result.append(self.function(o))
       
-      if in_type not in (list, tuple):
+      if not in_as_enum:
          return result[0]
       else:
          # ne marche pas avec MACR_RECAL qui attend une liste et non un tuple
@@ -57,14 +59,14 @@ class Conversion:
    def function(self, o):
       raise NotImplementedError, 'cette classe doit être dérivée'
 
-# -----------------------------------------------------------------------------
+
 class TypeConversion(Conversion):
    """Conversion de type
    """
    def __init__(self, typ):
       Conversion.__init__(self, 'type', typ)
 
-# -----------------------------------------------------------------------------
+
 class IntConversion(TypeConversion):
    """Conversion en entier
    """
@@ -72,11 +74,11 @@ class IntConversion(TypeConversion):
       TypeConversion.__init__(self, 'I')
 
    def function(self, o):
-      if type(o) is float and is_int(o):
+      if is_float(o) and has_int_value(o):
          o = int(o)
       return o
 
-# -----------------------------------------------------------------------------
+
 class FloatConversion(TypeConversion):
    """Conversion de type
    """
@@ -84,11 +86,11 @@ class FloatConversion(TypeConversion):
       TypeConversion.__init__(self, 'R')
 
    def function(self, o):
-      if type(o) in (int, float, long):
+      if is_float(o):
          o = float(o)
       return o
 
-# -----------------------------------------------------------------------------
+
 _convertI = IntConversion()
 _convertR = FloatConversion()
 
index fea1c4cf2cd94e0092a8a80e2efb521474ee764f..7125faeda118f6ff908a90bf182402e20995a807 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_GEOM Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_GEOM Noyau  DATE 29/03/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
@@ -57,9 +57,9 @@ class GEOM(ASSD):
       return self.nom
 
    def __convert__(cls,valeur):
-      if isinstance(valeur, (str,unicode)):
-         return valeur
-      raise ValueError, 'On attend un chaine de caractères'
+      if isinstance(valeur, (str,unicode)) and len(valeur.strip()) <= 8:
+         return valeur.strip()
+      raise ValueError, 'On attend un chaine de caractères (de longueur < 8).'
    __convert__=classmethod(__convert__)
 
 class geom(GEOM):pass
index 3f075109c9ec50092add0a6a0b946dc7389ad471..7b59d5c08d935d580acef3488d827a86d462dbb0 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_MACRO_ETAPE Noyau  DATE 16/11/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_MACRO_ETAPE Noyau  DATE 23/03/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
@@ -469,6 +469,11 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
          # La propriete du concept est transferee a l'etape avec le type attendu par l'étape
          etape.sd=sd
          sd.etape=etape
+         if self.reuse == sd and etape.reuse != sd \
+                and getattr(sd, "executed", 0) == 1: # n'a pas été pas détruit
+            raise AsException("Le concept '%s' est réentrant dans la macro-commande %s. " \
+                              "Il devrait donc l'être dans %s (produit sous le nom '%s')." \
+                                % (sd.nom, self.nom, etape.nom, nomsd))
          # On donne au concept le type produit par la sous commande.
          # Le principe est le suivant : apres avoir verifie que le type deduit par la sous commande
          # est bien coherent avec celui initialement affecte par la macro (voir ci dessus)
index c7e65b94af7f328930e24b70247899d252e8fb49..ffd657104624328c21e62ee0744561f5f17e44e9 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_VALIDATOR Noyau  DATE 09/10/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_VALIDATOR Noyau  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
    implanter le concept de validateur dans Accas
 """
 import types
-import string
 import traceback
 from N_ASSD import ASSD
+from N_types import is_int, is_float_or_int, is_complex, is_number, is_str, is_enum
+
 
 class ValError(Exception):pass
 
@@ -79,18 +81,18 @@ class PProtocol(Protocol):
 class ListProtocol(Protocol):
     """Verificateur de protocole liste : convertit un objet quelconque en liste pour validation ultérieure"""
     def default(self,obj):
-        if type(obj) == types.TupleType :
+        if type(obj) is tuple:
             if len(obj) > 0 and obj[0] in ('RI','MP'):
                 #il s'agit d'un complexe ancienne mode. La cardinalite vaut 1
                 return (obj,)
             else:
                 return obj
-        elif type(obj) == types.ListType :
+        elif type(obj) is list:
             return obj
-        elif obj == None :
+        elif obj == None:
             # pas de valeur affecte. La cardinalite vaut 0
             return obj
-        elif type(obj) == types.StringType :
+        elif is_str(obj):
             #il s'agit d'une chaine. La cardinalite vaut 1
             return (obj,)
         else:
@@ -104,6 +106,7 @@ class ListProtocol(Protocol):
 
 listProto=ListProtocol("list")
 
+
 class TypeProtocol(PProtocol):
     """Verificateur de type parmi une liste de types possibles"""
     #pas de registre par instance. Registre unique pour toutes les instances de TypeProtocol
@@ -113,46 +116,38 @@ class TypeProtocol(PProtocol):
         self.typ=typ
 
     def default(self,obj,typ):
+        help = ""
         for type_permis in typ:
             if type_permis == 'R':
-                if type(obj) in (types.IntType,types.FloatType,types.LongType):return obj
+                if is_float_or_int(obj): return obj
             elif type_permis == 'I':
-                if type(obj) in (types.IntType,types.LongType):return obj
+                if is_int(obj): return obj
             elif type_permis == 'C':
-                if self.is_complexe(obj):return obj
+                if self.is_complexe(obj): return obj
             elif type_permis == 'TXM':
-                if type(obj)==types.StringType:return obj
+                if is_str(obj): return obj
             elif type_permis == 'shell':
-                if type(obj)==types.StringType:return obj
+                if is_str(obj): return obj
             elif type(type_permis) == types.ClassType or isinstance(type_permis,type):
-                if self.is_object_from(obj,type_permis):return obj
-            elif type_permis == 'Fichier' :
-                 import os
-                 if len(typ) > 2 and typ[2] == "Sauvegarde":
-                     if os.path.isdir(os.path.dirname(obj)):
-                         return obj
-                     else:
-                         raise ValError("%s n'est pas un répertoire valide" %
-                                        os.path.dirname(obj))
-                 else:
-                     if os.path.isfile(obj):return obj
-                     else : raise ValError("%s n'est pas un fichier valide" % repr(obj))
+                try:
+                    if self.is_object_from(obj,type_permis): return obj
+                except Exception, err:
+                    help = str(err)
             elif type(type_permis) == types.InstanceType or isinstance(type_permis,object):
                 try:
-                    if type_permis.__convert__(obj) : return obj
-                except:
-                    pass
+                    if type_permis.__convert__(obj): return obj
+                except Exception, err:
+                    help = str(err)
             else:
                 print "Type non encore géré %s" %`type_permis`
-
-        raise ValError("%s (de type %s) n'est pas d'un type autorisé: %s" % (repr(obj),type(obj),typ))
+        raise ValError("%s (de type %s) n'est pas d'un type autorisé: %s %s" % (repr(obj),type(obj),typ, help))
 
     def is_complexe(self,valeur):
         """ Retourne 1 si valeur est un complexe, 0 sinon """
-        if type(valeur) in (types.ComplexType,types.IntType,types.FloatType,types.LongType):
-            # Pour permettre l'utilisation de complexes Python
+        if is_number(valeur):
+            # Pour permettre l'utilisation de complexes Python (accepte les entiers et réels)
             return 1
-        elif type(valeur) != types.TupleType :
+        elif type(valeur) != tuple :
             # On n'autorise pas les listes pour les complexes
             return 0
         elif len(valeur) != 3:
@@ -160,7 +155,7 @@ class TypeProtocol(PProtocol):
         else:
             # Un complexe doit etre un tuple de longueur 3 avec 'RI' ou 'MP' comme premiere
             # valeur suivie de 2 reels.
-            if string.strip(valeur[0]) in ('RI','MP'):
+            if valeur[0].strip() in ('RI','MP'):
                 try:
                     v1=reelProto.adapt(valeur[1]),reelProto.adapt(valeur[2])
                     return 1
@@ -179,6 +174,8 @@ class TypeProtocol(PProtocol):
             try:
                 v=  convert(objet)
                 return v is not None
+            except ValueError, err:
+                raise
             except:
                 return 0
         # On accepte les instances de la classe et des classes derivees
@@ -214,7 +211,7 @@ class IntoProtocol(PProtocol):
                 raise ValError("La valeur : %s  ne fait pas partie des choix possibles %s" % (repr(obj),into) )
         else:
             #on est dans le cas d'un ensemble continu de valeurs possibles (intervalle)
-            if type(obj) in (types.IntType,types.FloatType,types.LongType) :
+            if is_float_or_int(obj):
                 if val_min == '**': val_min = obj -1
                 if val_max == '**': val_max = obj +1
                 if obj < val_min or obj > val_max :
@@ -229,7 +226,7 @@ class MinStr:
         self.max=max
 
     def __convert__(self,valeur):
-        if type(valeur) == types.StringType and self.min <= len(valeur) <= self.max:return valeur
+        if is_str(valeur) and self.min <= len(valeur) <= self.max:return valeur
         raise ValError("%s n'est pas une chaine de longueur comprise entre %s et %s" % (valeur,self.min,self.max))
 
     def __repr__(self):
@@ -407,7 +404,7 @@ class ListVal(Valid):
           fait appel à la méthode convert_item sur chaque élément de la
           liste.
        """
-       if type(valeur) in (types.ListType,types.TupleType):
+       if is_enum(valeur):
           for val in valeur:
               self.convert_item(val)
           return valeur
@@ -421,7 +418,7 @@ class ListVal(Valid):
           liste. Si valeur est un paramètre, on utilise sa valeur effective
           valeur.valeur.
        """
-       if type(valeur) in (types.ListType,types.TupleType):
+       if is_enum(valeur):
           for val in valeur:
               if not self.verif_item(val):
                  return 0
@@ -436,7 +433,7 @@ class Compulsory(ListVal):
       """
       registry={}
       def __init__(self,elem=()):
-          if type(elem) not in (types.ListType,types.TupleType): elem=(elem,)
+          if not is_enum(elem): elem=(elem,)
           Valid.__init__(self,elem=elem)
           self.elem=elem
           self.cata_info=""
@@ -463,7 +460,7 @@ class Compulsory(ListVal):
           return 1
 
       def verif(self,valeur):
-          if type(valeur) not in (types.ListType,types.TupleType):
+          if not is_enum(valeur):
              liste=list(valeur)
           else:
              liste=valeur
@@ -504,7 +501,7 @@ class NoRepeat(ListVal):
           return 1
 
       def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
+          if is_enum(valeur):
              liste=list(valeur)
              for val in liste:
                 if liste.count(val)!=1 : return 0
@@ -558,7 +555,7 @@ class LongStr(ListVal):
              return 0
 
       def default(self,valeur,low,high):
-          if type(valeur) != types.StringType :
+          if not is_str(valeur):
              raise ValError("%s n'est pas une string" % repr(valeur))
           if valeur[0]=="'" and valeur[-1]=="'" :
              low=low+2
@@ -630,7 +627,7 @@ class OrVal(Valid):
           Elle verifie qu'au moins un des validateurs de la liste valide la valeur
       """
       def __init__(self,validators=()):
-          if type(validators) not in (types.ListType,types.TupleType):
+          if not is_enum(validators):
              validators=(validators,)
           self.validators=[]
           for validator in validators:
@@ -755,7 +752,7 @@ class AndVal(Valid):
           Elle verifie que tous les validateurs de la liste valident la valeur
       """
       def __init__(self,validators=()):
-          if type(validators) not in (types.ListType,types.TupleType):
+          if not is_enum(validators):
              validators=(validators,)
           self.validators=[]
           for validator in validators:
@@ -889,9 +886,9 @@ def do_liste(validators):
     for validator in validators:
         if type(validator) == types.FunctionType:
            valids.append(FunctionVal(validator))
-        elif type(validator) == types.TupleType:
+        elif type(validator) is tuple:
            valids.append(OrVal(do_liste(validator)))
-        elif type(validator) == types.ListType:
+        elif type(validator) is list:
            valids.append(AndVal(do_liste(validator)))
         else:
            valids.append(validator)
@@ -900,9 +897,9 @@ def do_liste(validators):
 def validatorFactory(validator):
     if type(validator) == types.FunctionType:
        return FunctionVal(validator)
-    elif type(validator) == types.TupleType:
+    elif type(validator) is tuple:
        return OrVal(do_liste(validator))
-    elif type(validator) == types.ListType:
+    elif type(validator) is list:
        return AndVal(do_liste(validator))
     else:
        return validator
@@ -976,7 +973,7 @@ class CardVal(Valid):
              return []
 
       def convert(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
+          if is_enum(valeur):
              l=len(valeur)
           elif valeur is None:
              l=0
@@ -990,7 +987,7 @@ class CardVal(Valid):
           return 1
 
       def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
+          if is_enum(valeur):
              if self.max != '**' and len(valeur) > self.max:return 0
              if self.min != '**' and len(valeur) < self.min:return 0
              return 1
@@ -1042,7 +1039,7 @@ class PairVal(ListVal):
           return valeur % 2 == 0
 
       def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
+          if is_enum(valeur):
              for val in valeur:
                 if val % 2 != 0:return 0
              return 1
@@ -1057,7 +1054,8 @@ class EnumVal(ListVal):
           Susceptible de remplacer l attribut "into" dans les catalogues
       """
       def __init__(self,into=()):
-          if type(into) not in (types.ListType,types.TupleType): into=(into,)
+          if not is_enum(into): 
+              into=(into,)
           self.into=into
           self.cata_info=""
 
@@ -1094,7 +1092,7 @@ def ImpairVal(valeur):
         Cette fonction est un validateur. Elle verifie que la valeur passee
         est bien un nombre impair.
     """
-    if type(valeur) in (types.ListType,types.TupleType):
+    if is_enum(valeur):
        for val in valeur:
            if val % 2 != 1:return 0
        return 1
@@ -1119,7 +1117,7 @@ class F1Val(Valid):
           return "valeur %s pour la somme des cles A et B " % self.somme
 
       def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
+          if is_enum(valeur):
              for val in valeur:
                 if not val.has_key("A"):return 0
                 if not val.has_key("B"):return 0
diff --git a/Noyau/N_types.py b/Noyau/N_types.py
new file mode 100644 (file)
index 0000000..be4e972
--- /dev/null
@@ -0,0 +1,61 @@
+#@ MODIF N_types Noyau  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  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.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+"""
+   Ce module contient des fonctions utilitaires pour tester les types
+"""
+
+from N_ASSD import ASSD
+
+
+# use isinstance() instead of type() because objects returned from numpy arrays
+# inherit from python scalars but are numpy.float64 or numpy.int32...
+def is_int(obj):
+    return isinstance(obj, int) or type(obj) is long
+
+def is_float(obj):
+    return isinstance(obj, float)
+
+def is_complex(obj):
+    return isinstance(obj, complex)
+
+def is_float_or_int(obj):
+    return is_float(obj) or is_int(obj)
+
+def is_number(obj):
+    return is_float_or_int(obj) or is_complex(obj)
+
+def is_str(obj):
+    return type(obj) in (str, unicode)
+
+def is_list(obj):
+    return type(obj) is list
+
+def is_tuple(obj):
+    return type(obj) is tuple
+
+def is_enum(obj):
+    return is_list(obj) or is_tuple(obj)
+
+def is_assd(obj):
+    return isinstance(obj, ASSD)
+
+
index 8b34e714c8c1464862492ac36c642a2934054913..50198669da1aac46dd0dc259b98d0017a16377e8 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_utils Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_utils Noyau  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
@@ -31,7 +31,7 @@ import sys
 
 # Modules EFICAS
 from N_Exception import AsException
-from N_ASSD      import ASSD
+from N_types     import is_int, is_float, is_complex, is_str, is_enum, is_assd
 
 SEP='_'
 
@@ -67,25 +67,28 @@ def callee_where(niveau=4):
    except:
      return 0,"inconnu",0,{}
 
+
 def AsType(a):
    """
       Retourne le type d'un concept (a) à partir
       des caractéristiques de l'objet Python
    """
-   if type(a) in (tuple, list):return AsType(a[0])
-   if isinstance(a, ASSD):return type(a)
-   if type(a) == float:return "R"
-   if type(a) == int:return "I"
-   if type(a) == str:return "TXM"
-   if a == None : return None
-   print 'a=',a,type(a)
+   if is_enum(a):  return AsType(a[0])
+   if is_assd(a):  return type(a)
+   if is_float(a): return "R"
+   if is_int(a):   return "I"
+   if is_str(a):   return "TXM"
+   if a == None:   return None
+   print 'a=', a, type(a)
    raise AsException("type inconnu")
 
+
 def prbanner(s):
    print "*"*(len(s)+10)
    print "*"*5 + s + "*"*5
    print "*"*(len(s)+10)
 
+
 def repr_float(valeur):
   """ 
       Cette fonction représente le réel valeur comme une chaine de caractères