#! /usr/bin/env python import cherrypy, tempfile, shutil, os import crans.impression import crans.impression.digicode FILE_UPLOAD_BASE_FOLDER = cherrypy.config.get('fileUpload.folder', "/var/impression/fichiers/") class FileError(Exception): pass class root: ########################## # affichage ########################## # # methode qui affiche la template avec toutes les infos de # l'adherent + les formulaires # def index(self, submit = None, fileList = None, newFile = None ): data = {} cherrypy.session['impression'] = None if submit == "submit_send": try: self.savePDF(newFile) data['fileName'] = newFile.filename except FileError, e: data['openError'] = e.args[0] elif submit == "submit_chose": if (fileList): data['fileName'] = fileList else: data['openError'] = "Choisissez un fichier" data['fileList'] = self.getUploadedFileListFor(cherrypy.session['uid']) return {'template':'impression', 'values':data, 'stylesheets':['impression.css'], 'scripts':['impression.js', 'popup.js'], } index.exposed = True def useFile(self, fileName): try: filepath = os.path.join(os.path.join(FILE_UPLOAD_BASE_FOLDER, cherrypy.session['uid']+"/"), fileName) cherrypy.session['impression'] = crans.impression.impression(filepath, cherrypy.session['uid']) return {'nbPages': cherrypy.session['impression'].pages()} except: return {'erreur':'Fichier invalide'} useFile.exposed= True def changeSettings(self, copies=None, couleurs=None, recto_verso=None, agrafes=None, papier=None): try: nouvPrix = cherrypy.session['impression'].changeSettings(papier=papier, couleurs=couleurs, agraphes=agrafes, recto_verso=recto_verso, copies=int(copies)) except Exception, e: return {"erreur":str(e)} return {'nouvPrix':nouvPrix} changeSettings.exposed = True def lancerImpression(self): try: cherrypy.session['impression'].imprime() except crans.impression.SoldeInsuffisant: return {"SoldeInsuffisant":1} except Exception, e: return {"erreur":str(e)} return {'code':str(crans.impression.digicode.gen_code("Impression intranet : " + cherrypy.session['uid'])) + "#"} lancerImpression.exposed = True def getUploadedFileListFor(self, adh): file_folder = os.path.join(FILE_UPLOAD_BASE_FOLDER, cherrypy.session['uid']+"/") if not os.path.isdir(file_folder): return [] return os.listdir(file_folder) def savePDF(self, aFile): _, tempFileName = tempfile.mkstemp() f = open(tempFileName, 'w+b') size=0 while True: data = aFile.file.read(1024 * 8) # Read blocks of 8KB at a time if not data: break f.write(data) size += len(data) f.close() if size == 0: raise FileError("Fichier vide") file_folder = os.path.join(FILE_UPLOAD_BASE_FOLDER, cherrypy.session['uid']+"/") if not os.path.isdir(file_folder): os.makedirs(file_folder) newFilePath = os.path.join(file_folder, aFile.filename) shutil.move(tempFileName, newFilePath) return newFilePath ########################## # devis ########################## # # methode qui affiche la template du devis # def devis(self): return { 'template':'impression-devis', 'values': { 'devis':cherrypy.session['impression'].devisDetaille(), 'total':cherrypy.session['impression'].prix(), 'nomFichier':cherrypy.session['impression'].fileName(), }, 'standalone':True, } devis.exposed=True