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:
parent
4588607029
commit
5dc4f0cccf
1 changed files with 76 additions and 51 deletions
|
@ -8,7 +8,7 @@ Inspir
|
||||||
Licence : GNU General Public Licence, version 2
|
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/impression')
|
||||||
sys.path.append('/usr/scripts/gestion')
|
sys.path.append('/usr/scripts/gestion')
|
||||||
from config import impression
|
from config import impression
|
||||||
|
@ -18,6 +18,15 @@ duree_vie_pdf=3600
|
||||||
|
|
||||||
#fonction principal: impression (fichier_impression)
|
#fonction principal: impression (fichier_impression)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
class ErreurImpression(Exception):
|
||||||
|
def __init__(self, value):
|
||||||
|
self.value=value
|
||||||
|
def __str__(self):
|
||||||
|
return repr(self.value)
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
class test:
|
class test:
|
||||||
|
@ -74,7 +83,8 @@ class fichier_impression :
|
||||||
self.erreur_critique = True
|
self.erreur_critique = True
|
||||||
self.list_messages_importants.append('erreur_critique')
|
self.list_messages_importants.append('erreur_critique')
|
||||||
self.list_messages_admin.append('erreur_cout')
|
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é.
|
# Repond vrai si le solde est assez élevé.
|
||||||
def test_cout(self):
|
def test_cout(self):
|
||||||
|
@ -167,6 +177,9 @@ class fichier_impression :
|
||||||
(status,rep) = commands.getstatusoutput("lpr %s %s" % (options, self.nom_fichier_pdf))
|
(status,rep) = commands.getstatusoutput("lpr %s %s" % (options, self.nom_fichier_pdf))
|
||||||
if status != 0:
|
if status != 0:
|
||||||
print "<p>status:%d rep: %s</p>" % (status, rep)
|
print "<p>status:%d rep: %s</p>" % (status, rep)
|
||||||
|
syslog.openlog("impression")
|
||||||
|
syslog.syslog("lpr status:%d | rep: %s" % (status, rep))
|
||||||
|
|
||||||
|
|
||||||
def corrige(self):
|
def corrige(self):
|
||||||
# Trouve le nombre de pages
|
# Trouve le nombre de pages
|
||||||
|
@ -207,61 +220,76 @@ class fichier_impression :
|
||||||
return "<p>%s</p>" % body
|
return "<p>%s</p>" % body
|
||||||
|
|
||||||
def enregistre_pdf(self, f_value, f_nom, dossier):
|
def enregistre_pdf(self, f_value, f_nom, dossier):
|
||||||
(fd_fichier_desc, self.nom_fichier_desc) = tempfile.mkstemp(suffix='.desc', prefix='job', dir=dossier)
|
syslog.openlog("impression")
|
||||||
os.close(fd_fichier_desc)
|
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')
|
self.nom_fichier_pdf = self.nom_fichier_desc.replace('.desc', '.pdf')
|
||||||
fd_fichier_pdf = open(self.nom_fichier_pdf, 'w')
|
try :
|
||||||
fd_fichier_pdf.write(f_value)
|
fd_fichier_pdf = open(self.nom_fichier_pdf, 'w')
|
||||||
fd_fichier_pdf.close()
|
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_pdf, 0640)
|
||||||
os.chmod(self.nom_fichier_desc, 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.nbr_pages = int(os.popen("pdfinfo '%s' | grep Pages " % (self.nom_fichier_pdf)).readline().split()[1])
|
||||||
self.modif_epoch = time.time()
|
self.modif_epoch = time.time()
|
||||||
|
|
||||||
def sauve_desc(self):
|
def sauve_desc(self):
|
||||||
file_obj_desc = open(self.nom_fichier_desc,'w')
|
try :
|
||||||
for key in ("erreur_critique", "nom_job", "nbr_pages",
|
file_obj_desc = open(self.nom_fichier_desc,'w')
|
||||||
"nb_copie","taille", "recto_verso",
|
for key in ("erreur_critique", "nom_job", "nbr_pages",
|
||||||
"transparent", "couleur", "cout",
|
"nb_copie","taille", "recto_verso",
|
||||||
"portrait", "user", "imprime",
|
"transparent", "couleur", "cout",
|
||||||
"nom_fichier_pdf", "nom_fichier_desc",
|
"portrait", "user", "imprime",
|
||||||
"code", "modif_epoch", "job_id"):
|
"nom_fichier_pdf", "nom_fichier_desc",
|
||||||
file_obj_desc.write(key+"="+str(getattr(self,key))+"\n")
|
"code", "modif_epoch", "job_id"):
|
||||||
file_obj_desc.close()
|
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):
|
def read_desc(self):
|
||||||
file_obj_desc = open(self.nom_fichier_desc, 'r')
|
try :
|
||||||
ligne = file_obj_desc.readline()[0:-1]
|
file_obj_desc = open(self.nom_fichier_desc, 'r')
|
||||||
while ligne != "":
|
ligne = file_obj_desc.readline()[0:-1]
|
||||||
parse = ligne.split("=")
|
while ligne != "":
|
||||||
if parse[1] == 'None':
|
parse = ligne.split("=")
|
||||||
setattr(self,parse[0],None)
|
if parse[1] == 'None':
|
||||||
else:
|
setattr(self,parse[0],None)
|
||||||
if parse[0] in ("nom_job", "taille", "user",
|
|
||||||
"nom_fichier_pdf", "nom_fichier_desc",
|
|
||||||
"job_id"):
|
|
||||||
setattr(self,parse[0],parse[1])
|
|
||||||
else:
|
else:
|
||||||
if parse[0] in ("nbr_pages", "nb_copie",
|
if parse[0] in ("nom_job", "taille", "user",
|
||||||
"imprime", "code"):
|
"nom_fichier_pdf", "nom_fichier_desc",
|
||||||
setattr(self,parse[0],int(parse[1]))
|
"job_id"):
|
||||||
|
setattr(self,parse[0],parse[1])
|
||||||
else:
|
else:
|
||||||
if parse[0] in ("recto_verso", "transparent",
|
if parse[0] in ("nbr_pages", "nb_copie",
|
||||||
"couleur", "portrait",
|
"imprime", "code"):
|
||||||
"erreur_critique"):
|
setattr(self,parse[0],int(parse[1]))
|
||||||
setattr(self,parse[0],(parse[1] == 'True'))
|
|
||||||
else:
|
else:
|
||||||
if parse[0] in ("cout", "modif_epoch"):
|
if parse[0] in ("recto_verso", "transparent",
|
||||||
setattr(self, parse[0], float(parse[1]))
|
"couleur", "portrait",
|
||||||
|
"erreur_critique"):
|
||||||
|
setattr(self,parse[0],(parse[1] == 'True'))
|
||||||
else:
|
else:
|
||||||
self.erreur_critique = True
|
if parse[0] in ("cout", "modif_epoch"):
|
||||||
print '<p>ligne non parsée: %s</p>' % ligne
|
setattr(self, parse[0], float(parse[1]))
|
||||||
ligne=file_obj_desc.readline()[0:-1]
|
else:
|
||||||
file_obj_desc.close()
|
self.erreur_critique = True
|
||||||
# Vérifie que le fichier existe bien si il doit exister.
|
print '<p>ligne non parsée: %s</p>' % 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 not os.path.exists(self.nom_fichier_pdf):
|
||||||
if self.imprime != -3:
|
if self.imprime != -3:
|
||||||
self.imprime = -4
|
self.imprime = -4
|
||||||
|
syslog.openlog("impression")
|
||||||
|
syslog.syslog("class : %s a disparue" % self.nom_fichier_pdf)
|
||||||
|
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
|
@ -313,8 +341,7 @@ def utilisateur(user, rw):
|
||||||
|
|
||||||
# Impression en local avec les certificats (possible pour le groupe adm)
|
# Impression en local avec les certificats (possible pour le groupe adm)
|
||||||
if user == "root":
|
if user == "root":
|
||||||
sys.stderr.write("ERROR: Utilisateur root passe en parametre.\n")
|
raise ErreurImpression("class : Utilisateur root passe en parametre.")
|
||||||
sys.exit(0) # On conclue l'impression
|
|
||||||
|
|
||||||
# Récupération de l'adhérent
|
# Récupération de l'adhérent
|
||||||
try:
|
try:
|
||||||
|
@ -324,16 +351,14 @@ def utilisateur(user, rw):
|
||||||
else:
|
else:
|
||||||
res = base.search("login=%s" % user)['adherent']
|
res = base.search("login=%s" % user)['adherent']
|
||||||
except:
|
except:
|
||||||
print ("ERROR: Erreur : Base LDAP non joignable\n")
|
raise ErreurImpression("class : Base LDAP non joignable.")
|
||||||
sys.exit(0) # On arrete l'avant-impression ?on arrete l'imprimante?
|
|
||||||
|
|
||||||
# Si on ne trouve rien :
|
# Si on ne trouve rien :
|
||||||
if len(res) != 1 :
|
if len(res) != 1 :
|
||||||
print ("ERROR: Erreur : adherent %s introuvable\n" % user)
|
raise ErreurImpression("class : adherent %s introuvable\n" % user)
|
||||||
sys.exit(0) # On conclue l'avant-impression sans stopper l'imprimante
|
|
||||||
|
|
||||||
adherent = res[0]
|
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
|
return adherent
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
@ -372,7 +397,7 @@ def cout(fic_impr):
|
||||||
# Convertit les pdf en png 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 -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 -q %s" % (nom_png,fic_impr.nom_fichier_pdf))
|
||||||
if status:
|
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
|
# Récupère la liste des fichiers
|
||||||
list_filepng=os.listdir(nom_rep)
|
list_filepng=os.listdir(nom_rep)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue