From 813b8cbe1ae45b097262dd17935a6009745fe994 Mon Sep 17 00:00:00 2001 From: eficas <> Date: Mon, 6 Oct 2003 08:18:43 +0000 Subject: [PATCH] CCAR: introduction de methodes complementaires pour les validateurs dans Ihm/I_VALIDATOR.py et leur appel depuis composimp.py --- Accas/__init__.py | 12 ++++++- Editeur/composimp.py | 74 ++++++++++++++++++++++++++++++++++++++++++ Editeur/widgets.py | 7 +++- Ihm/I_JDC.py | 4 +++ Ihm/I_MCSIMP.py | 3 -- Noyau/N_BLOC.py | 6 ---- Validation/V_MCSIMP.py | 6 +++- 7 files changed, 100 insertions(+), 12 deletions(-) diff --git a/Accas/__init__.py b/Accas/__init__.py index c59ec20c..1d96b19b 100644 --- a/Accas/__init__.py +++ b/Accas/__init__.py @@ -70,7 +70,17 @@ from Noyau.N__F import _F 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 diff --git a/Editeur/composimp.py b/Editeur/composimp.py index 45f404c1..6fb84f36 100644 --- a/Editeur/composimp.py +++ b/Editeur/composimp.py @@ -1307,6 +1307,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): 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 @@ -1375,6 +1376,79 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): 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 diff --git a/Editeur/widgets.py b/Editeur/widgets.py index 1d648f27..e33547a1 100644 --- a/Editeur/widgets.py +++ b/Editeur/widgets.py @@ -35,6 +35,7 @@ from utils import save_in_file 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 @@ -641,7 +642,11 @@ class ListeChoix : 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 diff --git a/Ihm/I_JDC.py b/Ihm/I_JDC.py index 62d82bdf..8768ec59 100644 --- a/Ihm/I_JDC.py +++ b/Ihm/I_JDC.py @@ -171,6 +171,10 @@ class JDC(I_OBJECT.OBJECT): 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() diff --git a/Ihm/I_MCSIMP.py b/Ihm/I_MCSIMP.py index d190284e..7baeb142 100644 --- a/Ihm/I_MCSIMP.py +++ b/Ihm/I_MCSIMP.py @@ -114,9 +114,6 @@ class MCSIMP(I_OBJECT.OBJECT): 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 diff --git a/Noyau/N_BLOC.py b/Noyau/N_BLOC.py index 4a3beac1..0f8a2b60 100644 --- a/Noyau/N_BLOC.py +++ b/Noyau/N_BLOC.py @@ -132,12 +132,6 @@ class BLOC(N_ENTITE.ENTITE): 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, diff --git a/Validation/V_MCSIMP.py b/Validation/V_MCSIMP.py index d3bf23b7..04f8e9e2 100644 --- a/Validation/V_MCSIMP.py +++ b/Validation/V_MCSIMP.py @@ -84,7 +84,11 @@ class MCSIMP: 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) # -- 2.39.2