X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Noyau%2FN_MACRO.py;h=88665420e68a2a85156af5f1bf3dcfe988e6f790;hb=9f4ff7ed9afd87c96e11d61e442e39e5511f60d1;hp=6d5b70fc2eeffb8b8c20fbfa27c8dcaed8e14897;hpb=61f2a263b67981f299c496ce7ef8bccc3ac6e68b;p=tools%2Feficas.git diff --git a/Noyau/N_MACRO.py b/Noyau/N_MACRO.py index 6d5b70fc..88665420 100644 --- a/Noyau/N_MACRO.py +++ b/Noyau/N_MACRO.py @@ -1,191 +1,177 @@ -#@ MODIF N_MACRO Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS -# -*- coding: iso-8859-1 -*- -# RESPONSABLE COURTOIS M.COURTOIS -# 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-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 MACRO - qui permet de spécifier les caractéristiques d'une macro-commande + qui permet de spécifier les caractéristiques d'une macro-commande """ -import types,string,traceback +from __future__ import absolute_import +import types +import traceback -import N_ENTITE -import N_MACRO_ETAPE -import nommage +from . import N_ENTITE +from . import N_MACRO_ETAPE +from . import nommage -class MACRO(N_ENTITE.ENTITE): - """ - Classe pour definir une macro-commande - - 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 - macro-commande avec sa définition - - - label qui indique la nature de l'objet de définition (ici, MACRO) - - - nommage qui est un module Python qui fournit la fonctionnalité de nommage - - et les attributs d'instance suivants : - - - nom : son nom - - - op : le numéro d'opérateur - - - sd_prod : le type de concept produit. C'est une classe ou une fonction qui retourne - une classe - - - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur - réentrant peut modifier un concept d'entrée et le produire comme concept de sortie - - - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur - non répétable ne doit apparaitre qu'une fois dans une exécution. C'est du ressort - de l'objet gérant le contexte d'exécution de vérifier cette contrainte. - - - fr : commentaire associé en francais - - - ang : commentaire associé en anglais - - - docu : clé de documentation associée - - - regles : liste des règles associées - - - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette - fonction est exécutée lors des phases d'initialisation de l'étape associée. - - - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent etre - rangés par niveau. Ils apparaissent alors exclusivement dans leur niveau de rangement. - Si niveau vaut None, l'opérateur est rangé au niveau global. - - - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit - des entités de définition pour les mots-clés : FACT, BLOC, SIMP. Cet attribut - est initialisé avec args, c'est à dire les arguments d'appel restants. - - - """ - class_instance = N_MACRO_ETAPE.MACRO_ETAPE - label = 'MACRO' - nommage = nommage - - def __init__(self,nom,op,sd_prod=None,reentrant='n',repetable='o',fr="",ang="", - docu="",regles=(),op_init=None,niveau = None,fichier_ini=0,UIinfo=None,**args): - """ - Méthode d'initialisation de l'objet MACRO. Les arguments sont utilisés pour initialiser - les attributs de meme nom - """ - # XXX fichier_ini n'est pas utilisé pour l'instant - self.nom=nom - # op est obligatoire et permet de spécifier la procédure de construction de la macro - # - Si op est un entier la construction de la macro est réalisée par une subroutine fortran opsxxx ou - # xxx est donné par la valeur absolue de op. L'execution est egalement effectuée via cette subroutine. - # - Si op est une fonction Python, la construction de la macro est effectuée par l'appel à cette fonction - # Suivant le cas on garde l info dans self.op ou dans self.proc - if type(op) == types.IntType: - self.proc=None - self.op=op - else: - self.op=None - self.proc=op - - self.sd_prod=sd_prod - self.reentrant=reentrant - self.fr=fr - self.ang=ang - self.repetable = repetable - self.docu=docu - if type(regles)== types.TupleType: - self.regles=regles - else: - self.regles=(regles,) - self.fichier_ini = fichier_ini - # Attribut op_init : Fonction a appeler a la construction de l operateur sauf si == None - self.op_init=op_init - self.entites=args - current_cata=CONTEXT.get_current_cata() - if niveau == None: - self.niveau=None - current_cata.enregistre(self) - else: - self.niveau=current_cata.get_niveau(niveau) - self.niveau.enregistre(self) - self.UIinfo=UIinfo - self.affecter_parente() - - def __call__(self,reuse=None,**args): - """ - Construit l'objet MACRO_ETAPE a partir de sa definition (self), - puis demande la construction de ses sous-objets et du concept produit. - """ - # Glut MC (2007-05) / Sensibilité - # Précaution nécessaire pour la sensibilité (on fait 'exec' du texte d'une commande) - # car on n'a pas de "ligne" à décoder pour trouver le nom du résultat (à gauche - # du signe égal). Cà tombe bien, dans ce cas, sd_prod=None : pas de résultat ! - if self.sd_prod != None: - nomsd=self.nommage.GetNomConceptResultat(self.nom) - else: - nomsd = None - etape= self.class_instance(oper=self,reuse=reuse,args=args) - etape.McBuild() - return etape.Build_sd(nomsd) - - def make_objet(self,mc_list='oui'): - """ - Cette méthode crée l'objet MACRO_ETAPE dont la définition est self sans - créer sa sdprod. - Normalement l'étape est enregistrée auprès de son parent. - Si l'argument mc_list vaut 'oui', elle déclenche en plus la construction - des objets MCxxx. - """ - etape= self.class_instance(oper=self,reuse=None,args={}) - if mc_list == 'oui':etape.McBuild() - return etape - - def verif_cata(self): - """ - Méthode de vérification des attributs de définition - """ - if self.op is not None and (type(self.op) != types.IntType or self.op > 0) : - self.cr.fatal("L'attribut 'op' doit etre un entier signé : %s" %`self.op`) - if self.proc is not None and type(self.proc) != types.FunctionType: - self.cr.fatal("L'attribut op doit etre une fonction Python : %s" % `self.proc`) - if type(self.regles) != types.TupleType : - self.cr.fatal("L'attribut 'regles' doit etre un tuple : %s" %`self.regles`) - 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.nom) != types.StringType : - self.cr.fatal("L'attribut 'nom' doit etre une chaine de caractères : %s" %`self.nom`) - if self.reentrant not in ('o','n','f'): - self.cr.fatal("L'attribut 'reentrant' doit valoir 'o','n' ou 'f' : %s" %`self.reentrant`) - self.verif_cata_regles() - - def supprime(self): - """ - Méthode pour supprimer les références arrières susceptibles de provoquer - des cycles de références - """ - self.niveau=None +class MACRO(N_ENTITE.ENTITE): + """ + Classe pour definir une macro-commande + + 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 + macro-commande avec sa définition + + - label qui indique la nature de l'objet de définition (ici, MACRO) + + - nommage qui est un module Python qui fournit la fonctionnalité de nommage + + et les attributs d'instance suivants : + + - nom : son nom + + - op : le numéro d'opérateur + + - sd_prod : le type de concept produit. C'est une classe ou une fonction qui retourne + une classe + + - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur + réentrant peut modifier un concept d'entrée et le produire comme concept de sortie + + - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur + non répétable ne doit apparaitre qu'une fois dans une exécution. C'est du ressort + de l'objet gérant le contexte d'exécution de vérifier cette contrainte. + + - fr : commentaire associé en francais + + - docu : clé de documentation associée + + - regles : liste des règles associées + + - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette + fonction est exécutée lors des phases d'initialisation de l'étape associée. + + - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent etre + rangés par niveau. Ils apparaissent alors exclusivement dans leur niveau de rangement. + Si niveau vaut None, l'opérateur est rangé au niveau global. + + - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit + des entités de définition pour les mots-clés : FACT, BLOC, SIMP. Cet attribut + est initialisé avec args, c'est à dire les arguments d'appel restants. + + + """ + class_instance = N_MACRO_ETAPE.MACRO_ETAPE + label = 'MACRO' + nommage = nommage + + def __init__( + self, nom, op, sd_prod=None, reentrant='n', repetable='o', fr="",ang="", + docu="", regles=(), op_init=None, niveau = None, fichier_ini=0, UIinfo=None, **args): + """ + Méthode d'initialisation de l'objet MACRO. Les arguments sont utilisés pour initialiser + les attributs de meme nom + """ + # XXX fichier_ini n'est pas utilisé pour l'instant + self.nom = nom + # op est obligatoire et permet de spécifier la procédure de construction de la macro + # - Si op est un entier la construction de la macro est réalisée par une subroutine fortran opsxxx ou + # xxx est donné par la valeur absolue de op. L'execution est egalement effectuée via cette subroutine. + # - Si op est une fonction Python, la construction de la macro est effectuée par l'appel à cette fonction + # Suivant le cas on garde l info dans self.op ou dans self.proc + if type(op) == int: + self.proc = None + self.op = op + else: + self.op = None + self.proc = op + + self.sd_prod = sd_prod + self.reentrant = reentrant + self.fr = fr + self.ang=ang + self.repetable = repetable + self.docu = docu + if type(regles) == tuple: + self.regles = regles + else: + self.regles = (regles,) + self.fichier_ini = fichier_ini + # Attribut op_init : Fonction a appeler a la construction de l + # operateur sauf si == None + self.op_init = op_init + self.entites = args + current_cata = CONTEXT.get_current_cata() + if niveau == None: + self.niveau = None + current_cata.enregistre(self) + else: + self.niveau = current_cata.get_niveau(niveau) + self.niveau.enregistre(self) + self.UIinfo = UIinfo + self.affecter_parente() + self.check_definition(self.nom) + + def __call__(self, reuse=None, **args): + """ + Construit l'objet MACRO_ETAPE a partir de sa definition (self), + puis demande la construction de ses sous-objets et du concept produit. + """ + nomsd = self.nommage.GetNomConceptResultat(self.nom) + etape = self.class_instance(oper=self, reuse=reuse, args=args) + etape.McBuild() + return etape.Build_sd(nomsd) + + def make_objet(self, mc_list='oui'): + """ + Cette méthode crée l'objet MACRO_ETAPE dont la définition est self sans + créer sa sdprod. + Normalement l'étape est enregistrée auprès de son parent. + Si l'argument mc_list vaut 'oui', elle déclenche en plus la construction + des objets MCxxx. + """ + etape = self.class_instance(oper=self, reuse=None, args={}) + if mc_list == 'oui': + etape.McBuild() + return etape + + def verif_cata(self): + """ + Méthode de vérification des attributs de définition + """ + self.check_op(valmax=0) + self.check_proc() + self.check_regles() + self.check_fr() + self.check_docu() + self.check_nom() + self.check_reentrant() + self.verif_cata_regles() + + def supprime(self): + """ + Méthode pour supprimer les références arrières susceptibles de provoquer + des cycles de références + """ + self.niveau = None