From: Tony Mack Date: Sat, 7 Aug 2010 14:55:15 +0000 (-0400) Subject: Initial checkin of mod_python json interface X-Git-Tag: plcapi-5.0-17~7 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=3042666c8109c44d258fbcec85e19df2dc0edac8;p=plcapi.git Initial checkin of mod_python json interface --- diff --git a/ModPythonJson.py b/ModPythonJson.py new file mode 100644 index 00000000..37cbc6b8 --- /dev/null +++ b/ModPythonJson.py @@ -0,0 +1,63 @@ +# +# Apache mod_python interface for JSON requests +# +# Aaron Klingaman +# Mark Huang +# +# Copyright (C) 2004-2006 The Trustees of Princeton University +# $Id$ +# $URL$ +# + +import sys +import traceback +import xmlrpclib +from mod_python import apache + +from PLC.Debug import log + +from PLC.API import PLCAPI +api = PLCAPI() + +def handler(req): + try: + if req.method != "POST": + req.content_type = "text/html" + req.send_http_header() + req.write(""" + +PLCAPI JSON Interface + +

PLCAPI JSON Interface

+

Please POST JSON to access the PLCAPI.

+ +""") + return apache.OK + + # Read request + request = req.read(int(req.headers_in['content-length'])) + + # mod_python < 3.2: The IP address portion of remote_addr is + # incorrect (always 0.0.0.0) when IPv6 is enabled. + # http://issues.apache.org/jira/browse/MODPYTHON-64?page=all + (remote_ip, remote_port) = req.connection.remote_addr + remote_addr = (req.connection.remote_ip, remote_port) + + # Handle request + response = api.handle_json(remote_addr, request) + + # Shut down database connection, otherwise up to MaxClients DB + # connections will remain open. + api.db.close() + + # Write response + req.content_type = "text/json; charset=" + api.encoding + req.send_http_header() + req.write(response) + + return apache.OK + + except Exception, err: + # Log error in /var/log/httpd/(ssl_)?error_log + print >> log, err, traceback.format_exc() + return apache.HTTP_INTERNAL_SERVER_ERROR