diff --git a/impression/backend/laserjet b/impression/backend/laserjet index 383cc18e..f2f43105 100755 --- a/impression/backend/laserjet +++ b/impression/backend/laserjet @@ -7,11 +7,7 @@ # Licence : GNU General Public Licence, version 2 #TODO -#Recuperer le nom de pa machine dans les arguments -#pour l'envoyer a pjl_comm -#il est dans envp[11]="DEVICE_URI=laserjet://laserjet" -# -#Lire ce que reponds l'imprimante jusqu'a voir pages +#Parser ce que réponds l'imprimante # import sys,os @@ -22,6 +18,8 @@ sys.path.append('/usr/scripts/gestion') from config import impression from ldap_crans import crans_ldap import tempfile +import time + base=crans_ldap() @@ -105,22 +103,15 @@ else : # Lecture sur stdin entree = sys.stdin - #recuperation du nom de l'utilisateur - user=sys.argv[2] - #recuperation de l'adherent en écriture - res=base.search("login=%s"%user,'w')['adherent'] - #si on ne trouve rien - if len(res) != 1 : - sys.stderr.write("ERROR: Erreur : adherent %s non trouvé\n" % user) -# import smtplib -# conn = smtplib.SMTP('localhost') -# titre="L\'adherent n\'existe pas" -# corps="Ceci est surement un probleme dans la base\nL\'utilisateur %s existe dans le fichier de mot de passe mais n\'est pas dans la base ldap" %user -# conn.sendmail(From_imprimante, From_imprimante , mail_err % (sys.argv[1],titre,corps)) -# conn.quit() - - sys.exit(0) # on ne stoppe pas l'imprimante - adherent=res[0] +#recuperation du nom de l'utilisateur +user=sys.argv[2] +#recuperation de l'adherent en écriture +res=base.search("login=%s"%user,'w')['adherent'] +#si on ne trouve rien +if len(res) != 1 : + sys.stderr.write("ERROR: Erreur : adherent %s non trouvé\n" % user) + sys.exit(0) # on ne stoppe pas l'imprimante +adherent=res[0] #\x1B est le caractere d'échappement échap. @@ -195,12 +186,12 @@ elif err_solde: else: #Adaptation de la facture - if 1: -# try: + try: #Envoi du fichier a l'imprimante nom_fic2=tempfile.mktemp() if(prix.recto_v=='Recto'): sys.stderr.write("DEBUG: Ceci est un recto simple, on inverse juste l'ordre..\n" ) + os.system("cp %s %s " % (nom_fic, nom_fic2)) os.system("psselect -r %s > %s " % (nom_fic, nom_fic2)) else: sys.stderr.write("DEBUG: recto verso on permute deux a deux..\n" ) @@ -210,13 +201,13 @@ else: sys.exit(0) else: sys.stderr.write("DEBUG: nombre de faces pair..\n" ) - os.system("cat %s > %s " % (nom_fic, nom_fic2)) liste_pages="" for i in range(1,int(prix.faces/2)+1): liste_pages+=str(2*i)+","+str(2*i-1)+"," #on enleve la virgule superflue liste_pages=liste_pages[:-1] sys.stderr.write("DEBUG: Liste pages : %s\n" % liste_pages ) + os.system("cp %s %s " % (nom_fic, nom_fic2)) os.system("psselect -p%s %s > %s 2>/dev/null" % (liste_pages, nom_fic, nom_fic2)) sys.stderr.write("DEBUG: Envoi du fichier..\n" ) @@ -231,11 +222,13 @@ else: # imprimante.pjl_command('SET OUTBIN=LOWER') #a tester # imprimante.pjl_command('SET OUTBIN=UPPER') #a tester imprimante.write_postscript(nom_fic2, user, nom_adher) + os.system("cp %s /tmp/last_printed.ps" % nom_fic2) + os.system("chmod 666 /tmp/last_printed.ps") + os.system("rm %s" % nom_fic2) - import time message=imprimante.pjl_read() i=0 - sys.stderr.write("DEBUG: Message : %s\n" %message ) + sys.stderr.write("DEBUG: Message de l'imprimante : \n%s\n" %message ) while(message.find("PAGES=")==-1 and i<200): message=imprimante.pjl_read() sys.stderr.write("DEBUG: Message : %s\n" %message ) @@ -281,10 +274,23 @@ else: #envoi du mail avec le code et le prix prix.send_mail("%(nom)s <%(adrmail)s>" % {'nom' : nom_adher, 'adrmail' : adrmail}, sujet, mail_ok % {'solde' : solde, 'blocage' : str(impression.decouvert), 'code' : code }) - else: -# except: + except: sys.stderr.write("ERROR: Erreur , impression annulée" ) - prix.send_mail("%(nom)s <%(adrmail)s>" % {'nom' : nom_adher, 'adrmail' : adrmail}, sujet, mail_err % {'erreur' : u"Le fichier n'a pu être imprimé, veuillez reessayer plus tard.\n"} ) + prix.send_mail("%(nom)s <%(adrmail)s>" % {'nom' : nom_adher, 'adrmail' : adrmail}, sujet, mail_err % {'erreur' : u"Le fichier n'a pu être imprimé, \veuillez reessayer plus tard.\n"} ) + # Report de bug + import traceback + from cStringIO import StringIO + + s = StringIO() + sys.stderr = s + traceback.print_exc() + sys.stderr = sys.__stderr__ + traceback = s.getvalue() + try: + prix.send_mail("Impression <%s>" % impression.From_imprimante , "ERREUR " + sujet, "Une erreur c'est produite lors de cette impression, voici le compte rendu :\n" + traceback) + sys.stderr.write("INFO: Un rapport de bug à été automatiquement envoyé.\n") + except : + sys.stderr.write("ERROR: Impossible d'envoyer le rapport de bug.\n") # On loggue ce que ne loggue pas cups quelquepart ?