1 # -*- coding: utf-8 -*-
2 #@ MODIF N_CR Noyau DATE 20/01/2003 AUTEUR DURAND C.DURAND
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2002 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.
21 # ======================================================================
22 """ Ce module contient la classe compte-rendu de validation
29 Classe servant à la construction et à l'affichage des objets Comptes-rendus
31 def __init__(self,verbeux = 'non',debut='',fin='',dec=' '):
39 self.verbeux = verbeux
50 """ Ajoute un commentaire OK à la liste crok"""
51 self.crok.append(comment)
53 def warn(self,comment):
54 """ Ajoute un commentaire Warning à la liste crwarn"""
55 self.crwarn.append(comment)
57 def fatal(self,comment):
58 """ Ajoute un commentaire Erreur Fatale à la liste crfatal"""
59 self.crfatal.append(comment)
61 def exception(self,comment):
62 """ Ajoute un commentaire Exception à la liste crexception"""
63 self.crexception.append(comment)
66 """ Ajoute un objet CR à la liste subcr :il s'agit de l'objet CR d'un fils de self """
71 Retourne 1 si self ne contient aucun message grave (fatal ou exception) et
72 aucun CR qui en contienne,
75 if self.crexception : return 0
76 if self.crfatal : return 0
78 if not s.estvide(): return 0
83 Purge complètement le CR sauf les exceptions
93 def beautifie_messages(self):
95 Beautifie les messages stockés dans crok,crfatal,crexception et crwarn
98 for mess in self.crok:
102 for mess in self.crwarn:
103 l.append(encadre_message(mess,'*'))
104 self.crwarn_belle = l
106 for mess in self.crfatal:
107 l.append(encadre_message(mess,'!'))
108 self.crfatal_belle = l
110 for mess in self.crexception:
111 l.append(encadre_message(mess,'!'))
112 self.crexception_belle = l
116 Insère en tete de chaque ligne du texte s la chaine self.dec
118 l = string.split(s,'\n')
119 return self.dec+string.join(l,'\n'+self.dec)[:-3]
123 Retourne une chaine de caractères décorée et représentative de self
126 self.beautifie_messages()
127 s=s+string.join(self.crok_belle,'')
128 s=s+string.join(self.crwarn_belle,'')
129 s=s+string.join(self.crfatal_belle,'')
130 s=s+string.join(self.crexception_belle,'')
131 for subcr in self.subcr:
132 if self.verbeux == 'oui':
135 if not subcr.estvide():
138 s=self.debut+'\n'+self.indent(s)+self.fin+'\n'
140 s=self.debut+'\n'+self.fin+'\n'
143 def report(self,decalage = 2):
145 Retourne une chaine de caractères non encadrée mais représentative de self
148 # on stocke dans s les messages de premier niveau
149 for mess in self.crok :
150 s=s + decalage*self.dec + mess + self.dec + '\n'
151 for mess in self.crwarn:
152 s=s + decalage*self.dec + mess + self.dec + '\n'
153 for mess in self.crfatal:
154 s=s + decalage*self.dec + mess + self.dec + '\n'
155 for mess in self.crexception:
156 s=s + decalage*self.dec + mess + self.dec + '\n'
157 # on récupère les messages des sous comptes-rendus ...
158 for subcr in self.subcr:
159 if not subcr.estvide():
160 s=s+subcr.report(decalage = decalage + 1)
161 # on rajoute les flags de début et de fin ... (si self n'est pas vide)
162 if not self.estvide() :
163 s = (decalage-1)*self.dec+self.debut+'\n'+s+ \
164 (decalage-1)*self.dec+self.fin+'\n'
167 def get_mess_fatal(self):
169 Retourne une chaine de caractères contenant les messages de
170 la liste crfatal (du dernier au premier)
172 self.crfatal.reverse()
174 for elem in self.crfatal :
176 self.crfatal.reverse()
179 def get_mess_exception(self):
181 Retourne une chaine de caractères contenant les messages
182 de la liste crexception (du dernier au premier)
184 self.crexception.reverse()
186 for elem in self.crexception :
188 self.crexception.reverse()
194 def justify_text_old(texte='',cesure=50):
196 Prend la chaine de caractères 'texte' et la retourne avec un retour chariot
197 tous les 'cesure' caractères s'il y a lieu (le retour chariot est placé dans un blanc
198 et non au milieu d'un mot
200 texte = string.strip(texte)
201 if len(texte) < cesure : return texte
202 liste_lignes = string.split(texte,'\n')
204 for ligne in liste_lignes :
205 ligne = string.strip(ligne)
206 if len(ligne) <= cesure :
207 texte_justifie = texte_justifie + ligne + '\n'
211 liste_mots = string.split(ligne,' ')
212 for mot in liste_mots :
213 new_longueur = longueur + len(mot)+1
214 if new_longueur < cesure :
215 new_text = new_text+' '+mot
216 longueur = longueur + len(mot) + 1
219 new_text = new_text + '\n'+mot
220 texte_justifie = texte_justifie + string.strip(new_text) + '\n'
221 return texte_justifie[0:-1]
223 def encadre_message_old(texte,motif):
225 Retourne la chaine de caractères texte entourée d'un cadre formés
228 texte = justify_text(texte,cesure=80)
229 lignes = string.split(texte,'\n')
231 for ligne in lignes :
232 if len(ligne)> longueur : longueur = len(ligne)
233 longueur = longueur + 4
234 txt = motif*longueur+'\n'
235 for ligne in lignes :
236 txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
237 txt = txt + motif*longueur+'\n'
243 separateurs=(' ',',','/')
244 def split(ligne,cesure):
245 ligne= string.rstrip(ligne)
246 if len(ligne) <= cesure :
250 while ligne[coupure] not in separateurs and coupure > 0:
251 coupure = coupure - 1
253 # Il faut augmenter la cesure
255 while ligne[coupure] not in separateurs and coupure < len(ligne)-1 :
256 coupure = coupure + 1
257 if coupure == len(ligne)-1:
260 return ligne[:coupure+1]+ '\n' + split(ligne[coupure+1:],cesure)
262 def justify_text(texte='',cesure=50):
263 texte = string.strip(texte)
264 liste_lignes = string.split(texte,'\n')
265 l=[split(l,cesure) for l in liste_lignes]
266 texte_justifie=string.join(l,'\n')
267 return texte_justifie
269 def encadre_message(texte,motif):
271 Retourne la chaine de caractères texte entourée d'un cadre formés
274 texte = justify_text(texte,cesure=80)
275 lignes = string.split(texte,'\n')
277 for ligne in lignes :
278 ligne=string.rstrip(ligne)
279 if len(ligne)> longueur : longueur = len(ligne)
280 longueur = longueur + 4
281 txt = motif*longueur+'\n'
282 for ligne in lignes :
283 txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
284 txt = txt + motif*longueur+'\n'