#!/usr/bin/env python3 ''' /** * @file escher_pattern.py * @brief wrapper for web * @par License: * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ ''' from urllib.parse import urlparse, parse_qs import time # this is needed for importing? import os, sys os.chdir(os.path.dirname(__file__)) sys.path.append(os.path.dirname(__file__)) # also add: ''' /etc/apache2/conf-enabled/serve-cgi-bin.conf: Options +ExecCGI AddHandler wsgi-script .py WSGIProcessGroup %{GLOBAL} WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all ''' from escher_pattern_class import Escher_Pattern # def application is a hardcoded keyword for WSGI ?! def application(environ,start_response): params = parse_qs(environ["QUERY_STRING"]) status = '200 OK' lpm = 50 page_width = 270 page_height = 210 rotate = 5 escher = 2.0 tmp_dir = 'tmp' try: lpm = float(params['LPM'][0]) except KeyError: pass try: page_width = float(params['PAGE_WIDTH'][0]) except KeyError: pass try: page_height = float(params['PAGE_HEIGHT'][0]) except KeyError: pass try: rotate = float(params['ROTATE'][0]) except KeyError: pass try: escher = float(params['ESCHER'][0]) except KeyError: pass basename = 'escher-pattern' basename += '-ESCHER'+str(escher) basename += '-LPM'+str(lpm) basename += '-ROT'+str(rotate) basename += '-PAGE_WIDTH'+str(page_width) basename += '-PAGE_HEIGHT'+str(page_height) pdf_name = basename+".pdf" ep = Escher_Pattern(width= page_width, height= page_height, escher=escher, lpm=lpm, rotate=rotate) ep.generate() ep.save() with open(pdf_name,'rb') as f: contents = f.read() os.remove(pdf_name) filesize = str(len(contents)) filesize = filesize.encode('utf-8') response_header = [ ('Content-Type','application/pdf'), ('Cache-Control', 'public, must-revalidate, max-age=0'), ('Pragma', 'public'), ('Expires', 'Sat, 26 Jul 1997 05:00:00 GMT'), ('Last-Modified', time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime())), ('Content-Length', str(len(contents))), ('Content-Disposition', 'inline; filename='+pdf_name+';') ] start_response(status,response_header) return [contents]