Salome HOME
sauve du 20/12
[tools/eficas.git] / Noyau / N_VALIDATOR.py
index b4dd763a9b13230f91bb44f949241ddc81fab0a9..e9493c7dd6d30690227c8bcbf5fd8be7dacefa11 100644 (file)
@@ -1,20 +1,23 @@
 # coding=utf-8
-# person_in_charge: mathieu.courtois at edf.fr
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2015  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.
+# 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
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 #
-# 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.
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
-# 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.
+
 # ======================================================================
 
 """
@@ -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):
@@ -522,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
@@ -538,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
 
@@ -574,7 +578,7 @@ class Together(ListVal):
         self.cata_info = ""
 
     def info(self):
-        return ufmt(_(u"%s présent ensemble"), `self.elem`)
+        return ufmt(_(tr(u"%s present ensemble")), `self.elem`)
 
     def default(self, valeur, elem):
         return valeur
@@ -589,7 +593,7 @@ class Together(ListVal):
             if v in elem: elem.remove(v)
         if ( len(elem) == 0 ): return valeur
         if len(elem) != len(list(self.elem)) :
-            raise ValError( ufmt(_(u"%s ne contient pas les éléments devant être présent ensemble: %s "), valeur, 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):
@@ -626,7 +630,7 @@ class Absent(ListVal):
         self.cata_info = ""
 
     def info(self):
-        return ufmt(_(u"%s absent"), `self.elem`)
+        return ufmt(_(tr(u"%s absent")), `self.elem`)
 
     def default(self, valeur, elem):
         return valeur
@@ -639,7 +643,7 @@ class Absent(ListVal):
         for val in valeur:
             v = self.adapt(val)
             if v in elem:
-                raise ValError( ufmt(_(u"%s n'est pas autorisé : %s "), v, elem))
+                raise ValError( ufmt(_(tr(u"%s n'est pas autorise : %s ")), v, elem))
         return valeur
 
     def has_into(self):
@@ -668,14 +672,14 @@ class NoRepeat(ListVal):
         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):
@@ -731,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:
@@ -750,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
 
 
@@ -791,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
 
 
@@ -808,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
@@ -824,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
 
@@ -886,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 = []
@@ -1033,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() != " ":
@@ -1175,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:
@@ -1211,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):
@@ -1245,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):
@@ -1305,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):
@@ -1349,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):
@@ -1407,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):
@@ -1482,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:
@@ -1530,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):
@@ -1546,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" %
@@ -1562,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):
@@ -1595,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):
@@ -1660,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):
@@ -1702,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