Fonctions communes aux 2 backends devis et laserjet.
darcs-hash:20050617154818-061a7-3c12b9ad33f6e01eefcdb5c6e6275100f580ca5f.gz
This commit is contained in:
parent
6920e4ba55
commit
f2ac3169c9
1 changed files with 102 additions and 0 deletions
102
impression/crans_backend.py
Executable file
102
impression/crans_backend.py
Executable file
|
@ -0,0 +1,102 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: iso-8859-15 -*-
|
||||||
|
|
||||||
|
# Fonctions utilisées par les backend devis et laserjet
|
||||||
|
# Écrit par Benoit avec la contribution de Brice et Fred
|
||||||
|
|
||||||
|
# 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, rw):
|
||||||
|
""" Renvoie l'adherent qui imprime le job
|
||||||
|
* job est le n°du job (argument n°1 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
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Récupération du nom de l'utilisateur
|
||||||
|
# On n'utilise pas sys.argv[2], car Samba fournit root
|
||||||
|
# en mode Authentifie
|
||||||
|
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
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
fic = tempfile.NamedTemporaryFile()
|
||||||
|
ligne = entree.readline()
|
||||||
|
# On rends le fichier propre et on enleve les options qui nous gènent
|
||||||
|
while ligne:
|
||||||
|
#On ne choisit pas le bac de sortie
|
||||||
|
if ligne.find('%%BeginFeature: *OutputBin') != -1:
|
||||||
|
while ligne.find('%%EndFeature') == -1:
|
||||||
|
ligne = entree.readline()
|
||||||
|
ligne = entree.readline()
|
||||||
|
#On ne choisit pas le bac d'entree
|
||||||
|
if ligne.find('%%BeginFeature: *InputSlot') != -1:
|
||||||
|
while ligne.find('%%EndFeature') == -1:
|
||||||
|
ligne = entree.readline()
|
||||||
|
ligne = entree.readline()
|
||||||
|
# On élimine les instructions PJL
|
||||||
|
# Normalement on n'est pas obligé de retirer le UEL
|
||||||
|
# mais c'est plus propre
|
||||||
|
while ligne.startswith('@PJL') or ligne.startswith(UEL):
|
||||||
|
ligne = entree.readline()
|
||||||
|
fic.write(ligne)
|
||||||
|
ligne = entree.readline()
|
||||||
|
fic.flush()
|
||||||
|
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
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Options par défaut (Couleur) :
|
||||||
|
mode_couleur = "Couleur"
|
||||||
|
if media== "transparency":
|
||||||
|
format = "transparent"
|
||||||
|
|
||||||
|
# Calcul du cout de l'impression :
|
||||||
|
try:
|
||||||
|
prix = couts.cout(nom_fic, mode_couleur)
|
||||||
|
except:
|
||||||
|
sys.stderr.write("ERROR: Erreur : impossible de calculer le couts de %s." % nom_fic)
|
||||||
|
sys.exit(1) # On arrete l'imprimante
|
||||||
|
|
||||||
|
return prix
|
Loading…
Add table
Add a link
Reference in a new issue