from Noyau.N_Exception import AsException
from Noyau.N_utils import AsType
-from Noyau.N_VALIDATOR import Valid,RangeVal,OrdList,NoRepeat,LongStr,EnumVal,CardVal,TypeVal,InstanceVal,OrVal,AndVal
+#from Noyau.N_VALIDATOR import Valid,RangeVal,OrdList,NoRepeat,LongStr,EnumVal,CardVal,TypeVal,InstanceVal,OrVal,AndVal
+from A_VALIDATOR import OrdList,NoRepeat,LongStr,OrVal,AndVal
+from A_VALIDATOR import RangeVal, EnumVal, TypeVal, PairVal
+from A_VALIDATOR import CardVal, InstanceVal
+
+# On remplace la factory des validateurs initialement dans Noyau par celle
+# de A_VALIDATOR
+import A_VALIDATOR
+import Noyau.N_ENTITE
+Noyau.N_ENTITE.ENTITE.factories['validator']=A_VALIDATOR.validatorFactory
+
from Extensions.niveau import NIVEAU
from Extensions.etape_niveau import ETAPE_NIVEAU
Cette méthode attribue le panel à l'objet pointé par self en fonction de la
nature de la valeur demandée pour cet objet
"""
+ print "affect_panel : ",self.nom,self.is_list(),self.has_into(), self.get_into(None)
if self.wait_shell():
# l'objet attend un shell
self.panel = SHELLPanel
text= self.object.GetText()
return text
+ def has_into(self):
+ """
+ Cette méthode indique si le mot cle simple propose un choix (valeur de retour 1)
+ ou s'il n'en propose pas (valeur de retour 0)
+
+ Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
+ Dans le cas sans validateur, l'information est donnée par l'attribut into
+ de la definition du mot cle.
+ Dans le cas avec validateur, il faut combiner l'information précédente avec
+ celle issue de l'appel de la méthode has_into sur le validateur. On utilisera
+ l'operateur ET pour effectuer cette combinaison (AndVal).
+ """
+ if not self.object.definition.validators:
+ if self.definition.into:
+ return 1
+ else:
+ return 0
+ else:
+ # Dans le cas avec validateurs, pour que le mot cle soit considéré
+ # comme proposant un choix, il faut que into soit présent OU
+ # que la méthode has_into du validateur retourne 1. Dans les autres cas
+ # on retournera 0 (ne propose pas de choix)
+ if self.definition.into:
+ return 1
+ elif self.object.definition.validators.has_into():
+ return 1
+ else:
+ return 0
+
+ def get_into(self,liste_courante=None):
+ """
+ Cette méthode retourne la liste de choix proposée par le mot cle. Si le mot cle ne propose
+ pas de liste de choix, la méthode retourne None.
+ L'argument d'entrée liste_courante, s'il est différent de None, donne la liste des choix déjà
+ effectués par l'utilisateur. Dans ce cas, la méthode get_into doit calculer la liste des choix
+ en en tenant compte.
+ Cette méthode part du principe que la relation entre into du mot clé et les validateurs est
+ une relation de type ET (AndVal).
+ """
+ if not self.object.definition.validators :
+ return self.object.definition.into
+ else:
+ return self.object.definition.validators.get_into(liste_courante,self.definition.into)
+
+ def is_list(self):
+ """
+ Cette méthode indique si le mot cle simple attend une liste (valeur de retour 1)
+ ou s'il n'en attend pas (valeur de retour 0)
+
+ Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
+ Dans le cas sans validateur, l'information est donnée par l'attribut max
+ de la definition du mot cle.
+ Dans le cas avec validateur, il faut combiner l'information précédente avec
+ celle issue de l'appel de la méthode is_list sur le validateur.On utilisera
+ l'operateur ET pour effectuer cette combinaison (AndVal).
+ """
+ if not self.object.definition.validators:
+ if self.definition.max <= 1:
+ return 0
+ else:
+ return 1
+ else:
+ # Dans le cas avec validateurs, pour que le mot cle soit considéré
+ # comme acceptant une liste, il faut que max soit supérieur a 1
+ # ET que la méthode is_list du validateur retourne 1. Dans les autres cas
+ # on retournera 0 (n'attend pas de liste)
+ if self.definition.max <= 1:
+ return 0
+ elif not self.object.definition.validators.is_list():
+ return 0
+ else:
+ return 1
+
def wait_co(self):
"""
Méthode booléenne qui retourne 1 si l'objet pointé par self
from centerwindow import centerwindow
from Noyau.N_utils import repr_float
+from Accas import AsException
class Fenetre :
""" Cette classe permet de créer une fenêtre Toplevel dans laquelle
def chooseitem(self,mot,label,commande):
""" Active la méthode de choix passée en argument"""
- commande(mot)
+ try:
+ commande(mot)
+ except AsException,e:
+ raison=str(e)
+ showerror(raison.split('\n')[0],raison)
def selectitem(self,mot,label,commande) :
""" Met l'item sélectionné (représenté par son label) en surbrillance
self.reset_context()
self.active_etapes()
return e
+ except AsException,e:
+ self.reset_current_step()
+ self.editmode=0
+ raise AsException("Impossible d ajouter la commande "+name + '\n' +str(e))
except:
traceback.print_exc()
self.reset_current_step()
s=s+' )'
return s
- def get_min_max(self):
- return self.definition.min,self.definition.max
-
def wait_co(self):
"""
Méthode booléenne qui retourne 1 si l'objet attend un objet ASSD
l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
raise AsException("Catalogue entite : ", self.nom,", de pere : ", self.pere.nom,
'\n',"Erreur dans la condition : ", self.condition,string.join(l))
- except TypeError:
- # erreur 'normale' : un mot-clé est en fait un morceau de mot clef : TYPE_CHAM[0:2] par exemple
- if CONTEXT.debug:
- l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
- print "WARNING : Erreur a l'evaluation de la condition "+string.join(l)
- return 0
except:
l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
raise AsException("Catalogue entite : ", self.nom,", de pere : ", self.pere.nom,
if cr == 'oui' :
self.cr.fatal(string.join(("Mot-clé : ",self.nom," obligatoire non valorisé")))
valid = 0
- if v != None :
+ if v is None:
+ valid=0
+ if cr == 'oui' :
+ self.cr.fatal("None n'est pas une valeur autorisée")
+ else:
# type,into ...
valid = self.verif_type(val=v,cr=cr)*self.verif_into(cr=cr)*self.verif_card(cr=cr)
#