From c2c069d820932ba32aec9d8a6a98933747886461 Mon Sep 17 00:00:00 2001 From: rozel Date: Wed, 29 Jun 2005 10:38:20 +0200 Subject: [PATCH] Ajout de code commun aux 2 backends. On ne passe plus par Samba. Prise en compte de couleur/N&B ainsi que des transparents. darcs-hash:20050629083820-061a7-07893ac70cb4855cfdec2f49b4e9df85e7b9e03c.gz --- impression/crans_backend.py | 111 +++++++++++++++++++----------------- 1 file changed, 59 insertions(+), 52 deletions(-) diff --git a/impression/crans_backend.py b/impression/crans_backend.py index 879e9dc4..32c70dda 100755 --- a/impression/crans_backend.py +++ b/impression/crans_backend.py @@ -7,57 +7,37 @@ # Licence : GNU General Public Licence, version 2 import sys, tempfile -from ipp import IPPMessage import couts sys.path.append('/usr/scripts/gestion') from ldap_crans import crans_ldap -def utilisateur(job, user, rw): - """ Renvoie l'adherent qui imprime le job - * job est le n° du job (argument n°1 des paramètres passés au backend) - * user est l'utilisateur (argument n°2 des paramètres passés au backend) - * rw vaut 1 si on veut modifier le compte LDAP de l'adhérent, - 0 dans le cas contraire +def preliminaires(arguments, description): + """ Verifie le nombre d'arguments passes. + Si pas d'arguments : print description, + si le bon nombre d'argument : retourne le fichier nettoye, + sinon sort sans stopper. """ - # Utilisation de Samba qui s'authentifie en root : on parse le spool - if user=="root": - sys.stderr.write("DEBUG: Utilisateur Root passé en paramètre\n") - sys.stderr.write("DEBUG: On récupère le vrai utilisateur dans le spool\n") - if len(job) < 5 : - fichier_ipp = "c%05i" % int(job) - else: - fichier_ipp = "c%s" % job - try: - message = IPPMessage(open('/var/spool/cups/%s' % fichier_ipp).read()) - except: - sys.stderr.write("ERROR: Erreur : Ne peut pas ouvrir le fichier /var/spool/cups/%s" % fichier_ipp) - sys.exit(0) # On conclue l'impression - user = message["job-originating-user-name"] - - # Récupération de l'adhérent - base = crans_ldap() - if rw == 0 : - res=base.search("login=%s"%user)['adherent'] - else: - res=base.search("login=%s"%user,'w')['adherent'] - - # Si on ne trouve rien : - if len(res) != 1 : - sys.stderr.write("ERROR: Erreur : adhérent %s non trouvé\n" % user) - sys.exit(0) # On conclue l'impression sans stopper l'imprimante - - adherent=res[0] - return adherent - - -def fichier(entree): - """ Effectue le nettoyage de entree et écrie dans fic""" - #\x1B est le caractere d'échappement échap. UEL="\x1B%-12345X" + if len(arguments) == 1 : + print description + sys.exit(0) + + if len(arguments) not in (6, 7) : + sys.stderr.write("ERROR: %s job-id user title copies options [file]\n" % arguments[0]) + sys.exit(0) # On n'arrete pas l'imprimante + + if arguments[-1].find('/') != -1 : + # Fichier fourni + entree = open(arguments[-1]) + else : + # Lecture sur entree standard + entree = sys.stdin + + ## On nettoie le fichier : fic = tempfile.NamedTemporaryFile() ligne = entree.readline() # On rends le fichier propre et on enleve les options qui nous gènent @@ -83,18 +63,45 @@ def fichier(entree): return fic -def calcul_prix(nom_fic, media): - """Calcul le prix d'une impression - * media vaut 'transparency' si impression sur transparent - * nom_fic est le nom du fichier à imprimmer +def utilisateur(user, rw): + """ Renvoie l'adherent qui imprime le job + * user est l'utilisateur (argument n°2 des paramètres passés au backend) + * rw vaut 1 si on veut modifier le compte LDAP de l'adhérent, + 0 dans le cas contraire """ - # Options par défaut (Couleur) : - mode_couleur = "Couleur" - if media == "transparency": - format = "transparent" + # Impression en local avec les certificats (possible pour le groupe adm) + if user=="root": + sys.stderr.write("ERROR: Utilisateur root passé en paramètre.\n") + sys.exit(0) # On conclue l'impression - #Temporaire pour debugage + # Récupération de l'adhérent + try: + base = crans_ldap() + if rw == 0 : + res=base.search("login=%s"%user)['adherent'] + else: + res=base.search("login=%s"%user,'w')['adherent'] + except: + sys.stderr.write("ERROR: Erreur : Base LDAP non joignable\n") + sys.exit(0) # On arrete l'impression + + # Si on ne trouve rien : + if len(res) != 1 : + sys.stderr.write("ERROR: Erreur : adhérent %s non trouvé\n" % user) + sys.exit(0) # On conclue l'impression sans stopper l'imprimante + + adherent = res[0] + return adherent + + +def calcul_prix(nom_fic, media): + """Calcul le prix d'une impression + * nom_fic est le nom du fichier à imprimmer + * media vaut 'transparent' si impression sur transparent + """ + +## #Temporaire pour debugage ## fs=open(nom_fic,'r') ## fd=open('/tmp/benoit_Routard','w') ## while 1: @@ -107,9 +114,9 @@ def calcul_prix(nom_fic, media): # Calcul du cout de l'impression : try: - prix = couts.cout(nom_fic, mode_couleur) + prix = couts.cout(nom_fic, media) except: - sys.stderr.write("ERROR: Erreur : impossible de calculer le couts de %s." % nom_fic) + sys.stderr.write("ERROR: Erreur : Impossible de calculer le couts de %s." % nom_fic) sys.exit(1) # On arrete l'imprimante return prix