]> SALOME platform Git repositories - tools/eficas.git/blobdiff - Noyau/N_VALIDATOR.py
Salome HOME
gestion des listes et label sur 2
[tools/eficas.git] / Noyau / N_VALIDATOR.py
index 741887a87eff9dc61d6569fe979f1ce1ffb137e6..7114615f810802a389d8f471de4f1c3bafe33cd5 100644 (file)
@@ -1,21 +1,21 @@
 # coding=utf-8
-# Copyright (C) 2007-2013   EDF R&D
+# 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.
 #
-# 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 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.
 #
-# 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
-#
-# 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.
+# ======================================================================
 
 """
    Ce module contient toutes les classes necessaires pour
@@ -28,12 +28,6 @@ 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
 
-try :
-  from Extensions.i18n import tr
-except :
-  def tr(txt):
-    return txt
-
 
 class ValError(Exception):
     pass
@@ -162,21 +156,21 @@ class TypeProtocol(PProtocol):
                     return obj
                 else:
                     raise ValError(
-                        ufmt(_(tr(u"%s n'est pas un fichier valide")), repr(obj)))
+                        ufmt(_(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(_(tr(u"%s n'est pas un fichier valide")), repr(obj)))
+                        ufmt(_(u"%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(_(tr(u"%s n'est pas un répertoire valide")), repr(obj)))
+                        ufmt(_(u"%s n'est pas un répertoire valide"), repr(obj)))
             elif type(type_permis) == types.ClassType or isinstance(type_permis, type):
                 try:
                     if self.is_object_from(obj, type_permis):
@@ -252,7 +246,7 @@ class CardProtocol(PProtocol):
         if length < min or length > max:
             raise ValError(
                 ufmt(
-                    _(tr(u"Nombre d'arguments de %s incorrect (min = %s, max = %s)")),
+                    _(u"Nombre d'arguments de %s incorrect (min = %s, max = %s)"),
                     repr(obj), min, max))
         return obj
 
@@ -274,7 +268,7 @@ class IntoProtocol(PProtocol):
             if obj not in into:
                 raise ValError(
                     ufmt(
-                        _tr((u"La valeur : %s  ne fait pas partie des choix possibles %s")),
+                        _(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
@@ -287,7 +281,7 @@ class IntoProtocol(PProtocol):
                 if obj < val_min or obj > val_max:
                     raise ValError(
                         ufmt(
-                            _(tr(u"La valeur : %s est en dehors du domaine de validité [ %s , %s ]")),
+                            _(u"La valeur : %s est en dehors du domaine de validité [ %s , %s ]"),
                             repr(obj), self.val_min, self.val_max))
         return obj
 
@@ -306,7 +300,7 @@ class MinStr:
             return valeur
         raise ValError(
             ufmt(
-                _tr((u"%s n'est pas une chaine de longueur comprise entre %s et %s")),
+                _(u"%s n'est pas une chaine de longueur comprise entre %s et %s"),
                 valeur, self.min, self.max))
 
     def __repr__(self):
@@ -514,7 +508,6 @@ class ListVal(Valid):
 
 
 class Compulsory(ListVal):
-
     """
         Validateur operationnel
         Verification de la présence obligatoire d'un élément dans une liste
@@ -545,7 +538,7 @@ class Compulsory(ListVal):
                 elem.remove(v)
         if elem:
             raise ValError(
-                ufmt(_tr((u"%s ne contient pas les elements obligatoires : %s ")),
+                ufmt(_(u"%s ne contient pas les elements obligatoires : %s "),
                      valeur, elem))
         return valeur
 
@@ -566,26 +559,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(_(u"%s présent 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(_(u"%s ne contient pas les éléments devant être présent 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(_(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(_(u"%s n'est pas autorisé : %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 _(tr(u": pas de présence de doublon dans la liste"))
+        return _(u": pas de présence de doublon dans la liste")
 
     def info_erreur_liste(self):
-        return _(tr(u"Les doublons ne sont pas permis"))
+        return _(u"Les doublons ne sont pas permis")
 
     def default(self, valeur):
         if valeur in self.liste:
-            raise ValError(ufmt(_tr((u"%s est un doublon")), valeur))
+            raise ValError(ufmt(_(u"%s est un doublon"), valeur))
         return valeur
 
     def convert(self, valeur):
@@ -660,13 +750,13 @@ class LongStr(ListVal):
 
     def default(self, valeur, low, high):
         if not is_str(valeur):
-            raise ValError(ufmt(_tr((u"%s n'est pas une chaine")), repr(valeur)))
+            raise ValError(ufmt(_(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(_(tr(u"%s n'est pas de la bonne longueur")), repr(valeur)))
+                ufmt(_(u"%s n'est pas de la bonne longueur"), repr(valeur)))
         return valeur
 
 
@@ -701,7 +791,7 @@ class OnlyStr(ListVal):
 
     def default(self, valeur):
         if not is_str(valeur):
-            raise ValError(ufmt(_tr((u"%s n'est pas une chaine")), repr(valeur)))
+            raise ValError(ufmt(_(u"%s n'est pas une chaine"), repr(valeur)))
         return valeur
 
 
@@ -734,11 +824,11 @@ class OrdList(ListVal):
         if self.ord == 'croissant':
             if self.val is not None and valeur < self.val:
                 raise ValError(
-                    ufmt(_tr((u"%s n'est pas par valeurs croissantes")), repr(self.liste)))
+                    ufmt(_(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(_tr((u"%s n'est pas par valeurs decroissantes")), repr(self.liste)))
+                    ufmt(_(u"%s n'est pas par valeurs decroissantes"), repr(self.liste)))
         self.val = valeur
         return valeur
 
@@ -796,7 +886,7 @@ class OrVal(Valid):
                 return validator.convert(valeur)
             except:
                 pass
-        raise ValError(ufmt(_tr((u"%s n'est pas du bon type")), repr(valeur)))
+        raise ValError(ufmt(_(u"%s n'est pas du bon type"), repr(valeur)))
 
     def info_erreur_item(self):
         l = []
@@ -944,6 +1034,7 @@ class AndVal(Valid):
 
     def info_erreur_liste(self):
         a = 1
+        chaine=""
         for v in self.validators:
             if v.info_erreur_liste() != " ":
                 if a == 1:
@@ -1085,22 +1176,22 @@ class RangeVal(ListVal):
     def __init__(self, low, high):
         self.low = low
         self.high = high
-        self.cata_info = ufmt(_(tr(u"%s doit être inférieur a %s")), low, high)
+        self.cata_info = ufmt(_(u"%s doit être inférieur a %s"), low, high)
 
     def info(self):
-        return ufmt(_(tr(u"valeur dans l'intervalle %s , %s")), self.low, self.high)
+        return ufmt(_(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(_(tr(u"%s devrait être comprise entre %s et %s")),
+        raise ValError(ufmt(_(u"%s devrait être 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(_(tr(u"La valeur doit etre comprise entre %s et %s")), self.low, self.high)
+        return ufmt(_(u"La valeur doit etre comprise entre %s et %s"), self.low, self.high)
 
     def verif_cata(self):
         if self.low > self.high:
@@ -1121,14 +1212,14 @@ class CardVal(Valid):
     def __init__(self, min='**', max='**'):
         self.min = min
         self.max = max
-        self.cata_info = ufmt(_(tr(u"%s doit etre inferieur a %s")), min, max)
+        self.cata_info = ufmt(_(u"%s doit etre inferieur a %s"), min, max)
 
     def info(self):
-        return ufmt(_(tr(u"longueur de liste comprise entre  %s et %s")), self.min, self.max)
+        return ufmt(_(u"longueur de liste comprise entre  %s et %s"), self.min, self.max)
 
     def info_erreur_liste(self):
         return ufmt(
-            _(tr(u"Le cardinal de la liste doit etre compris entre %s et %s")),
+            _(u"Le cardinal de la liste doit etre compris entre %s et %s"),
             self.min, self.max)
 
     def is_list(self):
@@ -1155,10 +1246,10 @@ class CardVal(Valid):
             l = 1
         if self.max != '**' and l > self.max:
             raise ValError(
-                ufmt(_(tr(u"%s devrait etre de longueur inferieure a %s")), valeur, self.max))
+                ufmt(_(u"%s devrait etre de longueur inferieure a %s"), valeur, self.max))
         if self.min != '**' and l < self.min:
             raise ValError(
-                ufmt(_(tr(u"%s devrait etre de longueur superieure a %s")), valeur, self.min))
+                ufmt(_(u"%s devrait etre de longueur superieure a %s"), valeur, self.min))
         return valeur
 
     def verif_item(self, valeur):
@@ -1208,14 +1299,14 @@ class PairVal(ListVal):
         return _(u"valeur paire")
 
     def info_erreur_item(self):
-        return _(tr(u"La valeur saisie doit etre paire"))
+        return _(u"La valeur saisie doit etre paire")
 
     def convert(self, valeur):
         for val in valeur:
             v = self.adapt(val)
             if v % 2 != 0:
                 raise ValError(
-                    ufmt(_(tr(u"%s contient des valeurs non paires")), repr(valeur)))
+                    ufmt(_(u"%s contient des valeurs non paires"), repr(valeur)))
         return valeur
 
     def default(self, valeur):
@@ -1259,7 +1350,7 @@ class EnumVal(ListVal):
         if valeur in self.into:
             return valeur
         raise ValError(
-            ufmt(_(tr(u"%s contient des valeurs hors des choix possibles: %s ")),
+            ufmt(_(u"%s contient des valeurs hors des choix possibles: %s "),
                  valeur, self.into))
 
     def verif_item(self, valeur):
@@ -1281,7 +1372,7 @@ class EnumVal(ListVal):
         return liste_choix
 
     def info_erreur_item(self):
-        return _(tr(u"La valeur n'est pas dans la liste des choix possibles"))
+        return _(u"La valeur n'est pas dans la liste des choix possibles")
 
 
 def ImpairVal(valeur):
@@ -1300,7 +1391,7 @@ def ImpairVal(valeur):
             return 0
         return 1
 
-ImpairVal.info = tr("valeur impaire")
+ImpairVal.info = "valeur impaire"
 
 
 class F1Val(Valid):
@@ -1355,6 +1446,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,
@@ -1450,12 +1547,14 @@ class VerifTypeTuple(Valid, ListVal):
         self.cata_info = ""
 
     def info(self):
-        return _(u"tuple de la forme :")+str(self.typeDesTuples)
+        return _(u": vérifie les types dans un tuple")
 
     def info_erreur_liste(self):
-        return _(u"Les types ne sont pas : ") +str(self.typeDesTuples)
+        return _(u"Les types entrés ne sont pas permis")
 
     def default(self, valeur):
+        # if valeur in self.liste : raise ValError("%s est un doublon" %
+        # valeur)
         return valeur
 
     def is_list(self):
@@ -1604,7 +1703,11 @@ 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