# # Author: Thanos Vassilakis thanos@0x01.com # # # Copyright (c) thanos vassilakis 2000,2001, 2002 # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License # as published by the Free Software Foundation; either version 2.1 of the # License, or (at your option) any later version. # # This library 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 Lesser General Public License for more details. # # See terms of license at gnu.org. # $Id: service.py,v 1.10 2004/07/12 04:00:22 thanos Exp $ # __version__="$Revision: 1.10 $" import sys from weakref import ref from time import time, strftime, gmtime from util import log from request import ServiceRequest, SERVER_RETURN from session import CookieFileImpl from cgirequest import CgiRequest OK = 0 def fixup(req, requestImpl, sessionImpl=CookieFileImpl): sys.stdout = req.pso = ServiceRequest(requestImpl, req) session = req.pso().getSession( sessionImpl) def cleanup(req): log('cleaing up', req) req.pso().close() class ServiceHandler: PRODUCTION = 0 def run(self, handler, sessionImpl =CookieFileImpl): try: stdout = sys.stdout stderr = sys.stderr sys.stdout = pso = ServiceRequest(CgiRequest) pso.stderr = stderr logfile = pso.getEnviron('PSOLog') if logfile: sys.stderr = open(logfile, 'a', 0) if sessionImpl: pso.session = pso.getSession( sessionImpl ) status = handler(pso) except SERVER_RETURN, status: pass except: sys.stdout = stdout import traceback if not self.PRODUCTION: traceback.print_exc(file = sys.stdout) else: traceback.print_exc() sys.stderr = stderr def test(req): print "hello world" def test1(req): print "hello world" req.send_http_header(content_type= 'text/plain') def test2(req): print "hi there" req.sendStatus(204) def test3(req): print "hi there" req.redirect("http://www.w3c.org/") if __name__ =='__main__': ServiceHandler().run(test3)