From 990e939a1045c212431f9d81876a8337ff8579c8 Mon Sep 17 00:00:00 2001 From: Pascale Noyret Date: Mon, 5 Dec 2011 10:34:59 +0000 Subject: [PATCH] Integration Noyau du 01/12 --- Noyau/N_ASSD.py | 27 ++++---------------- Noyau/N_JDC.py | 12 +++++++-- Noyau/N_MACRO_ETAPE.py | 15 +++++++---- Noyau/__init__.py | 34 ++++++++++++++----------- Noyau/context.py | 5 ++-- Noyau/nommage.py | 56 +++++++++++++++++++++++++++++------------- 6 files changed, 86 insertions(+), 63 deletions(-) diff --git a/Noyau/N_ASSD.py b/Noyau/N_ASSD.py index 780d5ad2..89266a11 100644 --- a/Noyau/N_ASSD.py +++ b/Noyau/N_ASSD.py @@ -1,4 +1,4 @@ -#@ 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 @@ -103,25 +103,6 @@ class ASSD(object): """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 @@ -187,8 +168,7 @@ class ASSD(object): 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 @@ -196,6 +176,9 @@ class ASSD(object): 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): diff --git a/Noyau/N_JDC.py b/Noyau/N_JDC.py index 4efa4842..e5b967e2 100644 --- a/Noyau/N_JDC.py +++ b/Noyau/N_JDC.py @@ -1,4 +1,4 @@ -#@ 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 @@ -491,7 +491,15 @@ Causes possibles : 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): diff --git a/Noyau/N_MACRO_ETAPE.py b/Noyau/N_MACRO_ETAPE.py index 585d5135..efc0380f 100644 --- a/Noyau/N_MACRO_ETAPE.py +++ b/Noyau/N_MACRO_ETAPE.py @@ -1,4 +1,4 @@ -#@ 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 @@ -619,12 +619,14 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co # 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): """ @@ -636,6 +638,9 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co # 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): diff --git a/Noyau/__init__.py b/Noyau/__init__.py index 5a85d29d..e956f6ca 100644 --- a/Noyau/__init__.py +++ b/Noyau/__init__.py @@ -1,27 +1,27 @@ -#@ 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 : @@ -38,6 +38,12 @@ import context 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 diff --git a/Noyau/context.py b/Noyau/context.py index 315829de..bdd8c50e 100644 --- a/Noyau/context.py +++ b/Noyau/context.py @@ -1,4 +1,4 @@ -#@ 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 @@ -39,8 +39,7 @@ def set_current_step(step): 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(): """ diff --git a/Noyau/nommage.py b/Noyau/nommage.py index 56988b6d..431d3b06 100644 --- a/Noyau/nommage.py +++ b/Noyau/nommage.py @@ -1,24 +1,24 @@ -#@ 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. -# -# # ====================================================================== @@ -26,7 +26,7 @@ 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. @@ -40,6 +40,7 @@ # Modules Python import re,string import linecache +from functools import partial # Modules EFICAS import N_utils @@ -48,7 +49,7 @@ regex1='=?\s*%s\s*\(' #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)). @@ -58,14 +59,14 @@ def GetNomConceptResultat(ope): 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 @@ -148,3 +149,24 @@ def f_lineno(f): 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() -- 2.39.2