# -*- python -*-
#
# Apache mod_wsgi python interface
#
# Copyright (C) 2004-2006 The Trustees of Princeton University
#
import sys
sys.path.append('/usr/share/plc_api')
sys.stdout = sys.stderr
import traceback
from PLC.Debug import log
from PLC.API import PLCAPI
def application(environ, start_response):
try:
status = '200 OK'
if environ.get('REQUEST_METHOD') != 'POST':
content_type = 'text/html'
output = """
PLCAPI WSGI XML-RPC/SOAP Interface
PLCAPI WSGI XML-RPC/SOAP Interface
Please use XML-RPC or SOAP to access the PLCAPI.
"""
else:
# Thomas Dreibholz
# Note that this function is called within multiple threads!
# "api" MUST be a local variable instead of a global one.
# Otherwise, this causes concurrent accesses to the same
# object within different threads!
api = PLCAPI()
api.environ = environ
content_type = 'text/xml'
ip = environ.get('REMOTE_ADDR')
port = environ.get('REMOTE_PORT')
output = api.handle((ip,port), environ.get('wsgi.input').read())
# Shut down database connection, otherwise up to MaxClients DB
# connections will remain open.
api.db.close()
except Exception, err:
status = '500 Internal Server Error'
content_type = 'text/html'
output = 'Internal Server Error'
print >> log, err, traceback.format_exc()
# Write response
response_headers = [('Content-type', '%s' % content_type),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]