X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=Noyau%2FN_FACT.py;h=14ed38ad66a0cf70ad7e516cef6b5d7a3170ef71;hb=9a70f047c05012091a3cf8c6efc48b39ab2bb6e9;hp=2d9455c03c2c14815add7e5daabf5d2ecfcf5107;hpb=89764aa6a88580ac1df0ea52746b437a7cee66d1;p=tools%2Feficas.git diff --git a/Noyau/N_FACT.py b/Noyau/N_FACT.py index 2d9455c0..14ed38ad 100644 --- a/Noyau/N_FACT.py +++ b/Noyau/N_FACT.py @@ -1,151 +1,158 @@ -#@ MODIF N_FACT Noyau DATE 27/03/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=utf-8 +# Copyright (C) 2007-2017 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 FACT - qui permet de spécifier les caractéristiques des mots clés facteurs + qui permet de spécifier les caractéristiques des mots clés facteurs """ +from __future__ import absolute_import +from __future__ import print_function import types -import N_ENTITE -import N_MCFACT -import N_MCLIST +from . import N_ENTITE +from . import N_MCFACT +from . import N_MCLIST +from .N__F import _F +from .N_types import is_sequence + +from . import N_OBJECT + class FACT(N_ENTITE.ENTITE): - """ - Classe pour definir un mot cle facteur - - Cette classe a trois 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 - mot-clé facteur avec sa définition - - - list_instance - - - label qui indique la nature de l'objet de définition (ici, FACT) - """ - class_instance = N_MCFACT.MCFACT - list_instance = N_MCLIST.MCList - label = 'FACT' - - def __init__(self,fr="",ang="",docu="",regles=(),statut='f',defaut=None, - min=0,max=1,**args): - - """ - Un mot-clé facteur est caractérisé par les attributs suivants : - - - fr : - - - ang : - - - statut : - - - defaut : - - - regles - - - min - - - max - - - position - - - docu - """ - # Initialisation des attributs - self.fr=fr - self.ang=ang - self.docu = docu - if type(regles)== types.TupleType: - self.regles=regles - else: - self.regles=(regles,) - self.statut=statut - self.defaut=defaut - self.min=min - self.max=max - self.entites=args - self.position=None - self.affecter_parente() - - def __call__(self,val,nom,parent): - """ - Construit la structure de donnee pour un mot cle facteur a partir - de sa definition (self) de sa valeur (val), de son nom (nom) et de - son parent dans l arboresence (parent) - - Suivant le type de la valeur on retournera soit un objet de type - MCFACT soit une liste de type MCLIST. - - La creation d un mot cle facteur depend de son statut - Si statut ='o' il est obligatoire - Si statut == 'd' il est facultatif mais ses sous mots cles avec - defaut sont visibles - Si statut == 'f' il est facultatif et ses sous mots avec defaut ne - sont pas visibles - Si statut == 'c' il est cache ??? - Si defaut != None, on utilise cette valeur pour calculer la valeur - par defaut du mot cle facteur - """ - if val == None: - if self.defaut == None: - val={} - elif type(self.defaut) == types.TupleType: - val=self.defaut - # Est ce utile ? Le défaut pourrait etre uniquement un dict - elif type(self.defaut) == types.DictType or isinstance(self.defaut,N_MCFACT._F): - val=self.defaut + + """ + Classe pour definir un mot cle facteur + + Cette classe a trois 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 + mot-clé facteur avec sa définition + + - list_instance + + - label qui indique la nature de l'objet de définition (ici, FACT) + """ + class_instance = N_MCFACT.MCFACT + list_instance = N_MCLIST.MCList + label = 'FACT' + + def __init__(self, fr="", docu="", regles=(), statut='f', defaut=None,ang="", + min=0, max=1, validators=None, **args): + """ + Un mot-clé facteur est caractérisé par les attributs suivants : + + - fr : + - statut : + - defaut : + - regles + - min + - max + - position + - docu + """ + N_ENTITE.ENTITE.__init__(self, validators) + # Initialisation des attributs + self.fr = fr + self.ang=ang + self.docu = docu + if type(regles) == tuple: + self.regles = regles else: - # On ne devrait jamais passer par la - print "On ne devrait jamais passer par la" - return None - - if type(val) == types.TupleType or type(val) == types.ListType : - # on est en présence d'un MCFACT multiple ! - l=self.list_instance() - l.init(nom = nom,parent=parent) - for v in val: - objet=self.class_instance(nom=nom,definition=self,val=v,parent=parent) - l.append(objet) + self.regles = (regles,) + self.statut = statut + self.defaut = defaut + self.min = min + self.max = max + if self.max == "**" : self.max=float('inf') + if self.min == "**" : self.min=float('-inf') + self.entites = args + self.position = None + self.affecter_parente() + + def __call__(self, val, nom, parent): + """ + Construit la structure de donnee pour un mot cle facteur a partir + de sa definition (self) de sa valeur (val), de son nom (nom) et de + son parent dans l arboresence (parent) + + Suivant le type de la valeur on retournera soit un objet de type + MCFACT soit une liste de type MCLIST. + + La creation d un mot cle facteur depend de son statut + - Si statut ='o' il est obligatoire + - Si statut == 'd' il est facultatif mais ses sous mots cles avec + defaut sont visibles + - Si statut == 'f' il est facultatif et ses sous mots avec defaut ne + sont pas visibles + - Si statut == 'c' il est cache ??? + - Si defaut != None, on utilise cette valeur pour calculer la valeur + par defaut du mot cle facteur + """ + if val is None: + if self.defaut == None: + val = {} + elif type(self.defaut) == tuple: + val = self.defaut + # Est ce utile ? Le défaut pourrait etre uniquement un dict + elif type(self.defaut) == dict or isinstance(self.defaut, _F): + val = self.defaut + else: + # On ne devrait jamais passer par la + print ("On ne devrait jamais passer par la") + return None + elif is_sequence(val) and len(val) == 0 and self.statut == 'o': + # On est dans le cas où le mcfact est présent mais est une liste/tuple + # vide. Il est obligatoire donc on l'initialise. Les règles, mots-clés + # obligatoires diront si un mcfact vide est accepté. + val = {} + + # On cree toujours une liste de mcfact + l = self.list_instance() + l.init(nom=nom, parent=parent) + if type(val) in (tuple, list, self.list_instance): + for v in val: + if type(v) == dict or isinstance(v, _F): + objet = self.class_instance( + nom=nom, definition=self, val=v, parent=parent) + l.append(objet) + elif isinstance(v, self.class_instance): + l.append(v) + else: + l.append(N_OBJECT.ErrorObj(self, v, parent, nom)) + elif type(val) == dict or isinstance(val, _F): + objet = self.class_instance( + nom=nom, definition=self, val=val, parent=parent) + l.append(objet) + elif isinstance(val, self.class_instance): + l.append(val) + else: + l.append(N_OBJECT.ErrorObj(self, val, parent, nom)) + return l - else: - return self.class_instance(nom=nom,definition=self,val=val,parent=parent) - - - def verif_cata(self): - if type(self.min) != types.IntType : - if self.min != '**': - self.cr.fatal("L'attribut 'min' doit etre un entier : %s" %`self.min`) - if type(self.max) != types.IntType : - if self.max != '**': - self.cr.fatal("L'attribut 'max' doit etre un entier : %s" %`self.max`) - if self.min > self.max : - self.cr.fatal("Nombres d'occurrence min et max invalides : %s %s" %(`self.min`,`self.max`)) - 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.regles) != types.TupleType : - self.cr.fatal("L'attribut 'regles' doit etre un tuple : %s" %`self.regles`) - if self.statut not in ['f','o','c','d'] : - self.cr.fatal("L'attribut 'statut' doit valoir 'o','f','c' ou 'd' : %s" %`self.statut`) - if type(self.docu) != types.StringType : - self.cr.fatal("L'attribut 'docu' doit etre une chaine de caractères : %s" %`self.docu`) - self.verif_cata_regles() + def verif_cata(self): + self.check_min_max() + self.check_fr() + self.check_regles() + self.check_statut() + self.check_docu() + self.check_validators() + self.verif_cata_regles()