File: xmlrpcserver.py

package info (click to toggle)
boa-constructor 0.4.4cvs20050714-4
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 10,080 kB
  • ctags: 9,175
  • sloc: python: 56,189; sh: 545; makefile: 40
file content (75 lines) | stat: -rw-r--r-- 2,100 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#
# XML-RPC SERVER
# $Id: xmlrpcserver.py,v 1.2 2001/07/28 20:26:07 riaan Exp $
#
# a simple XML-RPC server for Python
#
# History:
# 1999-02-01 fl  added to xmlrpclib distribution 
#
# written by Fredrik Lundh, January 1999.
#
# Copyright (c) 1999 by Secret Labs AB.
# Copyright (c) 1999 by Fredrik Lundh.
#
# fredrik@pythonware.com
# http://www.pythonware.com
#
# --------------------------------------------------------------------
# Permission to use, copy, modify, and distribute this software and
# its associated documentation for any purpose and without fee is
# hereby granted.  This software is provided as is.
# --------------------------------------------------------------------
#

import SocketServer, BaseHTTPServer
import xmlrpclib
import sys

class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):

    def do_POST(self):
        try:
	    # get arguments
            data = self.rfile.read(int(self.headers["content-length"]))
            params, method = xmlrpclib.loads(data)

	    # generate response
	    try:
		response = self.call(method, params)
		if type(response) != type(()):
		    response = (response,)
	    except:
		# report exception back to server
		response = xmlrpclib.dumps(
		    xmlrpclib.Fault(1, "%s:%s" % (sys.exc_type, sys.exc_value))
		    )
	    else:
		response = xmlrpclib.dumps(
		    response,
		    methodresponse=1
		    )
        except:
	    # internal error, report as HTTP server error
	    self.send_response(500)
	    self.end_headers()
	else:
	    # got a valid XML RPC response
	    self.send_response(200)
	    self.send_header("Content-type", "text/xml")
	    self.send_header("Content-length", str(len(response)))
	    self.end_headers()
	    self.wfile.write(response)

	    # shut down the connection (from Skip Montanaro)
	    self.wfile.flush()
	    self.connection.shutdown(1)

    def call(self, method, params):
	# override this method to implement RPC methods
	print "CALL", method, params
	return params

if __name__ == '__main__':
    server = SocketServer.TCPServer(('', 8000), RequestHandler)
    server.serve_forever()