From ae7d9067437ec28905ddbc25be3c1e9a3f745bb1 Mon Sep 17 00:00:00 2001 From: Pascale Noyret Date: Fri, 20 Nov 2009 13:34:12 +0000 Subject: [PATCH] *** empty log message *** --- Accas/__init__.py | 1 - Accas/__init__NonAster.py | 104 ++++++++++++++++++++++++++++ Noyau/N_ASSD.py | 2 +- Noyau/N_ASSD_NonAster.py | 140 ++++++++++++++++++++++++++++++++++++++ Noyau/N_ETAPE.py | 20 ++---- Noyau/N_FONCTION.py | 13 ++-- Noyau/N_JDC.py | 10 +-- Noyau/N_MACRO_ETAPE.py | 62 ++++++----------- Noyau/N_VALIDATOR.py | 60 ---------------- Noyau/asojb.py | 11 +-- 10 files changed, 279 insertions(+), 144 deletions(-) create mode 100644 Accas/__init__NonAster.py create mode 100644 Noyau/N_ASSD_NonAster.py diff --git a/Accas/__init__.py b/Accas/__init__.py index 324ed712..2d985aed 100644 --- a/Accas/__init__.py +++ b/Accas/__init__.py @@ -84,7 +84,6 @@ from A_VALIDATOR import OrVal,AndVal from A_VALIDATOR import OrdList,NoRepeat,LongStr,Compulsory from A_VALIDATOR import RangeVal, EnumVal, TypeVal, PairVal from A_VALIDATOR import CardVal, InstanceVal -from A_VALIDATOR import VerifTypeTuple # On remplace la factory des validateurs initialement dans Noyau par celle # de A_VALIDATOR diff --git a/Accas/__init__NonAster.py b/Accas/__init__NonAster.py new file mode 100644 index 00000000..324ed712 --- /dev/null +++ b/Accas/__init__NonAster.py @@ -0,0 +1,104 @@ +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2001 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. +# +# 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. +# +# 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. +# ====================================================================== + + +""" + Ce package contient les classes qui seront effectivement utilisees dans les applications. + C'est dans ce package que sont realisees les combinaisons de classes de base + avec les classes MIXIN qui implementent les fonctionnalites qui ont ete separees + du noyau pour des raisons de modularite afin de faciliter la maintenance et + l'extensibilite. + + De plus toutes les classes utilisables par les applications sont remontees au + niveau du package afin de rendre le plus independant possible l'utilisation des + classes et leur implementation. +""" + +# permet de se proteger de l'oubli de carte coding +# ce warning deviendra fatal en python 2.4 +import warnings +warnings.filterwarnings('error','Non-ASCII character.*pep-0263',DeprecationWarning) + +from A_JDC_CATA import JDC_CATA +from A_OPER import OPER +from A_PROC import PROC +from A_MACRO import MACRO +from A_FORM import FORM +from A_BLOC import BLOC +from A_FACT import FACT +from A_SIMP import SIMP +from A_EVAL import EVAL +from A_NUPLET import NUPL + +from A_JDC import JDC +from A_ETAPE import ETAPE +from A_PROC_ETAPE import PROC_ETAPE +from A_MACRO_ETAPE import MACRO_ETAPE +from A_FORM_ETAPE import FORM_ETAPE +from A_MCFACT import MCFACT +from A_MCLIST import MCList +from A_MCBLOC import MCBLOC +from A_MCSIMP import MCSIMP + +# Les règles +from A_AU_MOINS_UN import AU_MOINS_UN +from A_AU_PLUS_UN import AU_PLUS_UN +from A_UN_PARMI import UN_PARMI +from A_PRESENT_PRESENT import PRESENT_PRESENT +from A_PRESENT_ABSENT import PRESENT_ABSENT +from A_EXCLUS import EXCLUS +from A_ENSEMBLE import ENSEMBLE +from A_A_CLASSER import A_CLASSER +from A_AVANT import AVANT + +from A_ASSD import ASSD,assd +from A_ASSD import GEOM,geom +# Pour le moment on laisse fonction (ceinture et bretelles) +from A_ASSD import FONCTION, fonction +from A_ASSD import formule +from A_ASSD import formule_c +from A_ASSD import CO + +from Noyau.N__F import _F + +from Noyau.N_Exception import AsException +from Noyau.N_utils import AsType + +from A_VALIDATOR import OrVal,AndVal +from A_VALIDATOR import OrdList,NoRepeat,LongStr,Compulsory +from A_VALIDATOR import RangeVal, EnumVal, TypeVal, PairVal +from A_VALIDATOR import CardVal, InstanceVal +from A_VALIDATOR import VerifTypeTuple + +# 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 A_SENSIBILITE import CONCEPT_SENSIBLE, REUSE_SENSIBLE, DERIVABLE + +from Extensions.niveau import NIVEAU +from Extensions.etape_niveau import ETAPE_NIVEAU +from Extensions.commentaire import COMMENTAIRE +from Extensions.parametre import PARAMETRE +from Extensions.parametre_eval import PARAMETRE_EVAL +from Extensions.commande_comm import COMMANDE_COMM +from Extensions.mcnuplet import MCNUPLET + diff --git a/Noyau/N_ASSD.py b/Noyau/N_ASSD.py index ebcddc39..79e7dcdc 100644 --- a/Noyau/N_ASSD.py +++ b/Noyau/N_ASSD.py @@ -59,7 +59,7 @@ class ASSD(object): # permet de savoir si le concept a été calculé (1) ou non (0) self.executed = 0 # initialise la partie "sd" - super(ASSD, self).__init__() # Python 2.6 + super(ASSD, self).__init__(nomj='?&?&?&?&') def __getitem__(self,key): return self.etape[key] diff --git a/Noyau/N_ASSD_NonAster.py b/Noyau/N_ASSD_NonAster.py new file mode 100644 index 00000000..79e7dcdc --- /dev/null +++ b/Noyau/N_ASSD_NonAster.py @@ -0,0 +1,140 @@ +#@ MODIF N_ASSD Noyau DATE 02/06/2008 AUTEUR COURTOIS M.COURTOIS +# -*- coding: iso-8859-1 -*- +# 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. +# +# 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. +# +# 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. +# +# +# ====================================================================== + + +""" + +""" + +class ASSD(object): + """ + Classe de base pour definir des types de structures de donnees ASTER + equivalent d un concept ASTER + """ + idracine="SD" + + def __init__(self,etape=None,sd=None,reg='oui'): + """ + reg est un paramètre qui vaut oui ou non : + - si oui (défaut) : on enregistre la SD auprès du JDC + - si non : on ne l'enregistre pas + """ + self.etape=etape + self.sd=sd + self.nom=None + if etape: + self.parent=etape.parent + else: + self.parent=CONTEXT.get_current_step() + if self.parent : + self.jdc = self.parent.get_jdc_root() + else: + self.jdc = None + + if not self.parent: + self.id=None + elif reg == 'oui' : + self.id = self.parent.reg_sd(self) + else : + self.id = self.parent.o_register(self) + # permet de savoir si le concept a été calculé (1) ou non (0) + self.executed = 0 + # initialise la partie "sd" + super(ASSD, self).__init__(nomj='?&?&?&?&') + + def __getitem__(self,key): + return self.etape[key] + + def set_name(self, nom): + """Positionne le nom de self (et appelle sd_init) + """ + self.nom = nom + # test car FORMULE n'a pas de SD associée + meth = getattr(super(ASSD, self), 'set_name', None) + if meth: + meth(nom) + + def reparent_sd(self): + """Repositionne le parent des attributs de la SD associée. + """ + # test car FORMULE n'a pas de SD associée + meth = getattr(super(ASSD, self), 'reparent', None) + if meth: + meth(None, None) + + def get_name(self): + """ + Retourne le nom de self, éventuellement en le demandant au JDC + """ + if not self.nom : + try: + self.nom=self.parent.get_name(self) or self.id + except: + self.nom="" + if self.nom.find('sansnom') != -1 or self.nom == '': + self.nom = self.id + return self.nom + + def supprime(self): + """ + Cassage des boucles de références pour destruction du JDC + """ + self.etape = None + self.sd = None + self.jdc = None + self.parent = None + + def accept(self,visitor): + """ + Cette methode permet de parcourir l'arborescence des objets + en utilisant le pattern VISITEUR + """ + visitor.visitASSD(self) + + def __getstate__(self): + """ + Cette methode permet de pickler les objets ASSD + Ceci est possible car on coupe les liens avec les objets + parent, etape et jdc qui conduiraient à pickler de nombreux + objets inutiles ou non picklables. + """ + d=self.__dict__.copy() + for key in ('parent','etape','jdc'): + if d.has_key(key):del d[key] + for key in d.keys(): + if key[0]=='_':del d[key] + return d + + def par_lot(self): + """ + Retourne True si l'ASSD est créée en mode PAR_LOT='OUI'. + """ + if not hasattr(self, 'jdc') or self.jdc == None: + val = None + else: + val = self.jdc.par_lot + return val == 'OUI' + +class assd(ASSD): + def __convert__(cls,valeur): + return valeur + __convert__=classmethod(__convert__) diff --git a/Noyau/N_ETAPE.py b/Noyau/N_ETAPE.py index e9a69c1d..d0f9f632 100644 --- a/Noyau/N_ETAPE.py +++ b/Noyau/N_ETAPE.py @@ -1,6 +1,5 @@ -#@ MODIF N_ETAPE Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS +#@ MODIF N_ETAPE Noyau DATE 16/05/2007 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 @@ -256,6 +255,8 @@ Causes possibles : Methode utilisee pour que l etape self se declare etape courante. Utilise par les macros """ + #print "set_current_step ",self.nom + #traceback.print_stack(limit=3,file=sys.stdout) cs= CONTEXT.get_current_step() if self.parent != cs : raise "L'étape courante %s devrait etre le parent de self : %s" % (cs,self) @@ -268,6 +269,8 @@ Causes possibles : Methode utilisee par l'etape self qui remet son etape parent comme etape courante """ + #print "reset_current_step ",self.nom + #traceback.print_stack(limit=3,file=sys.stdout) cs= CONTEXT.get_current_step() if self != cs : raise "L'étape courante %s devrait etre self : %s" % (cs,self) @@ -408,16 +411,3 @@ Causes possibles : if self.sd and self.reuse == None : self.parent.NommerSdprod(self.sd,self.sd.nom) - - def is_include(self): - """Permet savoir si on a affaire à une commande de type INCLUDE/INCLUDE_MATERIAU - car le comportement de ces macros est particulier. - """ - return self.nom.startswith('INCLUDE') - - def sd_accessible(self): - """Dit si on peut acceder aux "valeurs" (jeveux) de l'ASSD produite par l'étape. - """ - if CONTEXT.debug: print '`- ETAPE sd_accessible :', self.nom - return self.parent.sd_accessible() - diff --git a/Noyau/N_FONCTION.py b/Noyau/N_FONCTION.py index 83d00e3b..5ac04bf7 100644 --- a/Noyau/N_FONCTION.py +++ b/Noyau/N_FONCTION.py @@ -1,6 +1,5 @@ -#@ MODIF N_FONCTION Noyau DATE 10/11/2009 AUTEUR COURTOIS M.COURTOIS +#@ MODIF N_FONCTION Noyau DATE 18/12/2007 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 @@ -38,11 +37,9 @@ class formule(ASSD,AsBase): self.expression=None def __call__(self,*val): - context = {} - # cas de INCLUDE (ou POURSUITE dans Eficas) - context.update(getattr(self.parent, 'contexte_fichier_init', {})) - # récupération des constantes locales en cas de MACRO - context.update(getattr(self.parent, 'macro_const_context', {})) + if hasattr(self.parent,'contexte_fichier_init'): + context=self.parent.contexte_fichier_init + else : context={} i=0 for param in self.nompar : context[param]=val[i] @@ -95,7 +92,7 @@ class formule(ASSD,AsBase): """ from SD.sd_fonction import sd_formule from Utilitai.Utmess import UTMESS - if self.accessible(): + if not self.par_lot(): TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT', 'I':'INTERPRE' } sd = sd_formule(self.get_name()) prol = sd.PROL.get() diff --git a/Noyau/N_JDC.py b/Noyau/N_JDC.py index 9a864b43..d4d3222a 100644 --- a/Noyau/N_JDC.py +++ b/Noyau/N_JDC.py @@ -1,6 +1,5 @@ -#@ MODIF N_JDC Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS +#@ MODIF N_JDC Noyau DATE 01/04/2008 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 @@ -509,10 +508,3 @@ Causes possibles : self.index_etapes[etape] = len(self.etapes) - 1 etape.reparent(self) etape.reset_jdc(self) - - def sd_accessible(self): - """On peut acceder aux "valeurs" (jeveux) des ASSD si le JDC est en PAR_LOT="NON". - """ - if CONTEXT.debug: print ' `- JDC sd_accessible : PAR_LOT =', self.par_lot - return self.par_lot == 'NON' - diff --git a/Noyau/N_MACRO_ETAPE.py b/Noyau/N_MACRO_ETAPE.py index 51610db0..c2a53700 100644 --- a/Noyau/N_MACRO_ETAPE.py +++ b/Noyau/N_MACRO_ETAPE.py @@ -1,6 +1,5 @@ -#@ MODIF N_MACRO_ETAPE Noyau DATE 10/11/2009 AUTEUR COURTOIS M.COURTOIS +#@ MODIF N_MACRO_ETAPE Noyau DATE 28/11/2007 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 @@ -62,33 +61,32 @@ class MACRO_ETAPE(N_ETAPE.ETAPE): avec l'argument args. """ - self.definition = oper - self.reuse = reuse - self.valeur = args + self.definition=oper + self.reuse=reuse + self.valeur=args self.nettoiargs() - self.parent = CONTEXT.get_current_step() + self.parent=CONTEXT.get_current_step() self.etape = self - self.nom = oper.nom - self.idracine = oper.label - self.appel = N_utils.callee_where() - self.mc_globaux = {} - self.g_context = {} + self.nom=oper.nom + self.idracine=oper.label + self.appel=N_utils.callee_where() + self.mc_globaux={} + self.g_context={} # Contexte courant - self.current_context = {} - self.macro_const_context = {} - self.index_etape_courante = 0 - self.etapes = [] - self.index_etapes = {} - self.sds = [] + self.current_context={} + self.index_etape_courante=0 + self.etapes=[] + self.index_etapes={} + self.sds=[] # Dans le cas d'une macro écrite en Python, l'attribut Outputs est un # dictionnaire qui contient les concepts produits de sortie # (nom : ASSD) déclarés dans la fonction sd_prod - self.Outputs = {} - self.sd = None - self.actif = 1 - self.sdprods = [] + self.Outputs={} + self.sd=None + self.actif=1 + self.sdprods=[] self.make_register() - self.UserError = "UserError" + self.UserError="UserError" def make_register(self): """ @@ -692,23 +690,3 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co concept.jdc=self.jdc for e in self.etapes: e.reparent(self) - - def update_const_context(self, d): - """ - Met à jour le contexte des constantes pour l'évaluation de - formules dans la macro. - """ - # Dans le jdc, const_context est mis à jour par exec_compile - # Dans la macro, on n'a pas le code à compiler pour récupèrer les - # constantes locales à la macro. On demande donc explicitement de - # définir les constantes "locales". - self.macro_const_context.update(d) - - def sd_accessible(self): - """On peut acceder aux "valeurs" (jeveux) des ASSD dans - les macro-commandes qui sont localement en PAR_LOT="NON" - sauf pour INCLUDE et INCLUDE_MATERIAU. - """ - if CONTEXT.debug: print ' `- MACRO sd_accessible :', self.nom - return self.parent.sd_accessible() or not self.nom.startswith('INCLUDE') - diff --git a/Noyau/N_VALIDATOR.py b/Noyau/N_VALIDATOR.py index 57b0de9d..61a79a4c 100644 --- a/Noyau/N_VALIDATOR.py +++ b/Noyau/N_VALIDATOR.py @@ -126,10 +126,6 @@ class TypeProtocol(PProtocol): if type(obj)==types.StringType:return obj elif type(type_permis) == types.ClassType or isinstance(type_permis,type): if self.is_object_from(obj,type_permis):return obj - elif type_permis == 'Fichier' : - import os - if os.path.isfile(obj):return obj - else : raise ValError("%s n'est pas un fichier valide" % repr(obj)) elif type(type_permis) == types.InstanceType or isinstance(type_permis,object): try: if type_permis.__convert__(obj) : return obj @@ -1217,59 +1213,3 @@ class InstanceVal(ListVal): if not isinstance(valeur,self.aClass): return 0 return 1 -class VerifTypeTuple(Valid,ListVal) : - def __init__(self,typeDesTuples): - self.typeDesTuples=typeDesTuples - Valid.__init__(self) - self.cata_info="" - - def info(self): - return ": verifie les types dans un tuple" - - def info_erreur_liste(self): - return "Les types entres ne sont pas permis" - - def default(self,valeur): - #if valeur in self.liste : raise ValError("%s est un doublon" % valeur) - return valeur - - def is_list(self) : - return 1 - - def convert_item(self,valeur): - if len(valeur) != len(self.typeDesTuples): - raise ValError("%s devrait etre de type %s " %(valeur,self.typeDesTuples)) - for i in range(len(valeur)) : - ok=self.verifType(valeur[i],self.typeDesTuples[i]) - if ok!=1 : - raise ValError("%s devrait etre de type %s " %(valeur,self.typeDesTuples)) - return valeur - - def verif_item(self,valeur): - try : - if len(valeur) != len(self.typeDesTuples): return 0 - for i in range(len(valeur)) : - ok=self.verifType(valeur[i],self.typeDesTuples[i]) - if ok!=1 : return 0 - except : - return 0 - return 1 - - def verifType(self,valeur,type_permis): - if type_permis == 'R': - if type(valeur) in (types.IntType,types.FloatType,types.LongType):return 1 - elif type_permis == 'I': - if type(valeur) in (types.IntType,types.LongType):return 1 - elif type_permis == 'C': - if self.is_complexe(valeur):return 1 - elif type_permis == 'TXM': - if type(valeur)==types.StringType:return 1 - return 0 - - def verif(self,valeur): - if type(valeur) in (types.ListType,types.TupleType): - liste=list(valeur) - for val in liste: - if self.verif_item(val)!=1 : return 0 - return 1 - diff --git a/Noyau/asojb.py b/Noyau/asojb.py index a5f2fc99..8d2820ca 100644 --- a/Noyau/asojb.py +++ b/Noyau/asojb.py @@ -1,6 +1,5 @@ -#@ MODIF asojb Noyau DATE 21/09/2009 AUTEUR COURTOIS M.COURTOIS +#@ MODIF asojb Noyau DATE 07/10/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- -# RESPONSABLE COURTOIS M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG @@ -77,7 +76,7 @@ class AsBase(Type): v( checker ) except : mess=60*'-'+'\n' - mess=mess+'Erreur SDVERI (Attention : vérification incomplète)'+'\n' + mess=mess+'Erreur SDVERI_45 (Attention : vérification incomplète)'+'\n' mess=mess.join(traceback.format_tb(sys.exc_traceback)) checker.err(self,mess) @@ -119,7 +118,7 @@ class AsBase(Type): return "<%s(%x,%r)>" % (self.__class__.__name__, id(self), self.nomj() ) def long_repr(self): - if not hasattr(self, "accessible") or not self.accessible(): + if not hasattr(self, "par_lot") or self.par_lot(): # hors Aster ou en par_lot='oui' return self.short_repr() else: @@ -299,10 +298,6 @@ class OJBCollec(OJB): class AsVI(OJBVect): _type = "I" -# ----------------------------------------------------------------------------- -class AsVS(OJBVect): - _type = "S" - # ----------------------------------------------------------------------------- class AsVR(OJBVect): _type = "R" -- 2.39.2