diff --git a/impression/class_impression.py b/impression/class_impression.py index be0bf56c..5523454a 100755 --- a/impression/class_impression.py +++ b/impression/class_impression.py @@ -8,11 +8,12 @@ Inspir Licence : GNU General Public Licence, version 2 """ -import sys, time, tempfile, os, commands, string, random, syslog +import sys, time, tempfile, os, commands, string, random sys.path.append('/usr/scripts/impression') sys.path.append('/usr/scripts/gestion') from config import impression from ldap_crans import crans_ldap +from syslog import openlog, syslog, LOG_DEBUG duree_vie_pdf=3600 @@ -41,60 +42,60 @@ class test: ################################################################################ -class fichier_impression : - nom_job='' - nbr_pages=1 - nb_copie=1 - taille="A4" - recto_verso=False - transparent=False - couleur=True - cout=0.0 - portrait=True - 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 - # d'attente, 0 devis, time pour l'heure, -3 déja - # imprimé ou devis fait depuis trops longtemps : le - # pdf n'est plus disponible - nom_fichier_pdf="" # chemin et nom du pdf - nom_fichier_desc="" # chemin et nom du fichier contenant les - # options de l'utilisateur - list_messages=[] # liste d'erreur et de remarque - list_messages_importants=[] - list_messages_admin=[] # liste d'erreur réservé au administrateur - erreur_critique=False # True si une erreur empêchant - # l'impression est apparue - code=None # code pour le digicode - modif_epoch=0.0 # moment de création du job ou devis. exprimé - # en epoch (float) : nombre de seconde depuis - # la référence du temps unix (+-=1970) - job_id=None # champs pour de futures améliorations +class fichier_impression: + nom_job = '' + nbr_pages = 1 + nb_copie = 1 + taille = "A4" + recto_verso = False + transparent = False + couleur = True + cout = 0.0 + portrait = True + 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 + # d'attente, 0 devis, time pour l'heure, -3 déja + # imprimé ou devis fait depuis trops longtemps : le + # pdf n'est plus disponible + nom_fichier_pdf = "" # chemin et nom du pdf + nom_fichier_desc = "" # chemin et nom du fichier contenant les + # options de l'utilisateur + list_messages = [] # liste d'erreur et de remarque + list_messages_importants = [] + list_messages_admin = [] # liste d'erreur réservé au administrateur + erreur_critique = False # True si une erreur empêchant + # l'impression est apparue + code = None # code pour le digicode + modif_epoch = 0.0 # moment de création du job ou devis. exprimé + # en epoch (float) : nombre de seconde depuis + # la référence du temps unix (+-=1970) + job_id = None # champs pour de futures améliorations def actualise_cout(self): # Calcul du cout de l'impression : retour = cout(self) # Met le prix dans cout s'il n'y a pas d'erreur - if type(retour) is float : + if type(retour) is float: self.cout = retour self.list_messages_importants.append('cout') else: self.erreur_critique = True self.list_messages_importants.append('erreur_critique') self.list_messages_admin.append('erreur_cout') - syslog.openlog("impression") - syslog.syslog(retour) + openlog("impression") + syslog(retour) # Repond vrai si le solde est assez élevé. def test_cout(self): if self.user_ldap == None: self.user_ldap = utilisateur(self.user, False) - return not (self.cout > (self.user_ldap.solde() - - impression.decouvert)) # /!\ decouvert est négatif. + # /!\ decouvert est négatif. + return not (self.cout > (self.user_ldap.solde() - impression.decouvert)) def fait_payer(self): - self.user_ldap = utilisateur(self.user,True) + self.user_ldap = utilisateur(self.user, True) self.user_ldap.solde(-self.cout, self.nom_job) self.user_ldap.save() return not (self.cout > (self.user_ldap.solde() - impression.decouvert)) @@ -107,7 +108,7 @@ class fichier_impression : for i in range(1000): # On génère un code - code = rand.randint(100000,999999) + code = rand.randint(100000, 999999) # Si le code est libre, on sort de la boucle if not os.path.exists("/var/impression/codes/%d" % code): break @@ -129,7 +130,7 @@ class fichier_impression : codefichier = open("/var/impression/codes/%d" % code, 'w') codefichier.write("Utilisateur %s\n" % self.user) codefichier.close() - self.code=code + self.code = code self.list_messages_importants.append('code') def impression(self): @@ -137,28 +138,28 @@ class fichier_impression : # Création de la liste d'options # pour le nombre de copies - options ='-# %d' % self.nb_copie + options = '-# %d' % self.nb_copie # Pour spécifier l'imprimante - options +=' -P laserjet' + options += ' -P laserjet' # Pour spécifier le bac sortie options += ' -o OutputBin=Left' # Pour spécifier la version du language postscript utilisé par pdftops - options +=' -o pdf-level3' + options += ' -o pdf-level3' # Pour donner le titre de l'impression - options +=" -T '%s'" % self.nom_job + options += " -T '%s'" % self.nom_job # Pour donner le login de l'adherent - options +=' -U %s' % self.user + options += ' -U %s' % self.user # Pour demander une page de garde #options += ' -o job-sheets=crans' #page de garde de type standard options += " -o job-billing=%.2f" % self.cout - if self.transparent : + if self.transparent: options += ' -o InputSlot=Tray1 -o Media=Transparency' if self.taille == 'A4': options += ' -o job-sheets=crans -o pdf-paper=571x817 -o PageSize=A4' @@ -180,8 +181,8 @@ 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)) + openlog("impression") + syslog("lpr status:%d | rep: %s" % (status, rep)) def corrige(self): # Trouve le nombre de pages @@ -205,7 +206,7 @@ class fichier_impression : self.recto_verso = False def affiche_messages_html(self): - body="" + body = "" """ if self.imprime: @@ -218,18 +219,18 @@ class fichier_impression : body=body % {'taille' : self.taille, 'code' : self.code, 'solde' : self.user_ldap.solde(), 'cout' : self.cout , 'adresse_imprimante' : impression.From_imprimante} """ - body=string.join(self.list_messages_importants) + body = string.join(self.list_messages_importants) return "

%s

" % body def enregistre_pdf(self, f_value, f_nom, dossier): - syslog.openlog("impression") - try : + 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))) + 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 : + try: fd_fichier_pdf = open(self.nom_fichier_pdf, 'w') fd_fichier_pdf.write(f_value) fd_fichier_pdf.close() @@ -241,7 +242,7 @@ class fichier_impression : self.modif_epoch = time.time() def sauve_desc(self): - try : + try: file_obj_desc = open(self.nom_fichier_desc,'w') for key in ("erreur_critique", "nom_job", "nbr_pages", "nb_copie","taille", "recto_verso", @@ -255,7 +256,7 @@ class fichier_impression : raise ErreurImpression("class : erreur dans enregistrement du .desc %s : %s" % (self.nom_fichier_desc,str(inst))) def read_desc(self): - try : + try: file_obj_desc = open(self.nom_fichier_desc, 'r') ligne = file_obj_desc.readline()[0:-1] while ligne != "": @@ -290,8 +291,8 @@ class fichier_impression : if not os.path.exists(self.nom_fichier_pdf): if self.imprime != -3: self.imprime = -4 - syslog.openlog("impression") - syslog.syslog("class : %s a disparu" % self.nom_fichier_pdf) + openlog("impression") + syslog("class : %s a disparu" % self.nom_fichier_pdf) def __repr__(self): @@ -313,23 +314,23 @@ class fichier_impression : self.code = "%s#" % self.code for key in ("nbr_pages", "nb_copie", "taille", "code"): - corps+='%s%s\n' % (key, + corps += '%s%s\n' % (key, str(getattr(self,key))) self.code = self.code[:-1] - corps+="\n\n\n\n" + corps += "
\n\n\n\n" for key in ("couleur", "transparent", "portrait", "recto_verso"): if getattr(self, key): corps += '\n' % dict_normale[key] else: corps += '\n' % dict_contraire[key] - corps+="
%s
%s
\n" + corps += "\n" if self.erreur_critique: corps += "erreur de comptage" else: corps += "%s euros" % self.cout - corps+="\n" + corps += "\n" return corps ################################################################################ @@ -359,8 +360,8 @@ def utilisateur(user, rw): if len(res) != 1 : raise ErreurImpression("class : adherent %s introuvable\n" % user) adherent = res[0] - syslog.openlog("impression") - syslog.syslog(syslog.LOG_DEBUG,"class : Adherent %s (aid=%s) recupere.\n" % (user, adherent.id())) + openlog("impression") + syslog(LOG_DEBUG,"class : Adherent %s (aid=%s) recupere.\n" % (user, adherent.id())) return adherent ################################################################################