scripts/impression/crans_backend.py
rozel 7282b0e33c sed s/format/taille/g pour ne pas confondre le format du papier (maintenant
la taille : A3, A4) et le format du fichier (PS, PDF, ...).

darcs-hash:20050702003310-061a7-c91e517dd15903ebe87c369971639bd7414214aa.gz
2005-07-02 02:33:10 +02:00

126 lines
3.9 KiB
Python
Executable file

#!/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
import couts
sys.path.append('/usr/scripts/gestion')
from ldap_crans import crans_ldap
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.
"""
#\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 :
try:
# Fichier fourni
entree = open(arguments[-1])
except:
# Des fois les options contiennent un / ...
entree = sys.stdin
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
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 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
"""
# 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
# 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:
## txt=fs.readline()
## if txt == '':
## break
## fd.write(txt)
## fs.close()
## fd.close()
# Calcul du cout de l'impression :
try:
prix = couts.cout(nom_fic, media)
except:
sys.stderr.write("ERROR: Erreur : Impossible de calculer le couts de %s." % nom_fic)
sys.exit(1) # On arrete l'imprimante
return prix