#!/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 : # 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 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