+ """
+ Exemple de validateur
+ Cette classe est un validateur qui controle qu'une valeur est
+ bien une instance (au sens Python) d'une classe
+ Pour une liste on verifie chaque element de la liste
+ """
+
+ def __init__(self, aClass):
+ # Si aClass est une classe on la memorise dans self.aClass
+ # sinon c'est une instance dont on memorise la classe
+ if type(aClass) == types.InstanceType:
+ # instance ancienne mode
+ aClass = aClass.__class__
+ elif type(aClass) == type:
+ # classe ancienne mode
+ aClass = aClass
+ elif type(aClass) == type:
+ # classe nouvelle mode
+ aClass = aClass
+ elif isinstance(aClass, object):
+ # instance nouvelle mode
+ aClass = type(aClass)
+ else:
+ raise ValError(tr("type non supporté"))
+
+ self.aClass = aClass
+
+ def info(self):
+ return (tr("valeur d'instance de %s") % self.aClass.__name__)
+
+ def verif_item(self, valeur):
+ if not isinstance(valeur, self.aClass):
+ return 0
+ return 1
+
+
+class VerifTypeTuple(ListVal):
+
+ def __init__(self, typeDesTuples):
+ self.typeDesTuples = typeDesTuples
+ Valid.__init__(self)
+ self.cata_info = ""
+
+ def info(self):
+ return tr(": verifie les types dans un tuple")
+
+ def info_erreur_liste(self):
+ return tr("Les types entres ne sont pas permis")
+
+ def default(self, valeur):
+ return valeur
+
+ def is_list(self):
+ return 1
+
+ def convert_item(self, valeur):
+ if len(valeur) != len(self.typeDesTuples):
+ raise ValError(
+ tr("%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(
+ tr("%s devrait etre de type %s ") % (valeur, self.typeDesTuples))
+ return valeur
+
+ def verif_item(self, valeur):
+ try:
+ if len(valeur) != len(self.typeDesTuples):
+ return 0
+ for i in range(len(valeur)):
+ ok = self.verifType(valeur[i], self.typeDesTuples[i])
+ if ok != 1:
+ return 0
+ except:
+ return 0
+ return 1
+
+ def verifType(self, valeur, type_permis):
+ if type_permis == 'R':
+ if type(valeur) in (int, float, int):
+ return 1
+ elif type_permis == 'I':
+ if type(valeur) in (int, int):
+ return 1
+ elif type_permis == 'C':
+ if self.is_complexe(valeur):
+ return 1
+ elif type_permis == 'TXM':
+ if type(valeur) == bytes:
+ return 1
+ elif isinstance(valeur, type_permis):
+ return 1
+ return 0
+
+ def verif(self, valeur):
+ if type(valeur) in (list, tuple):
+ liste = list(valeur)
+ for val in liste:
+ if self.verif_item(val) != 1:
+ return 0
+ return 1
+
+
+class VerifExiste(ListVal):
+
+ """
+ fonctionne avec into
+ Met une liste à jour selon les mot clefs existant
+ exemple si into = ("A","B","C")
+ si au niveau N du JDC les objets "A" et "C" existe
+ alors la liste des into deviendra ( "A","C")
+
+ niveauVerif est le niveau du JDC dans lequel va s effectuer la verification
+ niveauVerif est defini par rapport au Noeud :
+ exemple niveauVerif = 1 : on verifie les freres
+ niveauVerif = 2 : on verifie les oncles..
+ """
+
+ def __init__(self, niveauVerif):
+ ListVal.__init__(self)
+ self.niveauVerif = niveauVerif
+ self.MCSimp = None
+ self.listeDesFreres = ()
+ self.fonctions = ('verifie_liste', 'set_MCSimp')
+
+ def is_list(self):
+ return 1
+
+ def verifie_liste(self, liste):
+ self.set_MCSimp(self.MCSimp)
+ for item in liste:
+ if not(item in self.listeDesFreres):
+ return 0
+ return 1
+
+ def verif_item(self, valeur):
+ self.set_MCSimp(self.MCSimp)
+ if valeur in self.listeDesFreres:
+ return 1
+ return 0
+
+ def set_MCSimp(self, MCSimp):
+ self.MCSimp = MCSimp
+ k = self.niveauVerif
+ mc = MCSimp
+ while (k != 0):
+ parent = mc.parent
+ mc = parent
+ k = k - 1
+ # on met la liste à jour
+ parent.forceRecalcul = self.niveauVerif
+ self.listeDesFreres = parent.liste_mc_presents()
+
+ def convert_item(self, valeur):
+ if valeur in self.listeDesFreres:
+ return valeur
+ raise ValError(
+ tr("%s n'est pas dans %s") % (valeur, self.listeDesFreres))
+
+
+class RegExpVal(ListVal):
+
+ """
+ Vérifie qu'une chaîne de caractère corresponde à l'expression régulière 'pattern'
+ """
+
+ errormsg = 'La chaîne "%(value)s" ne correspond pas au motif "%(pattern)s"'
+
+ def __init__(self, pattern):
+ self.pattern = pattern
+ self.compiled_regexp = re.compile(pattern)
+
+ def info(self):
+ return tr('Une chaîne correspondant au motif ') + str(self.pattern) + tr(" est attendue")
+
+ def info_erreur_item(self):
+ return tr('Une chaîne correspondant au motif ') + str(self.pattern) + tr(" est attendue")
+
+ def verif_item(self, valeur):
+ if self.compiled_regexp.match(valeur):
+ return 1
+ else:
+ return (0, self.errormsg % {"value": valeur, "pattern": self.pattern})
+
+ def convert_item(self, valeur):
+ if self.compiled_regexp.match(valeur):
+ return valeur
+ else:
+ raise ValError(self.errormsg %
+ {"value": valeur, "pattern": self.pattern})
+
+
+class FileExtVal(RegExpVal):
+
+ """
+ Vérifie qu'une chaîne de caractère soit un nom de fichier valide avec l'extension 'ext'
+ """
+
+ def __init__(self, ext):
+ self.ext = ext
+ self.errormsg = '"%%(value)s" n\'est pas un nom de fichier %(ext)s valide' % {
+ "ext": ext}
+ #PNPN Modif pour Adao
+ RegExpVal.__init__(self, "^\S+\.%s$" % self.ext)
+
+
+ def info(self):
+ return ('Un nom de fichier se terminant par ".%s" est attendu.' % self.ext)
+
+ def info_erreur_item(self):
+ return ('Un nom de fichier se terminant par ".%s" est attendu.' % self.ext)
+
+class CreeMotClef(object):
+ def __init__(self,MotClef ):
+ self.MotClef=MotClef
+ self.MCSimp=None
+
+ def convert(self, lval):
+ 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