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
This commit is contained in:
parent
a77f97aa06
commit
c2c069d820
1 changed files with 59 additions and 52 deletions
|
@ -7,57 +7,37 @@
|
||||||
# Licence : GNU General Public Licence, version 2
|
# Licence : GNU General Public Licence, version 2
|
||||||
|
|
||||||
import sys, tempfile
|
import sys, tempfile
|
||||||
from ipp import IPPMessage
|
|
||||||
import couts
|
import couts
|
||||||
sys.path.append('/usr/scripts/gestion')
|
sys.path.append('/usr/scripts/gestion')
|
||||||
from ldap_crans import crans_ldap
|
from ldap_crans import crans_ldap
|
||||||
|
|
||||||
|
|
||||||
def utilisateur(job, user, rw):
|
def preliminaires(arguments, description):
|
||||||
""" Renvoie l'adherent qui imprime le job
|
""" Verifie le nombre d'arguments passes.
|
||||||
* job est le n° du job (argument n°1 des paramètres passés au backend)
|
Si pas d'arguments : print description,
|
||||||
* user est l'utilisateur (argument n°2 des paramètres passés au backend)
|
si le bon nombre d'argument : retourne le fichier nettoye,
|
||||||
* rw vaut 1 si on veut modifier le compte LDAP de l'adhérent,
|
sinon sort sans stopper.
|
||||||
0 dans le cas contraire
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# 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.
|
#\x1B est le caractere d'échappement échap.
|
||||||
UEL="\x1B%-12345X"
|
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()
|
fic = tempfile.NamedTemporaryFile()
|
||||||
ligne = entree.readline()
|
ligne = entree.readline()
|
||||||
# On rends le fichier propre et on enleve les options qui nous gènent
|
# On rends le fichier propre et on enleve les options qui nous gènent
|
||||||
|
@ -83,18 +63,45 @@ def fichier(entree):
|
||||||
return fic
|
return fic
|
||||||
|
|
||||||
|
|
||||||
def calcul_prix(nom_fic, media):
|
def utilisateur(user, rw):
|
||||||
"""Calcul le prix d'une impression
|
""" Renvoie l'adherent qui imprime le job
|
||||||
* media vaut 'transparency' si impression sur transparent
|
* user est l'utilisateur (argument n°2 des paramètres passés au backend)
|
||||||
* nom_fic est le nom du fichier à imprimmer
|
* rw vaut 1 si on veut modifier le compte LDAP de l'adhérent,
|
||||||
|
0 dans le cas contraire
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Options par défaut (Couleur) :
|
# Impression en local avec les certificats (possible pour le groupe adm)
|
||||||
mode_couleur = "Couleur"
|
if user=="root":
|
||||||
if media == "transparency":
|
sys.stderr.write("ERROR: Utilisateur root passé en paramètre.\n")
|
||||||
format = "transparent"
|
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')
|
## fs=open(nom_fic,'r')
|
||||||
## fd=open('/tmp/benoit_Routard','w')
|
## fd=open('/tmp/benoit_Routard','w')
|
||||||
## while 1:
|
## while 1:
|
||||||
|
@ -107,9 +114,9 @@ def calcul_prix(nom_fic, media):
|
||||||
|
|
||||||
# Calcul du cout de l'impression :
|
# Calcul du cout de l'impression :
|
||||||
try:
|
try:
|
||||||
prix = couts.cout(nom_fic, mode_couleur)
|
prix = couts.cout(nom_fic, media)
|
||||||
except:
|
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
|
sys.exit(1) # On arrete l'imprimante
|
||||||
|
|
||||||
return prix
|
return prix
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue