X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Noyau%2FN_BLOC.py;h=97ecbdf6c74e22a7afef03293ac484fb4e18bcc1;hb=2c5a8689b9c6cc46804fd268d416d1de2777059e;hp=078ea201da5d6f89a21243abc9acd80527e5f783;hpb=860a50d7df32b5c86f9ab536178d030ea882cae5;p=tools%2Feficas.git diff --git a/Noyau/N_BLOC.py b/Noyau/N_BLOC.py index 078ea201..97ecbdf6 100644 --- a/Noyau/N_BLOC.py +++ b/Noyau/N_BLOC.py @@ -1,27 +1,26 @@ -# -*- coding: utf-8 -*- -#@ MODIF N_BLOC Noyau DATE 29/05/2002 AUTEUR DURAND C.DURAND -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 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. +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2013 EDF R&D # -# 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 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. # -# 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. -# -# -# ====================================================================== -""" +# 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 +# + +""" Ce module contient la classe de definition BLOC - qui permet de spécifier les caractéristiques des blocs de mots clés + qui permet de spécifier les caractéristiques des blocs de mots clés """ import types,string,sys @@ -30,6 +29,8 @@ import traceback import N_ENTITE import N_MCBLOC from N_Exception import AsException +from N_types import force_list +from strfunc import ufmt class BLOC(N_ENTITE.ENTITE): """ @@ -37,11 +38,10 @@ class BLOC(N_ENTITE.ENTITE): Cette classe a deux attributs de classe : - - class_instance qui indique la classe qui devra etre utilisée - pour créer l'objet qui servira à controler la conformité d'un - bloc de mots-clés avec sa définition - - - label qui indique la nature de l'objet de définition (ici, BLOC) + - class_instance qui indique la classe qui devra etre utilisée + pour créer l'objet qui servira à controler la conformité d'un + bloc de mots-clés avec sa définition + - label qui indique la nature de l'objet de définition (ici, BLOC) """ class_instance = N_MCBLOC.MCBLOC @@ -49,23 +49,19 @@ class BLOC(N_ENTITE.ENTITE): def __init__(self,fr="",ang="",docu="",regles=(),statut='f',condition=None, **args): - + """ Un bloc est caractérisé par les attributs suivants : - - fr : chaine de caractere commentaire pour aide en ligne (en francais) - - - ang : chaine de caractere commentaire pour aide en ligne (en anglais) - - - regles : liste d'objets de type REGLE pour vérifier la cohérence des sous-objets - - - statut : obligatoire ('o') ou facultatif ('f') - - - condition : chaine de caractère evaluable par l'interpreteur Python - - - entites : dictionnaire contenant les sous-objets de self (mots-clés). La clé du dictionnaire - est le nom du mot-clé et la valeur l'objet de définition correspondant. Cet attribut - est initialisé avec l'argument args de la méthode __init__ + - fr : chaine de caractere commentaire pour aide en ligne (en francais) + - ang : chaine de caractere commentaire pour aide en ligne (en anglais) + - regles : liste d'objets de type REGLE pour vérifier la cohérence des sous-objets + - statut : obligatoire ('o') ou facultatif ('f') + - condition : chaine de caractère evaluable par l'interpreteur Python + - entites : dictionnaire contenant les sous-objets de self (mots-clés). + La clé du dictionnaire est le nom du mot-clé et la valeur l'objet de + définition correspondant. Cet attribut est initialisé avec l'argument + args de la méthode __init__ """ # Initialisation des attributs @@ -93,36 +89,29 @@ class BLOC(N_ENTITE.ENTITE): Cette méthode vérifie si les attributs de définition sont valides. Les éventuels messages d'erreur sont écrits dans l'objet compte-rendu (self.cr). """ - if type(self.fr) != types.StringType : - self.cr.fatal("L'attribut 'fr' doit etre une chaine de caractères : %s" %`self.fr`) - if type(self.docu) != types.StringType : - self.cr.fatal("L'attribut 'docu' doit etre une chaine de caractères : %s" %`self.docu`) - if type(self.regles) != types.TupleType : - self.cr.fatal("L'attribut 'regles' doit etre un tuple : %s" %`self.regles` ) - if self.statut not in ['f','o'] : - self.cr.fatal("L'attribut 'statut' doit valoir 'o' ou 'f' : %s" %`self.statut` ) - if self.condition != None : - if type(self.condition) != types.StringType : - self.cr.fatal("L'attribut 'condition' doit etre une chaine de caractères : %s" %`self.condition`) - else: - self.cr.fatal("La condition ne doit pas valoir None !") + self.check_fr() + self.check_docu() + self.check_regles() + self.check_statut(into=('f', 'o')) + self.check_condition() self.verif_cata_regles() def verif_presence(self,dict,globs): """ Cette méthode vérifie si le dictionnaire passé en argument (dict) - est susceptible de contenir un bloc de mots-clés conforme à la + est susceptible de contenir un bloc de mots-clés conforme à la définition qu'il porte. Si la réponse est oui, la méthode retourne 1 Si la réponse est non, la méthode retourne 0 - + Le dictionnaire dict a pour clés les noms des mots-clés et pour valeurs les valeurs des mots-clés """ - # On recopie le dictionnaire pour protéger l'original - dico=dict.copy() + # On recopie le dictionnaire pour protéger l'original + dico = bloc_utils() + dico.update(dict) if self.condition != None : try: test = eval(self.condition,globs,dico) @@ -145,3 +134,21 @@ class BLOC(N_ENTITE.ENTITE): else : return 0 + +def bloc_utils(): + """Définit un ensemble de fonctions utilisables pour écrire les + conditions de BLOC.""" + def au_moins_un(mcsimp, valeurs): + """Valide si la (ou une) valeur de 'mcsimp' est au moins une fois dans + la ou les 'valeurs'. Similaire à la règle AU_MOINS_UN, 'mcsimp' peut + contenir plusieurs valeurs.""" + test = set(force_list(mcsimp)) + valeurs = set(force_list(valeurs)) + return not test.isdisjoint(valeurs) + + def aucun(mcsimp, valeurs): + """Valide si aucune des valeurs de 'mcsimp' n'est dans 'valeurs'.""" + return not au_moins_un(mcsimp, valeurs) + + return locals() +