2 # Copyright (C) 2007-2021 EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 """ Ce module contient la classe compte-rendu de validation
24 from __future__ import absolute_import
26 from builtins import str
27 from builtins import object
36 Classe servant a la construction et a l'affichage des objets Comptes-rendus
39 def __init__(self, verbeux='non', debut='', fin='', dec=' '):
47 self.verbeux = verbeux
57 def ok(self, comment):
58 """ Ajoute un commentaire OK a la liste crok"""
59 self.crok.append(comment)
61 def warn(self, comment):
62 """ Ajoute un commentaire Warning a la liste crwarn"""
63 self.crwarn.append(comment)
65 def fatal(self, comment, *args):
66 """Ajoute un commentaire Erreur Fatale a la liste crfatal a formater"""
67 self.crfatal.append(comment)
68 self.crfatal.append(str( *args))
70 def exception(self, comment):
71 """ Ajoute un commentaire Exception a la liste crexception"""
72 self.crexception.append(comment)
75 """ Ajoute un objet CR a la liste subcr :il s'agit de l'objet CR d'un fils de self """
80 Retourne 1 si self ne contient aucun message grave (fatal ou exception)
81 et aucun CR qui en contienne, 0 sinon
94 Purge complètement le CR sauf les exceptions
104 def beautifieMessages(self):
106 Beautifie les messages stockés dans crok,crfatal,crexception et crwarn
109 for mess in self.crok:
110 l.append(mess + '\n')
113 for mess in self.crwarn:
114 l.append(encadreMessage(mess, '*'))
115 self.crwarn_belle = l
117 for mess in self.crfatal:
118 l.append(encadreMessage(mess, '!'))
119 self.crfatal_belle = l
121 for mess in self.crexception:
122 l.append(encadreMessage(mess, '!'))
123 self.crexception_belle = l
127 Insère en tete de chaque ligne du texte s la chaine self.dec
131 return self.dec + a.join(l)[:-3]
133 def __unicode__(self):
135 Retourne une chaine de caractères décorée et représentative de self
138 self.beautifieMessages()
139 s = s + ''.join(self.crok_belle)
140 s = s + ''.join(self.crwarn_belle)
141 s = s + ''.join(self.crfatal_belle)
142 s = s + ''.join(self.crexception_belle)
143 for subcr in self.subcr:
144 if self.verbeux == 'oui':
145 s = s + six.text_type(subcr) + '\n'
147 if not subcr.estvide():
148 s = s + six.text_type(subcr)
150 s = self.debut + '\n' + self.indent(s) + self.fin + '\n'
152 s = self.debut + '\n' + self.fin + '\n'
156 """Return the report representation"""
157 txt = self.__unicode__()
160 def report(self, decalage=2):
162 Retourne une chaine de caractères non encadrée mais représentative de self
165 # on stocke dans s les messages de premier niveau
166 for mess in self.crok:
167 s = s + decalage * self.dec + mess + self.dec + '\n'
168 for mess in self.crwarn:
169 s = s + decalage * self.dec + mess + self.dec + '\n'
170 for mess in self.crfatal:
171 s = s + decalage * self.dec + mess + self.dec + '\n'
172 for mess in self.crexception:
173 s = s + decalage * self.dec + mess + self.dec + '\n'
174 # on récupère les messages des sous comptes-rendus ...
175 for subcr in self.subcr:
176 if not subcr.estvide():
177 s = s + subcr.report(decalage=decalage + 1)
178 # on rajoute les flags de début et de fin ... (si self n'est pas vide)
179 if not self.estvide():
180 s = (decalage - 1) * self.dec + self.debut + '\n' + s + \
181 (decalage - 1) * self.dec + self.fin + '\n'
184 def getMessFatal(self):
186 Retourne une chaine de caractères contenant les messages de
187 la liste crfatal (du dernier au premier)
189 self.crfatal.reverse()
191 for elem in self.crfatal:
193 self.crfatal.reverse()
196 def getMessException(self):
198 Retourne une chaine de caractères contenant les messages
199 de la liste crexception (du dernier au premier)
201 self.crexception.reverse()
203 for elem in self.crexception:
205 self.crexception.reverse()
209 separateurs = (' ', ',', '/')
212 def split(ligne, cesure):
213 ligne = ligne.rstrip()
214 if len(ligne) <= cesure:
218 while ligne[coupure] not in separateurs and coupure > 0:
219 coupure = coupure - 1
221 # Il faut augmenter la cesure
223 while ligne[coupure] not in separateurs and coupure < len(ligne) - 1:
224 coupure = coupure + 1
225 if coupure == len(ligne) - 1:
228 return ligne[:coupure + 1] + '\n' + split(ligne[coupure + 1:], cesure)
231 def justifyText(texte='', cesure=50):
232 if not isinstance (texte,str) : texte = ''.join(texte)
233 texte = texte.strip()
234 liste_lignes = texte.split('\n')
235 l = [split(l, cesure) for l in liste_lignes]
236 texte_justifie = '\n'.join(l)
237 return texte_justifie
240 def encadreMessage(texte, motif):
242 Retourne la chaine de caractères texte entourée d'un cadre formés
245 texte = justifyText(texte, cesure=80)
246 if texte.strip() == "" : return ''
247 lignes = texte.split( '\n')
250 ligne = ligne.rstrip()
251 if len(ligne) > longueur:
252 longueur = len(ligne)
253 longueur = longueur + 4
254 txt = motif * longueur + '\n'
256 if ligne == '' : continue
257 txt = txt + motif + ' ' + ligne + ' ' * \
258 (longueur - len(motif + ligne) - 2) + motif + '\n'
259 txt = txt + motif * longueur + '\n'