Les bugs levent maintenant une exception ErreurImpression qui est rattrape

par le programme qui utilise la classe. Les instances possèdnt un argument
decrivant le bug.

darcs-hash:20060206224940-9e428-4229182beacbd7b0d7defa35c3d8f9ff35acb806.gz
This commit is contained in:
bobot 2006-02-06 23:49:40 +01:00
parent 4588607029
commit 5dc4f0cccf

View file

@ -8,7 +8,7 @@ Inspir
Licence : GNU General Public Licence, version 2
"""
import sys, time, tempfile, os, commands, string, random
import sys, time, tempfile, os, commands, string, random, syslog
sys.path.append('/usr/scripts/impression')
sys.path.append('/usr/scripts/gestion')
from config import impression
@ -18,6 +18,15 @@ duree_vie_pdf=3600
#fonction principal: impression (fichier_impression)
################################################################################
class ErreurImpression(Exception):
def __init__(self, value):
self.value=value
def __str__(self):
return repr(self.value)
################################################################################
class test:
@ -74,7 +83,8 @@ class fichier_impression :
self.erreur_critique = True
self.list_messages_importants.append('erreur_critique')
self.list_messages_admin.append('erreur_cout')
sys.stderr.write(retour)
syslog.openlog("impression")
syslog.syslog(retour)
# Repond vrai si le solde est assez élevé.
def test_cout(self):
@ -167,6 +177,9 @@ class fichier_impression :
(status,rep) = commands.getstatusoutput("lpr %s %s" % (options, self.nom_fichier_pdf))
if status != 0:
print "<p>status:%d rep: %s</p>" % (status, rep)
syslog.openlog("impression")
syslog.syslog("lpr status:%d | rep: %s" % (status, rep))
def corrige(self):
# Trouve le nombre de pages
@ -207,18 +220,26 @@ class fichier_impression :
return "<p>%s</p>" % body
def enregistre_pdf(self, f_value, f_nom, dossier):
syslog.openlog("impression")
try :
(fd_fichier_desc, self.nom_fichier_desc) = tempfile.mkstemp(suffix='.desc', prefix='job', dir=dossier)
os.close(fd_fichier_desc)
except Exception , inst:
raise ErreurImpression("class :erreur dans creation de desc %s : %s" % (self.nom_fichier_desc,str(inst)))
self.nom_fichier_pdf = self.nom_fichier_desc.replace('.desc', '.pdf')
try :
fd_fichier_pdf = open(self.nom_fichier_pdf, 'w')
fd_fichier_pdf.write(f_value)
fd_fichier_pdf.close()
except Exception, inst:
raise ErreurImpression("class :erreur dans enregistrement du .pdf %s: %s" % (self.nom_fichier_pdf,str(inst)))
os.chmod(self.nom_fichier_pdf, 0640)
os.chmod(self.nom_fichier_desc, 0640)
self.nbr_pages = int(os.popen("pdfinfo '%s' | grep Pages " % (self.nom_fichier_pdf)).readline().split()[1])
self.modif_epoch = time.time()
def sauve_desc(self):
try :
file_obj_desc = open(self.nom_fichier_desc,'w')
for key in ("erreur_critique", "nom_job", "nbr_pages",
"nb_copie","taille", "recto_verso",
@ -228,8 +249,11 @@ class fichier_impression :
"code", "modif_epoch", "job_id"):
file_obj_desc.write(key+"="+str(getattr(self,key))+"\n")
file_obj_desc.close()
except Exception, inst :
raise ErreurImpression("class : erreur dans enregistrement du .desc %s : %s" % (self.nom_fichier_desc,str(inst)))
def read_desc(self):
try :
file_obj_desc = open(self.nom_fichier_desc, 'r')
ligne = file_obj_desc.readline()[0:-1]
while ligne != "":
@ -258,10 +282,14 @@ class fichier_impression :
print '<p>ligne non parsée: %s</p>' % ligne
ligne=file_obj_desc.readline()[0:-1]
file_obj_desc.close()
# Vérifie que le fichier existe bien si il doit exister.
except Exception, inst :
raise ErreurImpression("class : erreur dans l'ouverture du .desc %s : %s" % (self.nom_fichier_desc,repr(inst)))
# Verifie que le fichier pdf existe bien si il doit exister.
if not os.path.exists(self.nom_fichier_pdf):
if self.imprime != -3:
self.imprime = -4
syslog.openlog("impression")
syslog.syslog("class : %s a disparue" % self.nom_fichier_pdf)
def __repr__(self):
@ -313,8 +341,7 @@ def utilisateur(user, rw):
# Impression en local avec les certificats (possible pour le groupe adm)
if user == "root":
sys.stderr.write("ERROR: Utilisateur root passe en parametre.\n")
sys.exit(0) # On conclue l'impression
raise ErreurImpression("class : Utilisateur root passe en parametre.")
# Récupération de l'adhérent
try:
@ -324,16 +351,14 @@ def utilisateur(user, rw):
else:
res = base.search("login=%s" % user)['adherent']
except:
print ("ERROR: Erreur : Base LDAP non joignable\n")
sys.exit(0) # On arrete l'avant-impression ?on arrete l'imprimante?
raise ErreurImpression("class : Base LDAP non joignable.")
# Si on ne trouve rien :
if len(res) != 1 :
print ("ERROR: Erreur : adherent %s introuvable\n" % user)
sys.exit(0) # On conclue l'avant-impression sans stopper l'imprimante
raise ErreurImpression("class : adherent %s introuvable\n" % user)
adherent = res[0]
sys.stderr.write("DEBUG: Adherent %s (aid=%s) recupere.\n" % (user, adherent.id()))
syslog.openlog("impression")
syslog.syslog(syslog.LOG_DEBUG,"class : Adherent %s (aid=%s) recupere.\n" % (user, adherent.id()))
return adherent
################################################################################
@ -372,7 +397,7 @@ def cout(fic_impr):
# Convertit les pdf en png couleur
(status, rep) = commands.getstatusoutput("nice -n 5 gs -sDEVICE=png16m -r30 -dBATCH -dNOPAUSE -dSAFER -dPARANOIDSAFER -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dMaxBitmap=50000000 -sOutputFile=%s -q %s" % (nom_png,fic_impr.nom_fichier_pdf))
if status:
return "ERREUR : Fichier invalide. Aucun png n'a été créé.\n"
return "ERREUR : Fichier invalide. Aucun png n'a ete cree.\n"
# Récupère la liste des fichiers
list_filepng=os.listdir(nom_rep)