diff --git a/impression/class_impression.py b/impression/class_impression.py index 2a677b52..b23c3122 100755 --- a/impression/class_impression.py +++ b/impression/class_impression.py @@ -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 "
status:%d rep: %s
" % (status, rep) + syslog.openlog("impression") + syslog.syslog("lpr status:%d | rep: %s" % (status, rep)) + def corrige(self): # Trouve le nombre de pages @@ -207,61 +220,76 @@ class fichier_impression : return "%s
" % body def enregistre_pdf(self, f_value, f_nom, dossier): - (fd_fichier_desc, self.nom_fichier_desc) = tempfile.mkstemp(suffix='.desc', prefix='job', dir=dossier) - os.close(fd_fichier_desc) + 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') - fd_fichier_pdf = open(self.nom_fichier_pdf, 'w') - fd_fichier_pdf.write(f_value) - fd_fichier_pdf.close() + 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): - file_obj_desc = open(self.nom_fichier_desc,'w') - for key in ("erreur_critique", "nom_job", "nbr_pages", - "nb_copie","taille", "recto_verso", - "transparent", "couleur", "cout", - "portrait", "user", "imprime", - "nom_fichier_pdf", "nom_fichier_desc", - "code", "modif_epoch", "job_id"): - file_obj_desc.write(key+"="+str(getattr(self,key))+"\n") - file_obj_desc.close() - + try : + file_obj_desc = open(self.nom_fichier_desc,'w') + for key in ("erreur_critique", "nom_job", "nbr_pages", + "nb_copie","taille", "recto_verso", + "transparent", "couleur", "cout", + "portrait", "user", "imprime", + "nom_fichier_pdf", "nom_fichier_desc", + "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): - file_obj_desc = open(self.nom_fichier_desc, 'r') - ligne = file_obj_desc.readline()[0:-1] - while ligne != "": - parse = ligne.split("=") - if parse[1] == 'None': - setattr(self,parse[0],None) - else: - if parse[0] in ("nom_job", "taille", "user", - "nom_fichier_pdf", "nom_fichier_desc", - "job_id"): - setattr(self,parse[0],parse[1]) + try : + file_obj_desc = open(self.nom_fichier_desc, 'r') + ligne = file_obj_desc.readline()[0:-1] + while ligne != "": + parse = ligne.split("=") + if parse[1] == 'None': + setattr(self,parse[0],None) else: - if parse[0] in ("nbr_pages", "nb_copie", - "imprime", "code"): - setattr(self,parse[0],int(parse[1])) + if parse[0] in ("nom_job", "taille", "user", + "nom_fichier_pdf", "nom_fichier_desc", + "job_id"): + setattr(self,parse[0],parse[1]) else: - if parse[0] in ("recto_verso", "transparent", - "couleur", "portrait", - "erreur_critique"): - setattr(self,parse[0],(parse[1] == 'True')) + if parse[0] in ("nbr_pages", "nb_copie", + "imprime", "code"): + setattr(self,parse[0],int(parse[1])) else: - if parse[0] in ("cout", "modif_epoch"): - setattr(self, parse[0], float(parse[1])) + if parse[0] in ("recto_verso", "transparent", + "couleur", "portrait", + "erreur_critique"): + setattr(self,parse[0],(parse[1] == 'True')) else: - self.erreur_critique = True - print 'ligne non parsée: %s
' % ligne - ligne=file_obj_desc.readline()[0:-1] - file_obj_desc.close() - # Vérifie que le fichier existe bien si il doit exister. + if parse[0] in ("cout", "modif_epoch"): + setattr(self, parse[0], float(parse[1])) + else: + self.erreur_critique = True + print 'ligne non parsée: %s
' % ligne + ligne=file_obj_desc.readline()[0:-1] + file_obj_desc.close() + 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)