1 #@ MODIF Sensibilite Macro DATE 19/11/2007 AUTEUR COURTOIS M.COURTOIS
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
9 # (AT YOUR OPTION) ANY LATER VERSION.
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
18 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
22 Module traite de la gestion des concepts sensibles :
23 - classe permettant de stocker les noms des concepts et leurs dérivées
24 - corps de la macro MEMO_NOM_SENSI
27 # protection pour eficas
30 from Utilitai.Utmess import UTMESS
36 #-------------------------------------------------------------------------------
38 """Impose le type list."""
39 if obj is not None and not type(obj) in (list, tuple):
44 #-------------------------------------------------------------------------------
45 class MEMORISATION_SENSIBILITE:
46 """Classe pour la mémorisation des concepts sensibles et leurs dérivées.
48 def __init__(self, debug=False):
49 """Initialisation de la structure
52 # dictionnaire de correspondance : ('nom concept', 'nom parasensi') : 'nom compose'
54 # idem que _corr mais, pour les commandes principales, on stocke sd elle-meme
56 self._nsnp = {} # l'inverse
57 # dictionnaire donnant les 3 tuples de mots-clés, valeurs, mots-clés facteurs
61 def key(self, nosimp, nopase):
62 """Retourne la clé d'accès aux dictionnaires
64 if not type(nosimp) in (str, unicode) or not type(nopase) in (str, unicode) or \
65 len(nosimp.strip()) > 8 or len(nopase.strip()) > 8:
66 UTMESS('F', 'SENSIBILITE_57', valk=(nosimp, nopase))
67 return nosimp.strip(), nopase.strip()
70 def set(self, nosimp, nopase, nocomp=None, limocl=None, livale=None, limofa=None,
72 """On renseigne la structure de mémorisation : CHOIX='E'
74 key = self.key(nosimp, nopase)
75 if self._corr.has_key(key):
76 UTMESS('F', 'SENSIBILITE_90', valk=(nosimp, nopase))
77 limocl = _force_list(limocl) or ()
78 livale = _force_list(livale) or ()
79 limofa = _force_list(limofa) or ()
80 if not (len(limocl) == len(livale) == len(limofa)):
81 UTMESS('F', 'SENSIBILITE_97')
84 nocomp = aster.get_nom_concept_unique('S')
85 # on ne conserve que le nom (au moins pour le moment)
86 if type(nocomp) != str:
91 self._corr[key] = nocomp
92 self._cosd[nocomp] = sd
93 self._nsnp[nocomp] = key
94 self._mcle[key] = (limocl, livale, limofa)
96 if verbose or self._debug:
97 UTMESS('I', 'SENSIBILITE_58', valk=(nosimp, nopase, nocomp))
99 UTMESS('I', 'SENSIBILITE_59', valk=(str(limocl), str(livale), str(limofa)))
102 def get_nocomp(self, nosimp, nopase):
103 """On récupère le nom composé associé à un nom simple.
105 key = self.key(nosimp, nopase)
106 nocomp = self._corr.get(key, _VIDE_)
108 print '<DBG> memo_sensi.get_nocomp'
109 print ' nosimp, nopase = "%s", "%s"' % (nosimp, nopase)
110 print ' nom composé = "%s"' % nocomp
114 def get_nsnp(self, nocomp):
115 """On récupère le nom du concept et le parasensi associé au nom composé fourni.
117 key = self._nsnp.get(nocomp, (_VIDE_, _VIDE_))
119 print '<DBG> memo_sensi.get_nsnp'
120 print ' nom composé = "%s"' % nocomp
121 print ' nosimp, nopase = "%s", "%s"' % key
125 def get_mcle(self, nosimp, nopase):
126 """On récupère les mots-clés associés à un couple ('nom concept', 'nom parasensi')
128 key = self.key(nosimp, nopase)
129 tup3 = self._mcle.get(key, ((), (), ()) )
132 print '<DBG> memo_sensi.get_mcle nbmocl =',len(tup3[0])
133 print ' nosimp, nopase = "%s", "%s"' % (nosimp, nopase)
134 print ' mots-clés = ', tup3
138 def psinfo(self, nosimp):
139 """Pendant de l'ex-routine psnosd : retour selon le type de `nosimp`.
141 # est-ce une structure dérivée ?
142 if nosimp in self._nsnp.keys():
143 t_couples = self._nsnp[nosimp]
146 t_couples = self.get_deriv(nosimp)
148 # on met le tuple des couples à plat : un tuple de longueur double
150 for coupl in t_couples:
154 print '<DBG> memo_sensi.psinfo'
155 print ' nosimp = "%s"' % nosimp
156 print ' ideriv = ', ideriv
157 print ' result = ', t_res
161 def get_deriv(self, nosimp):
162 """On récupère la liste des couples ('nom composé', 'nom parasensi') associé à
166 # liste des clés d'accès concernant `nosimp`.
167 l_key = [(ns, np) for ns, np in self._corr.keys() if ns == nosimp.strip()]
169 res.append((self._corr[ns, np], np))
173 def get_nom_sd_princ(self):
174 """Retourne la liste des noms des sd dérivées produites par les commandes principales.
176 return tuple(self._cosd.keys())
179 def delete(self, nosimp, nopase):
180 """On récupère les mots-clés associés à un couple ('nom concept', 'nom parasensi')
182 key = self.key(nosimp, nopase)
183 nocomp = self.get_nocomp(nosimp, nopase)
186 del self._cosd[nocomp]
188 del self._nsnp[nocomp]
191 #-------------------------------------------------------------------------------
192 #-------------------------------------------------------------------------------
193 def memo_nom_sensi_ops(self, NOM, **args):
194 """Macro MEMO_NOM_SENSI.
195 Transitoire : l'appel aux méthodes de MEMORISATION_SENSIBILITE devraient
196 à terme etre fait directement sans introduire de commandes MEMO_NOM_SENSI.
198 Faut-il traiter les mots-clés NOM_ZERO et NOM_UN ?
199 Il me semble que NOM_COMPOSE est toujours présent : obligatoire
204 # La macro compte pour 1 dans la numerotation des commandes
207 dNOM = NOM[0].cree_dict_valeurs(NOM[0].mc_liste)
209 nosimp = dNOM['NOM_SD']
210 nopase = dNOM['PARA_SENSI'].nom
211 nocomp = dNOM['NOM_COMPOSE']
213 self.jdc.memo_sensi.set(nosimp, nopase, nocomp,
214 dNOM['MOT_CLE'], dNOM['VALEUR'], dNOM['MOT_FACT'],
217 # s'il faut déclarer le concept dérivé dans le jdc
218 if dNOM['TYPE_SD_DERIV']:
219 self.DeclareOut('nocomp', dNOM['NOM_COMPOSE'])
220 # enregistrement dans le tableau des concepts jeveux
221 icmdt = aster.co_register_jev(dNOM['NOM_COMPOSE'].nom, dNOM['TYPE_SD_DERIV'].upper(), 'MEMO_NOM_SENSI')