Skip to content

Commit

Permalink
add cgi jsonrpc handler
Browse files Browse the repository at this point in the history
  • Loading branch information
Luke Leighton committed Nov 2, 2011
1 parent 0411815 commit 86885bd
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 1 deletion.
54 changes: 54 additions & 0 deletions pyjs/jsonrpc/cgihandler/__init__.py
@@ -0,0 +1,54 @@
"""
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 pyjs.jsonrpc import JSONRPCServiceBase, jsonremote
import sys, os

def read_data():
try:
contLen=int(os.environ['CONTENT_LENGTH'])
data = sys.stdin.read(contLen)
except:
data = ""
return data

def write_data(data):
if not isinstance(data, list):
data = [data]
data = "\n".join(data)
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)

class CGIJSONRPCService(JSONRPCServiceBase):
def __call__(self):
d = read_data() # TODO: handle partial data
write_data(self.process(d))

12 changes: 11 additions & 1 deletion run_bootstrap_first_then_setup.py
Expand Up @@ -91,9 +91,19 @@ def get_dir(dirname):
author = "The Pyjamas Project",
author_email = "lkcl@lkcl.net",
keywords = keyw,
packages=["pyjs", "pyjs.jsonrpc", "pyjd"],
packages=["pyjs", "pyjs.jsonrpc",
"pyjs.jsonrpc.cgihandler",
"pyjs.jsonrpc.django",
"pyjs.jsonrpc.web2py",
"pyjd"],
package_dir = {'pyjs': os.path.join('pyjs', 'src', 'pyjs'),
'pyjs.jsonrpc': os.path.join('pyjs', 'jsonrpc'),
'pyjs.jsonrpc.cgihandler':
os.path.join('pyjs', 'jsonrpc', 'cgihandler'),
'pyjs.jsonrpc.django':
os.path.join('pyjs', 'jsonrpc', 'django'),
'pyjs.jsonrpc.web2py':
os.path.join('pyjs', 'jsonrpc', 'web2py'),
'pyjd': 'pyjd'},
data_files = data_files,
license = "Apache Software License",
Expand Down

0 comments on commit 86885bd

Please sign in to comment.