Detabification

darcs-hash:20060129142901-d1718-a3ee96a2cff23ce263b8bf73f40d68d95322a95f.gz
This commit is contained in:
bernat 2006-01-29 15:29:01 +01:00
parent c28734caab
commit 0133737924

View file

@ -30,41 +30,41 @@ class test:
class fichier_impression : class fichier_impression :
nom_job='' nom_job=''
nbr_pages=1 nbr_pages=1
nb_copie=1 nb_copie=1
taille="A4" taille="A4"
recto_verso=False recto_verso=False
transparent=False transparent=False
couleur=True couleur=True
cout=0.0 cout=0.0
portrait=True portrait=True
user="" user=""
user_ldap=None #seras une instance de l'utilisateur dans la base ldap. user_ldap=None #seras 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 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_pdf="" #chemin et nom du pdf
nom_fichier_desc="" #chemin et nom du fichier contenant les options de l'utilisateur nom_fichier_desc="" #chemin et nom du fichier contenant les options de l'utilisateur
list_messages=[] #liste d'erreur et de remarque list_messages=[] #liste d'erreur et de remarque
list_messages_importants=[] list_messages_importants=[]
list_messages_admin=[] #liste d'erreur réservé au administrateur list_messages_admin=[] #liste d'erreur réservé au administrateur
erreur_critique=False #True si une erreur empêchant l'impression est apparue erreur_critique=False #True si une erreur empêchant l'impression est apparue
code=None #code pour le digicode 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) 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 futur amélioration job_id=None #champs pour de futur amélioration
def actualise_cout(self): def actualise_cout(self):
# Calcul du cout de l'impression : # Calcul du cout de l'impression :
retour = cout(self) retour = cout(self)
# Met le prix dans cout s'il n'y a pas d'erreur # 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.cout=retour
self.list_messages_importants.append('cout') self.list_messages_importants.append('cout')
else: else:
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) sys.stderr.write(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):
@ -80,16 +80,16 @@ class fichier_impression :
self.user_ldap.save() self.user_ldap.save()
return not (self.cout > (self.user_ldap.solde() - impression.decouvert)) return not (self.cout > (self.user_ldap.solde() - impression.decouvert))
def gen_code(self): def gen_code(self):
#Génération du code et écriture du code #Génération du code et écriture du code
i=0 i=0
code=0 code=0
import random import random
#instance de base #instance de base
rand=random.Random() rand=random.Random()
#graine automatique avec le temps #graine automatique avec le temps
rand.seed() rand.seed()
while(i<1000) : while(i<1000) :
#on génère le numéro de session #on génère le numéro de session
code=rand.randint(100000,999999) #pour avoir six chiffres code=rand.randint(100000,999999) #pour avoir six chiffres
#on verifie que le code n'est déja pas utilisé #on verifie que le code n'est déja pas utilisé
@ -100,7 +100,7 @@ class fichier_impression :
break break
i=i+1 i=i+1
if code: if code:
#on enregistre le fichier avec le code pour numéro #on enregistre le fichier avec le code pour numéro
codefichier=open("/var/impression/codes/%d" %code, 'w') codefichier=open("/var/impression/codes/%d" %code, 'w')
#codefichier=open("/localhome/bobot/codes/%d" %code, 'w') #codefichier=open("/localhome/bobot/codes/%d" %code, 'w')
@ -108,7 +108,7 @@ class fichier_impression :
codefichier.close() codefichier.close()
self.code=code self.code=code
self.list_messages_importants.append('code') self.list_messages_importants.append('code')
else : else :
# Grosse erreur : on logue, on previent et on stoppe. # Grosse erreur : on logue, on previent et on stoppe.
print ("ERROR: Il n'y a pas de code disponible" ) print ("ERROR: Il n'y a pas de code disponible" )
sys.stderr.write ("ERROR: Il n'y a pas de code disponible" ) sys.stderr.write ("ERROR: Il n'y a pas de code disponible" )
@ -120,47 +120,47 @@ class fichier_impression :
sys.stderr.write("ERROR: Impossible d'envoyer le rapport de bug.\n") sys.stderr.write("ERROR: Impossible d'envoyer le rapport de bug.\n")
sys.stderr.write("ERROR: Plus de codes disponibles.\n") sys.stderr.write("ERROR: Plus de codes disponibles.\n")
sys.stderr.write("ERROR: Penser a ouvrir a l'adherent debite...\n") sys.stderr.write("ERROR: Penser a ouvrir a l'adherent debite...\n")
#sys.exit(1) #sys.exit(1)
def impression(self): def impression(self):
# Envoi du fichier à CUPS # Envoi du fichier à CUPS
#Création de la liste d'options #Création de la liste d'options
#pour le nombre de copies #pour le nombre de copies
options ='-# '+str(self.nb_copie) options ='-# '+str(self.nb_copie)
#options ='-n '+str(self.nb_copie) #options ='-n '+str(self.nb_copie)
#pour spécifier l'imprimante #pour spécifier l'imprimante
options +=' -P laserjet' options +=' -P laserjet'
#pour spécifier la version du language postscript utilisé par pdftops #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 #pour donner le titre de l'impression
options +=' -T '+self.nom_job options +=' -T '+self.nom_job
#options +=' -t '+self.nom_job #options +=' -t '+self.nom_job
#pour donner le login de l'adherent #pour donner le login de l'adherent
options +=' -U '+self.user options +=' -U '+self.user
#pour demander une page de garde #pour demander une page de garde
options +=' -o job-sheets=crans' #page de garde de type standard options +=' -o job-sheets=crans' #page de garde de type standard
if self.transparent : if self.transparent :
options+=' -o InputSlot=Tray1 -o Media=Transparency' options+=' -o InputSlot=Tray1 -o Media=Transparency'
if self.taille=='A4': if self.taille=='A4':
options+=(' -o pdf-paper=571x817 -o PageSize=A4') options+=(' -o pdf-paper=571x817 -o PageSize=A4')
else: else:
options+=(' -o pdf-paper=825x1166 -o InputSlot=Tray3 -o HPPaperPolicy=A3 -o PageSize=A3') options+=(' -o pdf-paper=825x1166 -o InputSlot=Tray3 -o HPPaperPolicy=A3 -o PageSize=A3')
if self.portrait: if self.portrait:
if self.recto_verso: if self.recto_verso:
options+=(' -o sides=two-sided-long-edge') options+=(' -o sides=two-sided-long-edge')
else: else:
options+=(' -o sides=one-sided') options+=(' -o sides=one-sided')
else: else:
options+=(' -o landscape') options+=(' -o landscape')
if self.recto_verso: if self.recto_verso:
options+=' -o sides=two-sided-short-edge' options+=' -o sides=two-sided-short-edge'
else: else:
options+=' -o sides=one-sided' options+=' -o sides=one-sided'
options+=' -o HPColorasGray='+str(not self.couleur) options+=' -o HPColorasGray='+str(not self.couleur)
@ -170,35 +170,35 @@ class fichier_impression :
#else: #else:
#self.job_id=rep.split(' ')[3] #self.job_id=rep.split(' ')[3]
def corrige (self): def corrige (self):
# #
# fic_impr=fichier_impression() # fic_impr=fichier_impression()
# fic_impr.user=utilisateur(arguments[2],rw) # fic_impr.user=utilisateur(arguments[2],rw)
#trouve le nombre de pages #trouve le nombre de pages
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])
##Corrige les aberrations ##Corrige les aberrations
##Correction des aberations (transparent et recto_verso :) ) ##Correction des aberations (transparent et recto_verso :) )
##Priorité des informations par ordre décroissant ##Priorité des informations par ordre décroissant
##Transparent, paper, nbr_page, recto_verso ##Transparent, paper, nbr_page, recto_verso
if (self.taille<>'A4') & (self.taille<>'A3'): if (self.taille<>'A4') & (self.taille<>'A3'):
self.list_messages_importants.append("paper") self.list_messages_importants.append("paper")
self.erreur_critique=True self.erreur_critique=True
if self.transparent: if self.transparent:
if self.paper<>'A4': if self.paper<>'A4':
self.list_messages.append("A3 transparent") self.list_messages.append("A3 transparent")
self.paper='A4' self.paper='A4'
if self.recto_verso: if self.recto_verso:
self.list_messages.append("Recto_verso transparent") self.list_messages.append("Recto_verso transparent")
self.recto_verso=False self.recto_verso=False
if self.nbr_pages==1 & self.recto_verso: if self.nbr_pages==1 & self.recto_verso:
self.list_messages.append("Recto_verso 1 page") self.list_messages.append("Recto_verso 1 page")
self.recto_verso=False self.recto_verso=False
def affiche_messages_html(self): def affiche_messages_html(self):
body="" body=""
"""if self.imprime: """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: 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: else:
@ -211,7 +211,7 @@ class fichier_impression :
return "<p>"+body+"</p>" return "<p>"+body+"</p>"
def enregistre_pdf(self,f_value,f_nom,dossier): def enregistre_pdf(self,f_value,f_nom,dossier):
f_nom = f_nom.translate(string.maketrans(string.punctuation+string.whitespace,'_' * len(string.punctuation+string.whitespace))) f_nom = f_nom.translate(string.maketrans(string.punctuation+string.whitespace,'_' * len(string.punctuation+string.whitespace)))
(fd_fichier_desc,self.nom_fichier_desc) = tempfile.mkstemp(suffix='.desc',prefix=f_nom,dir=dossier) (fd_fichier_desc,self.nom_fichier_desc) = tempfile.mkstemp(suffix='.desc',prefix=f_nom,dir=dossier)
os.close(fd_fichier_desc) os.close(fd_fichier_desc)
os.chmod(self.nom_fichier_desc,33184) os.chmod(self.nom_fichier_desc,33184)
@ -254,16 +254,16 @@ class fichier_impression :
ligne=file_obj_desc.readline()[0:-1] ligne=file_obj_desc.readline()[0:-1]
file_obj_desc.close() file_obj_desc.close()
#Vérifie que le fichier existe bien si il doit exister. #Vérifie que le fichier existe bien si il doit exister.
if not os.access(self.nom_fichier_pdf,os.F_OK): if not os.access(self.nom_fichier_pdf,os.F_OK):
if self.imprime<>-3: if self.imprime<>-3:
self.imprime=-4 self.imprime=-4
#else: #else:
# if (time.time()-self.modif_epoch)>duree_vie_pdf: # if (time.time()-self.modif_epoch)>duree_vie_pdf:
# os.remove(self.nom_fichier_pdf) # os.remove(self.nom_fichier_pdf)
# self.imprime=-4 # self.imprime=-4
#fonction utilisé par print et str : renvoie le string canonique de l'objet #fonction utilisé par print et str : renvoie le string canonique de l'objet
def __repr__(self): def __repr__(self):
dict_contraire={'couleur' : 'Noir et Blanc' , 'transparent' : 'Normal' , 'portrait': 'Paysage' , 'recto_verso' : 'Recto' , 'erreur_critique' : "Pas d'erreur"} dict_contraire={'couleur' : 'Noir et Blanc' , 'transparent' : 'Normal' , 'portrait': 'Paysage' , 'recto_verso' : 'Recto' , 'erreur_critique' : "Pas d'erreur"}
dict_normale={'couleur' : 'Couleur' , 'transparent' : 'Transparent' , 'portrait': 'Portrait' , 'recto_verso' : 'Recto-Verso' , 'erreur_critique' : "Problême survenue"} dict_normale={'couleur' : 'Couleur' , 'transparent' : 'Transparent' , 'portrait': 'Portrait' , 'recto_verso' : 'Recto-Verso' , 'erreur_critique' : "Problême survenue"}
@ -301,36 +301,36 @@ class fichier_impression :
def utilisateur(user, rw): def utilisateur(user, rw):
""" Renvoie l'adherent qui imprime le job """ Renvoie l'adherent qui imprime le job
* user est l'utilisateur (argument n°2 des paramètres passés au backend) * user est l'utilisateur (argument n°2 des paramètres passés au backend)
* rw vaut True si on veut modifier le compte LDAP de l'adhérent, * rw vaut True si on veut modifier le compte LDAP de l'adhérent,
False dans le cas contraire False dans le cas contraire
""" """
# 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 passé en paramètre.\n") sys.stderr.write("ERROR: Utilisateur root passé en paramètre.\n")
sys.exit(0) # On conclue l'impression sys.exit(0) # On conclue l'impression
# Récupération de l'adhérent # Récupération de l'adhérent
try: try:
base = crans_ldap() base = crans_ldap()
if rw: if rw:
res=base.search("login=%s"%user,'w')['adherent'] res=base.search("login=%s"%user,'w')['adherent']
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") print ("ERROR: Erreur : Base LDAP non joignable\n")
sys.exit(0) # On arrete l'avant-impression ?on arrete l'imprimante? 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 : adhérent %s non trouvé\n" % user) print ("ERROR: Erreur : adhérent %s non trouvé\n" % user)
sys.exit(0) # On conclue l'avant-impression sans stopper l'imprimante sys.exit(0) # On conclue l'avant-impression sans stopper l'imprimante
adherent = res[0] adherent = res[0]
sys.stderr.write("DEBUG: Adherent %s recupere.\n" % adherent.Nom()) sys.stderr.write("DEBUG: Adherent %s recupere.\n" % adherent.Nom())
return adherent return adherent
#fonction cout calcule le pourcentage de couleur sur les pages #fonction cout calcule le pourcentage de couleur sur les pages
# renvoit un string avec le nom de l'erreur si erreur il y a # renvoit un string avec le nom de l'erreur si erreur il y a