1 """ Ce module contient la classe compte-rendu de validation
8 Classe servant à la construction et à l'affichage des objets Comptes-rendus
10 def __init__(self,verbeux = 'non',debut='',fin='',dec=' '):
18 self.verbeux = verbeux
29 """ Ajoute un commentaire OK à la liste crok"""
30 self.crok.append(comment)
32 def warn(self,comment):
33 """ Ajoute un commentaire Warning à la liste crwarn"""
34 self.crwarn.append(comment)
36 def fatal(self,comment):
37 """ Ajoute un commentaire Erreur Fatale à la liste crfatal"""
38 self.crfatal.append(comment)
40 def exception(self,comment):
41 """ Ajoute un commentaire Exception à la liste crexception"""
42 self.crexception.append(comment)
45 """ Ajoute un objet CR à la liste subcr :il s'agit de l'objet CR d'un fils de self """
50 Retourne 1 si self ne contient aucun message grave (fatal ou exception) et
51 aucun CR qui en contienne,
54 if self.crexception : return 0
55 if self.crfatal : return 0
57 if not s.estvide(): return 0
62 Purge complètement le CR sauf les exceptions
72 def beautifie_messages(self):
74 Beautifie les messages stockés dans crok,crfatal,crexception et crwarn
77 for mess in self.crok:
81 for mess in self.crwarn:
82 l.append(encadre_message(mess,'*'))
85 for mess in self.crfatal:
86 l.append(encadre_message(mess,'!'))
87 self.crfatal_belle = l
89 for mess in self.crexception:
90 l.append(encadre_message(mess,'!'))
91 self.crexception_belle = l
95 Insère en tete de chaque ligne du texte s la chaine self.dec
97 l = string.split(s,'\n')
98 return self.dec+string.join(l,'\n'+self.dec)[:-3]
102 Retourne une chaîne de caractères décorée et représentative de self
105 self.beautifie_messages()
106 s=s+string.join(self.crok_belle)
107 s=s+string.join(self.crwarn_belle)
108 s=s+string.join(self.crfatal_belle)
109 s=s+string.join(self.crexception_belle)
110 for subcr in self.subcr:
111 if self.verbeux == 'oui':
114 if not subcr.estvide():
117 s=self.debut+'\n'+self.indent(s)+self.fin+'\n'
119 s=self.debut+'\n'+self.fin+'\n'
122 def report(self,decalage = 2):
124 Retourne une chaîne de caractères non encadrée mais représentative de self
127 # on stocke dans s les messages de premier niveau
128 for mess in self.crok :
129 s=s + decalage*self.dec + mess + self.dec + '\n'
130 for mess in self.crwarn:
131 s=s + decalage*self.dec + mess + self.dec + '\n'
132 for mess in self.crfatal:
133 s=s + decalage*self.dec + mess + self.dec + '\n'
134 for mess in self.crexception:
135 s=s + decalage*self.dec + mess + self.dec + '\n'
136 # on récupère les messages des sous comptes-rendus ...
137 for subcr in self.subcr:
138 if not subcr.estvide():
139 s=s+subcr.report(decalage = decalage + 1)
140 # on rajoute les flags de début et de fin ... (si self n'est pas vide)
141 if not self.estvide() :
142 s = (decalage-1)*self.dec+self.debut+'\n'+s+ \
143 (decalage-1)*self.dec+self.fin+'\n'
146 def get_mess_fatal(self):
148 Retourne une chaîne de caractères contenant les messages de
149 la liste crfatal (du dernier au premier)
151 self.crfatal.reverse()
153 for elem in self.crfatal :
155 self.crfatal.reverse()
158 def get_mess_exception(self):
160 Retourne une chaîne de caractères contenant les messages
161 de la liste crexception (du dernier au premier)
163 self.crexception.reverse()
165 for elem in self.crexception :
167 self.crexception.reverse()
173 def justify_text(texte='',cesure=50):
175 Prend la chaîne de caractères 'texte' et la retourne avec un retour chariot
176 tous les 'cesure' caractères s'il y a lieu (le retour chariot est placé dans un blanc
177 et non au milieu d'un mot
179 texte = string.strip(texte)
180 if len(texte) < cesure : return texte
181 liste_lignes = string.split(texte,'\n')
183 for ligne in liste_lignes :
184 ligne = string.strip(ligne)
185 if len(ligne) <= cesure :
186 texte_justifie = texte_justifie + ligne + '\n'
190 liste_mots = string.split(ligne,' ')
191 for mot in liste_mots :
192 new_longueur = longueur + len(mot)+1
193 if new_longueur < cesure :
194 new_text = new_text+' '+mot
195 longueur = longueur + len(mot) + 1
198 new_text = new_text + '\n'+mot
199 texte_justifie = texte_justifie + string.strip(new_text) + '\n'
200 return texte_justifie[0:-1]
202 def encadre_message(texte,motif):
204 Retourne la chaîne de caractères texte entourée d'un cadre formés
207 texte = justify_text(texte,cesure=80)
208 lignes = string.split(texte,'\n')
210 for ligne in lignes :
211 if len(ligne)> longueur : longueur = len(ligne)
212 longueur = longueur + 4
213 txt = motif*longueur+'\n'
214 for ligne in lignes :
215 txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
216 txt = txt + motif*longueur+'\n'