/examples/jsonrpc/public/services/jsonrpc/cgihandler.py
http://pyjamas.googlecode.com/ · Python · 62 lines · 28 code · 10 blank · 24 comment · 2 complexity · 3e618a0e39bb762485aab3418bfc124a MD5 · raw file
- """
- Copyright (c) 2006 Jan-Klaas Kollhof
- This file is part of jsonrpc.
- jsonrpc 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 software 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.
- You should have received a copy of the GNU Lesser General Public License
- along with this software; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- """
- from jsonrpc import SimpleServiceHandler
- import sys,os
- class CGIHandler(SimpleServiceHandler):
- def __init__(self, service, messageDelimiter="\n"):
- self.sendData =[]
- SimpleServiceHandler.__init__(self, service, messageDelimiter=messageDelimiter)
-
- def send(self, data):
- self.sendData.append(data)
-
- def handle(self):
- try:
- contLen=int(os.environ['CONTENT_LENGTH'])
- data = sys.stdin.read(contLen)
- except:
- data = ""
- #execute the request
- self.handlePartialData(data)
- self.sendReply()
- self.close()
-
- def sendReply(self):
- data = "\n".join(self.sendData)
- response = "Content-Type: text/plain\n"
- response += "Content-Length: %d\n\n" % len(data)
- response += data
-
- #on windows all \n are converted to \r\n if stdout is a terminal and is not set to binary mode :(
- #this will then cause an incorrect Content-length.
- #I have only experienced this problem with apache on Win so far.
- if sys.platform == "win32":
- import msvcrt
- msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
- #put out the response
- sys.stdout.write(response)
-
-
- def handleCGIRequest(service):
- CGIHandler(service,messageDelimiter="\n").handle()