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
--- /dev/null
+# -*- 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
+
# 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]
--- /dev/null
+#@ 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__)
-#@ 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
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)
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)
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()
-
-#@ 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
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]
"""
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()
-#@ 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
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'
-
-#@ 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
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):
"""
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')
-
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
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
-
-#@ 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
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)
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:
class AsVI(OJBVect):
_type = "I"
-# -----------------------------------------------------------------------------
-class AsVS(OJBVect):
- _type = "S"
-
# -----------------------------------------------------------------------------
class AsVR(OJBVect):
_type = "R"