From 8c6816b511cf1a9f25bd40ea32f19e2e5b6f384d Mon Sep 17 00:00:00 2001 From: Antoine Durand-Gasselin Date: Fri, 15 May 2009 12:52:40 +0200 Subject: [PATCH] [impression] maj de class_impression pour la nouvelele imprimante Ignore-this: 5a2a03b33fa00ec84dca5fe353dd2659 darcs-hash:20090515105240-bd074-9d8f99c09b4c2f53110fa766e57ee1001205dcbb.gz --- impression/class_impression.py | 101 +++++++++++++++++---------------- impression/etat_imprimante.py | 48 ++++++++++------ impression/imprime.py | 40 ++++++------- 3 files changed, 104 insertions(+), 85 deletions(-) diff --git a/impression/class_impression.py b/impression/class_impression.py index aaea5f78..b6cae7bb 100644 --- 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 sys.path.append('/usr/scripts/impression') sys.path.append('/usr/scripts/gestion') from config import impression @@ -17,7 +17,7 @@ from syslog import openlog, syslog, LOG_DEBUG from gen_code import NoCodeError, new_code -duree_vie_pdf=3600 +duree_vie_pdf = 3600 #fonction principal: impression (fichier_impression) @@ -25,7 +25,7 @@ duree_vie_pdf=3600 class ErreurImpression(Exception): def __init__(self, value): - self.value=value + self.value = value def __str__(self): return repr(self.value) @@ -37,7 +37,7 @@ class test: return u"francois.bobot@crans.org" def Nom(self): return u"francois" - def solde(self,modif=0.): + def solde(self, modif=0.): return (40.+modif) def save(self): pass @@ -56,7 +56,7 @@ class fichier_impression: cout = 0.0 portrait = True livret = False - agrafe= "None" # TopLeft, Top, TopRight, Left, Right, BottomLeft, BottomRight + agrafe = "None" # TopLeft, Top, TopRight, Left, Right, BottomLeft, BottomRight user = "" user_ldap = None # sera une instance de l'utilisateur dans la base ldap. imprime = -1 #-2 impression en suspend, -1 mise dans la file @@ -127,10 +127,10 @@ class fichier_impression: sys.stderr.write("ERROR: Penser a ouvrir a l'adherent debite...\n") return - def impression_canon(self) + def impression_canon(self): """ Envoie l'impression a l'imprimante avec les parametres actuels """ # Envoi du fichier à CUPS - options ='' + options = '' # Création de la liste d'options # pour le nombre de copies et specifie non assemblee #options += '-# %d -o Collate=True' % self.nb_copies @@ -185,7 +185,7 @@ class fichier_impression: else: options += ' -o OutputBin=TrayA' - (status,rep) = commands.getstatusoutput("lpr %s -# %d %s" % (options, self.nb_copies, self.nom_fichier_pdf)) + (status, rep) = commands.getstatusoutput("lpr %s -# %d %s" % (options, self.nb_copies, self.nom_fichier_pdf)) if status != 0: print "

status:%d rep: %s

" % (status, rep) openlog("impression") @@ -195,7 +195,7 @@ class fichier_impression: def impression_laserjet(self): """ Envoie l'impression a l'imprimante avec les parametres actuels """ # Envoi du fichier à CUPS - options ='' + options = '' # Création de la liste d'options # pour le nombre de copies et specifie non assemblee #options += '-# %d -o Collate=True' % self.nb_copies @@ -210,10 +210,10 @@ class fichier_impression: options += ' -o pdf-level3' # Pour donner le titre de l'impression - options += " -T \"%s\"" % self.nom_job.replace("\"","\\\"") + options += " -T \"%s\"" % self.nom_job.replace("\"", "\\\"") # Pour donner le login de l'adherent - options += ' -U \"%s\"' % self.user.replace("\"","\\\"") + options += ' -U \"%s\"' % self.user.replace("\"", "\\\"") # Pour demander une page de garde #options += ' -o job-sheets=crans' #page de garde de type standard @@ -223,17 +223,17 @@ class fichier_impression: #Indique la présence d'un bac de sortie avec agrafeuse options += " -o Option20=MBMStaplerStacker -o OutputBin=StackerDown" - if self.agrafe==-1: + if self.agrafe == -1: options += ' -o StapleLocation=1diagonal' - elif self.agrafe==0: + elif self.agrafe == 0: options += ' -o StapleLocation=None' - elif self.agrafe==1: + elif self.agrafe == 1: options += ' -o StapleLocation=1parallel' - elif self.agrafe==2: + elif self.agrafe == 2: options += ' -o StapleLocation=2parallel' - elif self.agrafe==3: + elif self.agrafe == 3: options += ' -o StapleLocation=3parallel' - elif self.agrafe==6: + elif self.agrafe == 6: options += ' -o StapleLocation=Stitching' if self.transparent: @@ -254,9 +254,9 @@ class fichier_impression: else: options += ' -o sides=one-sided' options += ' -o HPColorasGray=%s' % (not self.couleur) - liste_nom_fichier_pdf=(' '+self.nom_fichier_pdf)*self.nb_copies + liste_nom_fichier_pdf = (' '+self.nom_fichier_pdf)*self.nb_copies #(status,rep) = commands.getstatusoutput("lpr %s %s" % (options, self.nom_fichier_pdf)) - (status,rep) = commands.getstatusoutput("lpr %s %s" % (options, liste_nom_fichier_pdf)) + (status, rep) = commands.getstatusoutput("lpr %s %s" % (options, liste_nom_fichier_pdf)) if status != 0: print "

status:%d rep: %s

" % (status, rep) openlog("impression") @@ -273,7 +273,7 @@ class fichier_impression: # Transparent, paper, nbr_page, recto_verso if (self.taille != 'A4') & (self.taille != 'A3'): self.list_messages_importants.append("paper") - self.erreur_critique=True + self.erreur_critique = True if self.transparent: if self.paper != 'A4': self.list_messages.append("A3 transparent") @@ -292,12 +292,12 @@ class fichier_impression: """ if self.imprime: - body=string.join(map ((dico_message_laserjet.get),self.list_messages_importants)) + body=string.join(map ((dico_message_laserjet.get), self.list_messages_importants)) if len(self.list_messages)<>0: - body=body+'\nRemarques:\n'+string.join(map ((dico_message_laserjet.get),self.list_messages)) + body=body+'\nRemarques:\n'+string.join(map ((dico_message_laserjet.get), self.list_messages)) else: - body=string.join(map ((dico_message_devis.get),self.list_messages_importants)) - body=body+'\nRemarque:\n'+string.join(map ((dico_message_devis.get),self.list_messages)) + body=string.join(map ((dico_message_devis.get), self.list_messages_importants)) + body=body+'\nRemarque:\n'+string.join(map ((dico_message_devis.get), self.list_messages)) body=body % {'taille' : self.taille, 'code' : self.code, 'solde' : self.user_ldap.solde(), 'cout' : self.cout , 'adresse_imprimante' : impression.From_imprimante} """ @@ -323,14 +323,14 @@ class fichier_impression: 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))) + 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) if self.taille == 'A3': pdfbook = "pdfbook --paper a3paper %s" else: pdfbook = "pdfbook %s" - (status,rep) = commands.getstatusoutput(pdfbook % self.nom_fichier_pdf) + (status, rep) = commands.getstatusoutput(pdfbook % self.nom_fichier_pdf) self.nom_fichier_pdf = "%s-book.pdf" % self.nom_fichier_pdf[:-4] if status != 0: print "

status:%d rep: %s

" % (status, rep) @@ -350,10 +350,10 @@ class fichier_impression: "portrait", "user", "imprime", "livret", "nom_fichier_pdf", "nom_fichier_desc", "code", "modif_epoch", "job_id","agrafe"): - file_obj_desc.write(key+"="+str(getattr(self,key))+"\n") + 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))) + raise ErreurImpression("class : erreur dans enregistrement du .desc %s : %s" % (self.nom_fichier_desc, str(inst))) def read_desc(self): @@ -364,16 +364,16 @@ class fichier_impression: while ligne != "": parse = ligne.split("=") if parse[1] == 'None': - setattr(self,parse[0],None) + setattr(self, parse[0], None) elif parse[0] in ("nom_job", "taille", "user", "nom_fichier_pdf", "nom_fichier_desc", "job_id", "agrafe"): #pour les attributs strings - setattr(self,parse[0],parse[1]) + setattr(self, parse[0], parse[1]) elif parse[0] in ("nbr_pages", "nb_copies", "imprime", "code"): #pour les attributs entiers - setattr(self,parse[0],int(parse[1])) + setattr(self, parse[0], int(parse[1])) elif parse[0] in ("recto_verso", "transparent", "couleur", "portrait", "erreur_critique", "livret"): #pour les attributs boolean - setattr(self,parse[0],(parse[1] == 'True')) + setattr(self, parse[0], (parse[1] == 'True')) elif parse[0] in ("cout", "modif_epoch"): #pour les attributs flottants setattr(self, parse[0], float(parse[1])) @@ -381,10 +381,10 @@ class fichier_impression: self.erreur_critique = True print '

ligne non parsée: %s

' % ligne - ligne=file_obj_desc.readline()[0:-1] + 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))) + 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: @@ -392,9 +392,9 @@ class fichier_impression: openlog("impression") syslog("class : %s a disparu" % self.nom_fichier_pdf) - def get_attr(self,key): + def get_attr(self, key): """ Fonction obsolete utilise avec cheetah """ - return getattr(self,key) + return getattr(self, key) def __repr__(self): @@ -433,7 +433,7 @@ class fichier_impression: self.code = "%s#" % self.code for key in ("nbr_pages", "nb_copies", "taille", "code"): corps += '%s%s\n' % (key, - str(getattr(self,key))) + str(getattr(self, key))) self.code = self.code[:-1] corps += "\n\n\n\n" @@ -472,7 +472,7 @@ def utilisateur(user, rw): try: base = crans_ldap() if rw: - res = base.search("login=%s" % user,'w')['adherent'] + res = base.search("login=%s" % user, 'w')['adherent'] else: res = base.search("login=%s" % user)['adherent'] except: @@ -483,7 +483,7 @@ def utilisateur(user, rw): raise ErreurImpression("class : adherent %s introuvable\n" % user) adherent = res[0] openlog("impression") - syslog(LOG_DEBUG,"class : Adherent %s (aid=%s) recupere.\n" % (user, adherent.id())) + syslog(LOG_DEBUG, "class : Adherent %s (aid=%s) recupere.\n" % (user, adherent.id())) return adherent ################################################################################ @@ -497,8 +497,7 @@ def cout_canon(fic_impr): un float dans les cas de fonctionnement """ - # taille peut valoir A3 ou A4 - # nb_copies est le nombre de copies désirées + faces = fic_impr.nbr_pages if (fic_impr.recto_verso == False): feuilles = faces # nb de pages par copies @@ -522,14 +521,14 @@ def cout_canon(fic_impr): # Cout des agrafes if fic_impr.agrafe in ["Top", "Bottom", "Left", "Right"] or fic_impr.livret: - nb_agraphes = 2 + nb_agrafes = 2 elif fic_impr.agrafe in ["None", None]: - nb_agraphes = 0 + nb_agrafes = 0 else: - nb_agraphes = 1 + nb_agrafes = 1 if pages <= 50: - c_agrafes =fic nb_agraphes * impression.c_agrafe + c_agrafes = fic.nb_agrafes * impression.c_agrafe else: c_agrafes = 0 @@ -570,12 +569,12 @@ def cout_laserjet(fic_impr): if (fic_impr.couleur): # 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%%d -q %s" % (nom_png,fic_impr.nom_fichier_pdf)) + (status, rep) = commands.getstatusoutput("nice -n 5 gs -sDEVICE=png16m -r30 -dBATCH -dNOPAUSE -dSAFER -dPARANOIDSAFER -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dMaxBitmap=50000000 -sOutputFile=%s%%d -q %s" % (nom_png, fic_impr.nom_fichier_pdf)) if status: return "ERREUR : Fichier invalide. Aucun png n'a ete cree.\n" # Récupère la liste des fichiers - list_filepng=os.listdir(nom_rep) + list_filepng = os.listdir(nom_rep) # Calcule le nombre de pixel de couleur remplissage = [0, 0, 0, 0, 0] # C, M, J, N, nombre de pages for fichier in list_filepng: @@ -592,7 +591,7 @@ def cout_laserjet(fic_impr): else: pages = int(faces/2.+0.5) if total_couleur > 0: - c_total = (c_taille * pages + (impression.c_tambour_coul + + c_total = (c_taille * pages + (impression.c_tambour_coul + impression.c_tambour_noir) * faces + cout_noir * total_noir + cout_coul * total_couleur) else: # Pas de couleur, malgre l'indication @@ -605,7 +604,7 @@ def cout_laserjet(fic_impr): return "ERREUR : Fichier invalide. Aucun png n'a été créé.\n" #récupère la liste des fichiers - list_filepng=os.listdir(nom_rep) + list_filepng = os.listdir(nom_rep) remplissage = [0, 0] # Noir, nombre de pages for fichier in list_filepng: @@ -637,3 +636,7 @@ def cout_laserjet(fic_impr): sys.stderr.write("ERREUR : Impossible d'enlever le dossier.\n") return float(c_total)/100 + + +def cout(fic_impr): + exec ("return cout_%s(fic_impr)" % impression.imprimante) diff --git a/impression/etat_imprimante.py b/impression/etat_imprimante.py index 98ec4ac7..e764ab77 100644 --- a/impression/etat_imprimante.py +++ b/impression/etat_imprimante.py @@ -5,25 +5,26 @@ import sys sys.path.append("/usr/scripts/gestion") import hptools +from config import impression -dico = { - u"PrÁt": u"Prêt", - u"Pr menus, appuy \x1e": u"", - u"Powersave activÅ": u"En veille", - u"Verification": u"Vérification imprimante", - u"imprimante": u"", - u"PrÅchauffage": u"Préchauffage", - u"Traitement de la": u"Impression en cours", - u"tÀche du bac 4": u"", - u"tÀche du bac 3": u"", - u"COMMANDER CARTOUCHE": u"", - u"CYAN": u"", - u"MAGENTA": u"", -} - -def etat(): +def etat_laserjet(): """ Renvoie une liste des differents ecrans actuels du display de l'imprimante """ liste_oid = ["mib-2.43.16.5.1.2.1.1","mib-2.43.16.5.1.2.1.2","mib-2.43.16.5.1.2.1.3","mib-2.43.16.5.1.2.1.4","mib-2.43.16.5.1.2.1.5"] + dico = { + u"PrÁt": u"Prêt", + u"Pr menus, appuy \x1e": u"", + u"Powersave activÅ": u"En veille", + u"Verification": u"Vérification imprimante", + u"imprimante": u"", + u"PrÅchauffage": u"Préchauffage", + u"Traitement de la": u"Impression en cours", + u"tÀche du bac 4": u"", + u"tÀche du bac 3": u"", + u"COMMANDER CARTOUCHE": u"", + u"CYAN": u"", + u"MAGENTA": u"", + } + try: comm = hptools.snmp(host="laserjet.adm.crans.org",version="1",community="public") liste_msg = [] @@ -35,6 +36,21 @@ def etat(): liste_msg.append("[%s]" % unicode(err)) return liste_msg +def etat_canon(): + try: + liste_msg = [] + comm = hptools.snmp(host="imprimante.adm.crans.org", version="1", community="public") + for i in [".hrPrinterStatus.1"; ".hrPrinterDetectedErrorState.1"]: + msg = comm.get_string(oid) + msg = dico.get(msg, msg) + if msg: liste_msg.append(msg) + except Exception,err: + liste_msg.append("[%s]" % unicode(err)) + return liste_msg + +def etat(): + exec ("etat_%()" % impression.imprimante) + def enregistre(filename="/usr/script/impression/imprimante.etat"): l = etat() fichier = open(filename,'w') diff --git a/impression/imprime.py b/impression/imprime.py index ec27111b..4d5f80fd 100644 --- a/impression/imprime.py +++ b/impression/imprime.py @@ -2,9 +2,9 @@ import crans.impression import crans.impression.digicode import crans.ldap_crans_test import os, sys -# ######################################################## # -# COMMAND LINE OPTION # -# ######################################################## # +# ######################################################## # +# COMMAND LINE OPTION # +# ######################################################## # # # OPTIONS_AGRAFES = { @@ -14,7 +14,7 @@ OPTIONS_AGRAFES = { 2: crans.impression.DEUX_AGRAPHE, 3: crans.impression.TROIS_AGRAPHE, 6: crans.impression.STITCHING, -} +} OPTIONS_NOIRETBLANC = { False: crans.impression.IMPRESSION_COULEUR, True: crans.impression.IMPRESSION_NB @@ -24,28 +24,28 @@ OPTIONS_RECTOVERSO = { True: crans.impression.IMPRESSION_RECTO_VERSO } -from optparse import OptionParser - -parser = OptionParser("usage: %prog [options] pdf") -parser.add_option("-a", "--agrafes", - action="store", type='int', dest="agrafes", default=0, - help="Choix du mode d'agrafes (%s)" % ", ".join(["%s: %s" % (val, crans.impression.LABELS[OPTIONS_AGRAFES[val]]) for val in OPTIONS_AGRAFES.keys()])) -parser.add_option("-p", "--papier", - action="store", type="string", dest="typepapier", +from optparse import OptionParser + +parser = OptionParser("usage: %prog [options] pdf") +parser.add_option("-a", "--agrafes", + action="store", type='int', dest="agrafes", default=0, + help="Choix du mode d'agrafes (%s)" % ", ".join(["%s: %s" % (val, crans.impression.LABELS[OPTIONS_AGRAFES[val]]) for val in OPTIONS_AGRAFES.keys()])) +parser.add_option("-p", "--papier", + action="store", type="string", dest="typepapier", help="Choix papier (%s)" % ", ".join(["%s: %s" % (val, crans.impression.LABELS[val]) for val in crans.impression.PAPIER_VALEURS_POSSIBLES])) -parser.add_option("-r", "--recto-verso", +parser.add_option("-r", "--recto-verso", action="store_true", dest="rectoverso", default=False, help="Impression recto-verso") -parser.add_option("-c", "--copies", - action="store", type="int", dest="copies", +parser.add_option("-c", "--copies", + action="store", type="int", dest="copies", help="Nombre de copies") -parser.add_option("-n", "--noir-et-blanc", - action="store_true", dest="noiretblanc", default=False, +parser.add_option("-n", "--noir-et-blanc", + action="store_true", dest="noiretblanc", default=False, help="impression en noir et blanc") -(options, args) = parser.parse_args() +(options, args) = parser.parse_args() if len(args) != 1: parser.error("Nombre d'arguments incorect") @@ -64,7 +64,7 @@ try: except crans.impression.SettingsError, e: print "erreur: %s" % e sys.exit(1) - + lpr.printSettings() -print "Prix total : %s Euros" % str(lpr.prix()) \ No newline at end of file +print "Prix total : %s Euros" % str(lpr.prix())