-#@ MODIF N_ASSD Noyau DATE 30/08/2011 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_ASSD Noyau DATE 25/10/2011 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
"""Type connu a posteriori (type CO)."""
self.__class__ = new_type
- def reparent_sd(self):
- """Repositionne le parent des attributs de la SD associée.
- """
- sup = super(ASSD, self)
- if hasattr(sup, 'nomj'): # == AsBase
- sup.reparent(None, None)
-
- def rebuild_sd(self):
- """Reconstruit les attributs de la SD associée.
- """
- etape = getattr(self, "etape", None)
- sd = getattr(self, "sd", None)
- new = self.__class__(etape=etape, sd=sd)
- new.set_name(self.nom)
- datt = new.__dict__
- for nam in datt.keys():
- if hasattr(self, nam) and getattr(self, nam) is None:
- setattr(self, nam, getattr(new, nam))
- self.reparent_sd()
def get_name(self):
"""
Retourne le nom de self, éventuellement en le demandant au JDC
def par_lot(self):
- """Conserver uniquement pour la compatibilite avec le catalogue v9 dans eficas.
- """
+ """Conserver uniquement pour la compatibilite avec le catalogue v9 dans eficas."""
#XXX eficas
if not hasattr(self, 'jdc') or self.jdc == None:
val = None
val = self.jdc.par_lot
return val == 'OUI'
+ def rebuild_sd(self):
+ """Conserver uniquement pour la compatibilite avec le catalogue v10 dans eficas."""
+
class assd(ASSD):
def __convert__(cls, valeur):
-#@ MODIF N_JDC Noyau DATE 28/06/2011 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_JDC Noyau DATE 25/10/2011 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
return d
def get_global_contexte(self):
- return self.g_context.copy()
+ """Retourne "un" contexte global ;-)"""
+ # N'est utilisé que par INCLUDE (sauf erreur).
+ # g_context est remis à {} en PAR_LOT='OUI'. const_context permet
+ # de retrouver ce qui y a été mis par exec_compile.
+ # Les concepts n'y sont pas en PAR_LOT='OUI'. Ils sont ajoutés
+ # par get_global_contexte de la MACRO.
+ d = self.const_context.copy()
+ d.update(self.g_context)
+ return d
def get_contexte_courant(self, etape_courante=None):
-#@ MODIF N_MACRO_ETAPE Noyau DATE 12/10/2011 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF N_MACRO_ETAPE Noyau DATE 07/11/2011 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
# on execute le texte fourni dans le contexte forme par
# le contexte de l etape pere (global au sens Python)
# et le contexte de l etape (local au sens Python)
- code=compile(text,f,'exec')
- d={}
+ code = compile(text,f,'exec')
+ d = self.macro_const_context
self.g_context = d
self.contexte_fichier_init = d
- globs=self.parent.get_global_contexte()
- exec code in globs,d
+ globs = self.get_global_contexte()
+ exec code in globs, d
+ # pour ne pas conserver des références sur tout
+ self.macro_const_context = {}
def get_global_contexte(self):
"""
# du parent de self et de celui de l'etape elle meme (self)
d=self.parent.get_global_contexte()
d.update(self.g_context)
+ # en PAR_LOT='OUI', les concepts n'étant pas dans jdc.g_context,
+ # on demande au parent le contexte courant.
+ d.update(self.parent.get_contexte_avant(self))
return d
def get_contexte_courant(self, etape_fille_du_jdc=None):
-#@ MODIF __init__ Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF __init__ Noyau DATE 12/10/2011 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
# CONFIGURATION MANAGEMENT OF EDF VERSION
# ======================================================================
-# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011 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.
+# 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.
#
-# 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 fournit les classes de base d'EFICAS.
Ces classes permettent d'effectuer quelques opérations basiques :
import __builtin__
__builtin__.CONTEXT=context
+def _(msg):
+ """Differs translation."""
+ # 'codex' should install its translation functions later
+ return msg
+__builtin__._ = _
+
# Classes de base
from N_SIMP import SIMP
from N_FACT import FACT
-#@ MODIF context Noyau DATE 28/06/2011 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF context Noyau DATE 15/11/2011 AUTEUR COURTOIS M.COURTOIS
# -*- coding: iso-8859-1 -*-
# RESPONSABLE COURTOIS M.COURTOIS
# CONFIGURATION MANAGEMENT OF EDF VERSION
global _root
if _root : raise "Impossible d'affecter _root. Il devrait valoir None"
_root=step
- if step is not None:
- message.debug(SUPERV, "current_step = %s", step.nom, stack_id=-1)
+ message.debug(SUPERV, "current_step = %s", step and step.nom, stack_id=-1)
def get_current_step():
"""
-#@ MODIF nommage Noyau DATE 07/09/2009 AUTEUR COURTOIS M.COURTOIS
+#@ MODIF nommage Noyau DATE 25/10/2011 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
+# COPYRIGHT (C) 1991 - 2011 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.
+# 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.
#
-# 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 module sert à nommer les concepts produits par les commandes.
Le nom du concept est obtenu en appelant la fonction GetNomConceptResultat
du module avec le nom de la commande en argument.
-
+
Cette fonction parcourt le source dans lequel la commande se trouve, parse le
fichier et retrouve le nom du concept qui se trouve à gauche du signe = précédant
le nom de la commande.
# Modules Python
import re,string
import linecache
+from functools import partial
# Modules EFICAS
import N_utils
#commentaire standard precede d'un nombre quelconque de blancs (pas multiligne)
pattern_comment = re.compile(r"^\s*#.*")
-def GetNomConceptResultat(ope):
+def _GetNomConceptResultat(ope, level=2):
"""
Cette fonction recherche dans la pile des appels, l'appel à la commande
qui doit etre situé à 2 niveaux au-dessus (cur_frame(2)).
et on vérifie que cette ligne correspond véritablement à l'appel.
En effet, lorsque les commandes tiennent sur plusieurs lignes, on retrouve
- la dernière ligne. Il faut donc remonter dans le source jusqu'à la première
+ la dernière ligne. Il faut donc remonter dans le source jusqu'à la première
ligne.
Enfin la fonction evalnom forme un nom acceptable lorsque le concept est un
élément d'une liste, par exemple.
"""
- f=N_utils.cur_frame(2)
+ f=N_utils.cur_frame(level)
lineno = f.f_lineno # XXX Too bad if -O is used
#lineno = f_lineno(f) # Ne marche pas toujours
co = f.f_code
line = line + ord(tab[i+1])
return line
+
+class NamingSystem:
+ """Cette classe définit un système de nommage dynamique des concepts."""
+ def __init__(self):
+ """Initialisation"""
+ self.native = _GetNomConceptResultat
+ self.use_global_naming()
+
+ def use_naming_function(self, function):
+ """Utilise une fonction particulière de nommage."""
+ self.naming_func = function
+
+ def use_global_naming(self):
+ """Utilise la fonction native de nommage."""
+ self.naming_func = partial(self.native, level=3)
+
+ def __call__(self, *args):
+ """Appel à la fonction de nommage."""
+ return self.naming_func(*args)
+
+GetNomConceptResultat = NamingSystem()