Salome HOME
sauve du 20/12
[tools/eficas.git] / Noyau / N_VALIDATOR.py
index aee9cc883ada5ba71d8df3362fdfa52d6a4901dc..e9493c7dd6d30690227c8bcbf5fd8be7dacefa11 100644 (file)
@@ -1,5 +1,5 @@
 # coding=utf-8
-# Copyright (C) 2007-2013   EDF R&D
+# Copyright (C) 2007-2015   EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -16,6 +16,9 @@
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# ======================================================================
 
 """
    Ce module contient toutes les classes necessaires pour
@@ -27,6 +30,8 @@ import re
 from N_ASSD import ASSD
 from N_types import is_int, is_float_or_int, is_complex, is_number, is_str, is_sequence
 from strfunc import convert, ufmt
+from Extensions.i18n import tr
+
 
 
 class ValError(Exception):
@@ -156,21 +161,21 @@ class TypeProtocol(PProtocol):
                     return obj
                 else:
                     raise ValError(
-                        ufmt(_(u"%s n'est pas un fichier valide"), repr(obj)))
+                        ufmt(_(tr(u"%s n'est pas un fichier valide")), repr(obj)))
             elif type_permis == 'FichierNoAbs':
                 import os
                 if (len(typ) > 2 and typ[2] == "Sauvegarde") or isinstance(obj, type("")):
                     return obj
                 else:
                     raise ValError(
-                        ufmt(_(u"%s n'est pas un fichier valide"), repr(obj)))
+                        ufmt(_(tr("%s n'est pas un fichier valide")), repr(obj)))
             elif type_permis == 'Repertoire':
                 import os
                 if os.path.isdir(obj):
                     return obj
                 else:
                     raise ValError(
-                        ufmt(_(u"%s n'est pas un répertoire valide"), repr(obj)))
+                        ufmt(_(tr(u"%s n'est pas un repertoire valide")), repr(obj)))
             elif type(type_permis) == types.ClassType or isinstance(type_permis, type):
                 try:
                     if self.is_object_from(obj, type_permis):
@@ -184,9 +189,9 @@ class TypeProtocol(PProtocol):
                 except Exception, err:
                     pass
             else:
-                print convert(ufmt(_(u"Type non encore géré %s"), `type_permis`))
+                print convert(ufmt(_(tr(u"Type non encore gere %s")), `type_permis`))
         raise ValError(
-            ufmt(_(u"%s (de type %s) n'est pas d'un type autorisé: %s %s"),
+            ufmt(_(tr(u"%s (de type %s) n'est pas d'un type autorise: %s %s")),
                  repr(obj), type(obj), typ, unicode(err)))
 
     def is_complexe(self, valeur):
@@ -246,7 +251,7 @@ class CardProtocol(PProtocol):
         if length < min or length > max:
             raise ValError(
                 ufmt(
-                    _(u"Nombre d'arguments de %s incorrect (min = %s, max = %s)"),
+                    _(tr(u"Nombre d'arguments de %s incorrect (min = %s, max = %s)")),
                     repr(obj), min, max))
         return obj
 
@@ -268,8 +273,7 @@ class IntoProtocol(PProtocol):
             if obj not in into:
                 raise ValError(
                     ufmt(
-                        _(u"La valeur : %s  ne fait pas partie des choix possibles %s"),
-                        repr(obj), into))
+                        _(tr(u"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)
@@ -281,7 +285,7 @@ class IntoProtocol(PProtocol):
                 if obj < val_min or obj > val_max:
                     raise ValError(
                         ufmt(
-                            _(u"La valeur : %s est en dehors du domaine de validité [ %s , %s ]"),
+                            _(tr(u"La valeur : %s est en dehors du domaine de validite [ %s , %s ]")),
                             repr(obj), self.val_min, self.val_max))
         return obj
 
@@ -300,11 +304,11 @@ class MinStr:
             return valeur
         raise ValError(
             ufmt(
-                _(u"%s n'est pas une chaine de longueur comprise entre %s et %s"),
+                _(tr(u"%s n'est pas une chaine de longueur comprise entre %s et %s")),
                 valeur, self.min, self.max))
 
     def __repr__(self):
-        return ufmt(_(u"TXM de longueur entre %s et %s"), self.min, self.max)
+        return ufmt(_(tr(u"TXM de longueur entre %s et %s")), self.min, self.max)
 
 
 class Valid(PProtocol):
@@ -508,7 +512,6 @@ class ListVal(Valid):
 
 
 class Compulsory(ListVal):
-
     """
         Validateur operationnel
         Verification de la présence obligatoire d'un élément dans une liste
@@ -523,7 +526,7 @@ class Compulsory(ListVal):
         self.cata_info = ""
 
     def info(self):
-        return ufmt(_(u"valeur %s obligatoire"), `self.elem`)
+        return ufmt(_(tr(u"valeur %s obligatoire")), `self.elem`)
 
     def default(self, valeur, elem):
         return valeur
@@ -539,7 +542,7 @@ class Compulsory(ListVal):
                 elem.remove(v)
         if elem:
             raise ValError(
-                ufmt(_(u"%s ne contient pas les elements obligatoires : %s "),
+                ufmt(_(tr(u"%s ne contient pas les elements obligatoires : %s ")),
                      valeur, elem))
         return valeur
 
@@ -560,26 +563,123 @@ class Compulsory(ListVal):
         return _(u"La valeur n'est pas dans la liste des choix possibles")
 
 
-class NoRepeat(ListVal):
+class Together(ListVal):
+    """
+        Validateur operationnel
+        si un des éléments est présent les autres doivent aussi l'être
+    """
+    registry = {}
 
+    def __init__(self, elem=()):
+        if not is_sequence(elem):
+            elem = (elem,)
+        Valid.__init__(self, elem=elem)
+        self.elem = elem
+        self.cata_info = ""
+
+    def info(self):
+        return ufmt(_(tr(u"%s present ensemble")), `self.elem`)
+
+    def default(self, valeur, elem):
+        return valeur
+
+    def verif_item(self, valeur):
+        return 1
+
+    def convert(self, valeur):
+        elem = list(self.elem)
+        for val in valeur:
+            v = self.adapt(val)
+            if v in elem: elem.remove(v)
+        if ( len(elem) == 0 ): return valeur
+        if len(elem) != len(list(self.elem)) :
+            raise ValError( ufmt(_(tr(u"%s ne contient pas les elements devant etre presents ensemble: %s ")), valeur, elem))
+        return valeur
+
+    def has_into(self):
+        return 1
+
+    def verif(self, valeur):
+        if not is_sequence(valeur):
+            liste = list(valeur)
+        else:
+            liste = valeur
+        compte = 0
+        for val in self.elem:
+            if val in liste: compte += 1
+        if ( compte == 0 ): return 1
+        if ( compte != len( list(self.elem) ) ): return 0
+        return 1
+
+    def info_erreur_item(self):
+        return _(u"La valeur n'est pas dans la liste des choix possibles")
+
+
+class Absent(ListVal):
     """
         Validateur operationnel
-        Verification d'absence de doublons dans la liste.
+        si un des éléments est présent non valide
     """
+    registry = {}
 
+    def __init__(self, elem=()):
+        if not is_sequence(elem):
+            elem = (elem,)
+        Valid.__init__(self, elem=elem)
+        self.elem = elem
+        self.cata_info = ""
+
+    def info(self):
+        return ufmt(_(tr(u"%s absent")), `self.elem`)
+
+    def default(self, valeur, elem):
+        return valeur
+
+    def verif_item(self, valeur):
+        return 1
+
+    def convert(self, valeur):
+        elem = list(self.elem)
+        for val in valeur:
+            v = self.adapt(val)
+            if v in elem:
+                raise ValError( ufmt(_(tr(u"%s n'est pas autorise : %s ")), v, elem))
+        return valeur
+
+    def has_into(self):
+        return 1
+
+    def verif(self, valeur):
+        if not is_sequence(valeur):
+            liste = list(valeur)
+        else:
+            liste = valeur
+        for val in self.elem:
+            if val in liste: return 0
+        return 1
+
+    def info_erreur_item(self):
+        return _(u"La valeur n'est pas dans la liste des choix possibles")
+
+
+class NoRepeat(ListVal):
+    """
+        Validateur operationnel
+        Verification d'absence de doublons dans la liste.
+    """
     def __init__(self):
         Valid.__init__(self)
         self.cata_info = ""
 
     def info(self):
-        return _(u": pas de présence de doublon dans la liste")
+        return _(u"Pas de doublon dans la liste")
 
     def info_erreur_liste(self):
         return _(u"Les doublons ne sont pas permis")
 
     def default(self, valeur):
         if valeur in self.liste:
-            raise ValError(ufmt(_(u"%s est un doublon"), valeur))
+            raise ValError(ufmt(_(tr(u"%s est un doublon")), valeur))
         return valeur
 
     def convert(self, valeur):
@@ -635,10 +735,10 @@ class LongStr(ListVal):
         self.cata_info = ""
 
     def info(self):
-        return ufmt(_(u"longueur de la chaine entre %s et %s"), self.low, self.high)
+        return ufmt(_(tr(u"longueur de la chaine entre %s et %s")), self.low, self.high)
 
     def info_erreur_item(self):
-        return _(u"Longueur de la chaine incorrecte")
+        return _(tr(u"Longueur de la chaine incorrecte"))
 
     def convert(self, valeur):
         for val in valeur:
@@ -654,13 +754,13 @@ class LongStr(ListVal):
 
     def default(self, valeur, low, high):
         if not is_str(valeur):
-            raise ValError(ufmt(_(u"%s n'est pas une chaine"), repr(valeur)))
+            raise ValError(ufmt(_(tr(u"%s n'est pas une chaine")), repr(valeur)))
         if valeur[0] == "'" and valeur[-1] == "'":
             low = low + 2
             high = high + 2
         if len(valeur) < low or len(valeur) > high:
             raise ValError(
-                ufmt(_(u"%s n'est pas de la bonne longueur"), repr(valeur)))
+                ufmt(_(tr(u"%s n'est pas de la bonne longueur")), repr(valeur)))
         return valeur
 
 
@@ -695,7 +795,7 @@ class OnlyStr(ListVal):
 
     def default(self, valeur):
         if not is_str(valeur):
-            raise ValError(ufmt(_(u"%s n'est pas une chaine"), repr(valeur)))
+            raise ValError(ufmt(_(tr(u"%s n'est pas une chaine")), repr(valeur)))
         return valeur
 
 
@@ -712,10 +812,10 @@ class OrdList(ListVal):
         self.cata_info = ""
 
     def info(self):
-        return ufmt(_(u"liste %s"), self.ord)
+        return ufmt(_(tr(u"liste %s")), self.ord)
 
     def info_erreur_liste(self):
-        return ufmt(_(u"La liste doit etre en ordre %s"), self.ord)
+        return ufmt(_(tr(u"La liste doit etre en ordre %s")), self.ord)
 
     def convert(self, valeur):
         self.val = None
@@ -728,11 +828,11 @@ class OrdList(ListVal):
         if self.ord == 'croissant':
             if self.val is not None and valeur < self.val:
                 raise ValError(
-                    ufmt(_(u"%s n'est pas par valeurs croissantes"), repr(self.liste)))
+                    ufmt(_(tr(u"%s n'est pas par valeurs croissantes")), repr(self.liste)))
         elif self.ord == 'decroissant':
             if self.val is not None and valeur > self.val:
                 raise ValError(
-                    ufmt(_(u"%s n'est pas par valeurs decroissantes"), repr(self.liste)))
+                    ufmt(_(tr(u"%s n'est pas par valeurs decroissantes")), repr(self.liste)))
         self.val = valeur
         return valeur
 
@@ -790,7 +890,7 @@ class OrVal(Valid):
                 return validator.convert(valeur)
             except:
                 pass
-        raise ValError(ufmt(_(u"%s n'est pas du bon type"), repr(valeur)))
+        raise ValError(ufmt(_(tr(u"%s n'est pas du bon type")), repr(valeur)))
 
     def info_erreur_item(self):
         l = []
@@ -937,6 +1037,7 @@ class AndVal(Valid):
         return chaine
 
     def info_erreur_liste(self):
+        chaine=""
         a = 1
         for v in self.validators:
             if v.info_erreur_liste() != " ":
@@ -1079,22 +1180,22 @@ class RangeVal(ListVal):
     def __init__(self, low, high):
         self.low = low
         self.high = high
-        self.cata_info = ufmt(_(u"%s doit être inférieur a %s"), low, high)
+        self.cata_info = ufmt(_(tr(u"%s doit etre inferieur a %s")), low, high)
 
     def info(self):
-        return ufmt(_(u"valeur dans l'intervalle %s , %s"), self.low, self.high)
+        return ufmt(_(tr(u"valeur dans l'intervalle %s , %s")), self.low, self.high)
 
     def convert_item(self, valeur):
         if valeur > self.low and valeur < self.high:
             return valeur
-        raise ValError(ufmt(_(u"%s devrait être comprise entre %s et %s"),
+        raise ValError(ufmt(_(tr(u"%s devrait etre comprise entre %s et %s")),
                             valeur, self.low, self.high))
 
     def verif_item(self, valeur):
         return valeur > self.low and valeur < self.high
 
     def info_erreur_item(self):
-        return ufmt(_(u"La valeur doit etre comprise entre %s et %s"), self.low, self.high)
+        return ufmt(_(tr(u"La valeur doit etre comprise entre %s et %s")), self.low, self.high)
 
     def verif_cata(self):
         if self.low > self.high:
@@ -1115,14 +1216,14 @@ class CardVal(Valid):
     def __init__(self, min='**', max='**'):
         self.min = min
         self.max = max
-        self.cata_info = ufmt(_(u"%s doit etre inferieur a %s"), min, max)
+        self.cata_info = ufmt(_(tr(u"%s doit etre inferieur a %s")), min, max)
 
     def info(self):
-        return ufmt(_(u"longueur de liste comprise entre  %s et %s"), self.min, self.max)
+        return ufmt(_(tr(u"longueur de liste comprise entre  %s et %s")), self.min, self.max)
 
     def info_erreur_liste(self):
         return ufmt(
-            _(u"Le cardinal de la liste doit etre compris entre %s et %s"),
+            _(tr(u"Le cardinal de la liste doit etre compris entre %s et %s")),
             self.min, self.max)
 
     def is_list(self):
@@ -1149,10 +1250,10 @@ class CardVal(Valid):
             l = 1
         if self.max != '**' and l > self.max:
             raise ValError(
-                ufmt(_(u"%s devrait etre de longueur inferieure a %s"), valeur, self.max))
+                ufmt(_(tr(u"%s devrait etre de longueur inferieure a %s")), valeur, self.max))
         if self.min != '**' and l < self.min:
             raise ValError(
-                ufmt(_(u"%s devrait etre de longueur superieure a %s"), valeur, self.min))
+                ufmt(_(tr(u"%s devrait etre de longueur superieure a %s")), valeur, self.min))
         return valeur
 
     def verif_item(self, valeur):
@@ -1209,7 +1310,7 @@ class PairVal(ListVal):
             v = self.adapt(val)
             if v % 2 != 0:
                 raise ValError(
-                    ufmt(_(u"%s contient des valeurs non paires"), repr(valeur)))
+                    ufmt(_(tr(u"%s contient des valeurs non paires")), repr(valeur)))
         return valeur
 
     def default(self, valeur):
@@ -1253,7 +1354,7 @@ class EnumVal(ListVal):
         if valeur in self.into:
             return valeur
         raise ValError(
-            ufmt(_(u"%s contient des valeurs hors des choix possibles: %s "),
+            ufmt(_(tr(u"%s contient des valeurs hors des choix possibles: %s ")),
                  valeur, self.into))
 
     def verif_item(self, valeur):
@@ -1311,7 +1412,7 @@ class F1Val(Valid):
         self.cata_info = ""
 
     def info(self):
-        return ufmt(_(u"valeur %s pour la somme des cles A et B "), self.somme)
+        return ufmt(_(tr(u"valeur %s pour la somme des cles A et B ")), self.somme)
 
     def verif(self, valeur):
         if is_sequence(valeur):
@@ -1349,6 +1450,12 @@ class FunctionVal(Valid):
     def verif(self, valeur):
         return self.function(valeur)
 
+    def verif_item(self, valeur):
+        return self.function(valeur)
+
+    def convert(self, valeur):
+        return valeur
+
 # MC ca ne devrait plus servir !
 CoercableFuncs = {types.IntType:     int,
                   types.LongType:    long,
@@ -1380,7 +1487,7 @@ class TypeVal(ListVal):
             self.coerce = self.identity
 
     def info(self):
-        return ufmt(_(u"valeur de %s"), self.aType)
+        return ufmt(_(tr(u"valeur de %s")), self.aType)
 
     def identity(self, value):
         if type(value) == self.aType:
@@ -1428,7 +1535,7 @@ class InstanceVal(ListVal):
         self.aClass = aClass
 
     def info(self):
-        return ufmt(_(u"valeur d'instance de %s"), self.aClass.__name__)
+        return ufmt(_(tr(u"valeur d'instance de %s")), self.aClass.__name__)
 
     def verif_item(self, valeur):
         if not isinstance(valeur, self.aClass):
@@ -1444,10 +1551,10 @@ class VerifTypeTuple(Valid, ListVal):
         self.cata_info = ""
 
     def info(self):
-        return _(u": vérifie les types dans un tuple")
+        return _(tr(": verifie les types dans un tuple"))
 
     def info_erreur_liste(self):
-        return _(u"Les types entrés ne sont pas permis")
+        return _(tr("Les types entres ne sont pas permis"))
 
     def default(self, valeur):
         # if valeur in self.liste : raise ValError("%s est un doublon" %
@@ -1460,12 +1567,12 @@ class VerifTypeTuple(Valid, ListVal):
     def convert_item(self, valeur):
         if len(valeur) != len(self.typeDesTuples):
             raise ValError(
-                ufmt(_(u"%s devrait etre de type  %s "), valeur, self.typeDesTuples))
+                ufmt(_(tr(u"%s devrait etre de type  %s ")), valeur, self.typeDesTuples))
         for i in range(len(valeur)):
             ok = self.verifType(valeur[i], self.typeDesTuples[i])
             if ok != 1:
                 raise ValError(
-                    ufmt(_(u"%s devrait etre de type  %s "), valeur, self.typeDesTuples))
+                    ufmt(_(tr(u"%s devrait etre de type  %s ")), valeur, self.typeDesTuples))
         return valeur
 
     def verif_item(self, valeur):
@@ -1493,6 +1600,8 @@ class VerifTypeTuple(Valid, ListVal):
         elif type_permis == 'TXM':
             if type(valeur) == types.StringType:
                 return 1
+        elif isinstance(valeur, type_permis):
+                return 1
         return 0
 
     def verif(self, valeur):
@@ -1558,7 +1667,7 @@ class VerifExiste(ListVal):
         if valeur in self.listeDesFreres:
             return valeur
         raise ValError(
-            ufmt(_(u"%s n'est pas dans %s"), valeur, self.listeDesFreres))
+            ufmt(_(tr(u"%s n'est pas dans %s")), valeur, self.listeDesFreres))
 
 
 class RegExpVal(ListVal):
@@ -1600,7 +1709,55 @@ class FileExtVal(RegExpVal):
         self.ext = ext
         self.errormsg = u'"%%(value)s" n\'est pas un nom de fichier %(ext)s valide' % {
             "ext": ext}
-        RegExpVal.__init__(self, "^[\w\-]+\.%s$" % self.ext)
+        #RegExpVal.__init__(self, "^[\w\-]+\.%s$" % self.ext)
+        #PNPN Modif pour Adao
+        #RegExpVal.__init__(self, "^[\S]+\.%s$" % self.ext
+        RegExpVal.__init__(self, "^\S+\.%s$" % self.ext)
+
 
     def info(self):
         return u'Un nom de fichier se terminant par ".%s" est attendu.' % self.ext
+
+class CreeMotClef:
+    def __init__(self,MotClef ):
+        self.MotClef=MotClef
+        self.MCSimp=None
+         
+    def convert(self, lval):
+        print "dans convert"
+        try : valeur=lval[0]
+        except  : return lval
+
+        parent= self.MCSimp.parent
+        if hasattr(parent, 'inhibeValidator') and parent.inhibeValidator: return lval
+
+
+        if parent.get_child(self.MotClef) == None : longueur=0
+        else : longueur=len(parent.get_child(self.MotClef))
+
+        pos=parent.get_index_child(self.MCSimp.nom)+1
+        while longueur < valeur : 
+           parent.inhibeValidator=1
+           parent.addentite(self.MotClef,pos)
+           pos=pos+1
+           parent.inhibeValidator=0
+           longueur=len(parent.get_child(self.MotClef))
+
+        if longueur > valeur : 
+           parent.inhibeValide=1
+           parentObj=parent.get_child(self.MotClef)
+           obj=parent.get_child(self.MotClef)[-1]
+           parentObj.suppentite(obj)
+           longueur=len(parent.get_child(self.MotClef))
+           parent.inhibeValide=0
+        return lval
+
+    def info(self):
+        return "Cree le bon nombre de Mot %s"  % self.MotClef
+
+    def verif_item(self, valeur):
+        return 1
+
+    def set_MCSimp(self, MCSimp):
+        #print "dans set_MCSimp"
+        self.MCSimp=MCSimp