This commit was manufactured by cvs2svn to create tag 'r22a4-fork'.
[python/dscho.git] / Demo / xmlrpc / xmlrpcserver.py
blobfa30419d99d3b6b214dc0f289329df93d23d9a74
2 # XML-RPC SERVER
3 # $Id$
5 # a simple XML-RPC server for Python
7 # History:
8 # 1999-02-01 fl added to xmlrpclib distribution
10 # written by Fredrik Lundh, January 1999.
12 # Copyright (c) 1999 by Secret Labs AB.
13 # Copyright (c) 1999 by Fredrik Lundh.
15 # fredrik@pythonware.com
16 # http://www.pythonware.com
18 # --------------------------------------------------------------------
19 # Permission to use, copy, modify, and distribute this software and
20 # its associated documentation for any purpose and without fee is
21 # hereby granted. This software is provided as is.
22 # --------------------------------------------------------------------
25 import SocketServer, BaseHTTPServer
26 import xmlrpclib
27 import sys
29 class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
31 def do_POST(self):
32 try:
33 # get arguments
34 data = self.rfile.read(int(self.headers["content-length"]))
35 params, method = xmlrpclib.loads(data)
37 # generate response
38 try:
39 response = self.call(method, params)
40 # wrap response in a singleton tuple
41 response = (response,)
42 except:
43 # report exception back to server
44 response = xmlrpclib.dumps(
45 xmlrpclib.Fault(1, "%s:%s" % (sys.exc_type, sys.exc_value))
47 else:
48 response = xmlrpclib.dumps(
49 response,
50 methodresponse=1
52 except:
53 # internal error, report as HTTP server error
54 self.send_response(500)
55 self.end_headers()
56 else:
57 # got a valid XML RPC response
58 self.send_response(200)
59 self.send_header("Content-type", "text/xml")
60 self.send_header("Content-length", str(len(response)))
61 self.end_headers()
62 self.wfile.write(response)
64 # shut down the connection (from Skip Montanaro)
65 self.wfile.flush()
66 self.connection.shutdown(1)
68 def call(self, method, params):
69 # override this method to implement RPC methods
70 print "CALL", method, params
71 return params
73 if __name__ == '__main__':
74 server = SocketServer.TCPServer(('', 8000), RequestHandler)
75 server.serve_forever()