Mercurial > cpython-lru_cache-weakref
annotate Lib/SimpleXMLRPCServer.py @ 25838:8540887bcec6 2.2
Backport of 2.183:
Fix memory leak in add_subclass() found by NealN with valgrind.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Fri, 18 Oct 2002 13:42:21 +0000 |
| parents | 8f79fa537bd2 |
| children | 0be17259aac8 7c34e5bf2e22 |
| rev | line source |
|---|---|
|
19937
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1 """Simple XML-RPC Server. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
3 This module can be used to create simple XML-RPC servers |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
4 by creating a server and either installing functions, a |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
5 class instance, or by extending the SimpleXMLRPCRequestHandler |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
6 class. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
7 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
8 A list of possible usage patterns follows: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
9 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
10 1. Install functions: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
11 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
12 server = SimpleXMLRPCServer(("localhost", 8000)) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
13 server.register_function(pow) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
14 server.register_function(lambda x,y: x+y, 'add') |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
15 server.serve_forever() |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
16 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
17 2. Install an instance: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
18 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
19 class MyFuncs: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
20 def __init__(self): |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
21 # make all of the string functions available through |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
22 # string.func_name |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
23 import string |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
24 self.string = string |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
25 def pow(self, x, y): return pow(x, y) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
26 def add(self, x, y) : return x + y |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
27 server = SimpleXMLRPCServer(("localhost", 8000)) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
28 server.register_instance(MyFuncs()) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
29 server.serve_forever() |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
30 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
31 3. Install an instance with custom dispatch method: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
32 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
33 class Math: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
34 def _dispatch(self, method, params): |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
35 if method == 'pow': |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
36 return apply(pow, params) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
37 elif method == 'add': |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
38 return params[0] + params[1] |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
39 else: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
40 raise 'bad method' |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
41 server = SimpleXMLRPCServer(("localhost", 8000)) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
42 server.register_instance(Math()) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
43 server.serve_forever() |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
44 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
45 4. Subclass SimpleXMLRPCRequestHandler: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
46 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
47 class MathHandler(SimpleXMLRPCRequestHandler): |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
48 def _dispatch(self, method, params): |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
49 try: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
50 # We are forcing the 'export_' prefix on methods that are |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
51 # callable through XML-RPC to prevent potential security |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
52 # problems |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
53 func = getattr(self, 'export_' + method) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
54 except AttributeError: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
55 raise Exception('method "%s" is not supported' % method) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
56 else: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
57 return apply(func, params) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
58 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
59 def log_message(self, format, *args): |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
60 pass # maybe do something fancy like write the messages to a file |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
61 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
62 def export_add(self, x, y): |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
63 return x + y |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
64 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
65 server = SimpleXMLRPCServer(("localhost", 8000), MathHandler) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
66 server.serve_forever() |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
67 """ |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
68 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
69 # Written by Brian Quinlan (brian@sweetapp.com). |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
70 # Based on code written by Fredrik Lundh. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
71 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
72 import xmlrpclib |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
73 import SocketServer |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
74 import BaseHTTPServer |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
75 import sys |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
76 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
77 class SimpleXMLRPCRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
78 """Simple XML-RPC request handler class. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
79 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
80 Handles all HTTP POST requests and attempts to decode them as |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
81 XML-RPC requests. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
82 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
83 XML-RPC requests are dispatched to the _dispatch method, which |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
84 may be overriden by subclasses. The default implementation attempts |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
85 to dispatch XML-RPC calls to the functions or instance installed |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
86 in the server. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
87 """ |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
88 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
89 def do_POST(self): |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
90 """Handles the HTTP POST request. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
91 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
92 Attempts to interpret all HTTP POST requests as XML-RPC calls, |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
93 which are forwarded to the _dispatch method for handling. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
94 """ |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
95 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
96 try: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
97 # get arguments |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
98 data = self.rfile.read(int(self.headers["content-length"])) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
99 params, method = xmlrpclib.loads(data) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
100 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
101 # generate response |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
102 try: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
103 response = self._dispatch(method, params) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
104 # wrap response in a singleton tuple |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
105 response = (response,) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
106 except: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
107 # report exception back to server |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
108 response = xmlrpclib.dumps( |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
109 xmlrpclib.Fault(1, "%s:%s" % (sys.exc_type, sys.exc_value)) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
110 ) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
111 else: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
112 response = xmlrpclib.dumps(response, methodresponse=1) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
113 except: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
114 # internal error, report as HTTP server error |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
115 self.send_response(500) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
116 self.end_headers() |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
117 else: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
118 # got a valid XML RPC response |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
119 self.send_response(200) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
120 self.send_header("Content-type", "text/xml") |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
121 self.send_header("Content-length", str(len(response))) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
122 self.end_headers() |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
123 self.wfile.write(response) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
124 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
125 # shut down the connection |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
126 self.wfile.flush() |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
127 self.connection.shutdown(1) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
128 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
129 def _dispatch(self, method, params): |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
130 """Dispatches the XML-RPC method. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
131 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
132 XML-RPC calls are forwarded to a registered function that |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
133 matches the called XML-RPC method name. If no such function |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
134 exists then the call is forwarded to the registered instance, |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
135 if available. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
136 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
137 If the registered instance has a _dispatch method then that |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
138 method will be called with the name of the XML-RPC method and |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
139 it's parameters as a tuple |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
140 e.g. instance._dispatch('add',(2,3)) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
141 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
142 If the registered instance does not have a _dispatch method |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
143 then the instance will be searched to find a matching method |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
144 and, if found, will be called. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
145 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
146 Methods beginning with an '_' are considered private and will |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
147 not be called by SimpleXMLRPCServer. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
148 """ |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
149 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
150 func = None |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
151 try: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
152 # check to see if a matching function has been registered |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
153 func = self.server.funcs[method] |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
154 except KeyError: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
155 if self.server.instance is not None: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
156 # check for a _dispatch method |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
157 if hasattr(self.server.instance, '_dispatch'): |
|
20174
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
158 return self.server.instance._dispatch(method, params) |
|
19937
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
159 else: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
160 # call instance method directly |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
161 try: |
|
20174
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
162 func = _resolve_dotted_attribute( |
|
19937
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
163 self.server.instance, |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
164 method |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
165 ) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
166 except AttributeError: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
167 pass |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
168 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
169 if func is not None: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
170 return apply(func, params) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
171 else: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
172 raise Exception('method "%s" is not supported' % method) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
173 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
174 def log_request(self, code='-', size='-'): |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
175 """Selectively log an accepted request.""" |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
176 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
177 if self.server.logRequests: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
178 BaseHTTPServer.BaseHTTPRequestHandler.log_request(self, code, size) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
179 |
|
20174
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
180 |
|
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
181 def _resolve_dotted_attribute(obj, attr): |
|
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
182 """Resolves a dotted attribute name to an object. Raises |
|
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
183 an AttributeError if any attribute in the chain starts with a '_'. |
|
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
184 """ |
|
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
185 for i in attr.split('.'): |
|
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
186 if i.startswith('_'): |
|
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
187 raise AttributeError( |
|
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
188 'attempt to access private attribute "%s"' % i |
|
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
189 ) |
|
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
190 else: |
|
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
191 obj = getattr(obj,i) |
|
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
192 return obj |
|
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
193 |
|
8f79fa537bd2
_dispatch(): Do no re-define the resolve_dotted_atttribute() function
Fred Drake <fdrake@acm.org>
parents:
19937
diff
changeset
|
194 |
|
19937
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
195 class SimpleXMLRPCServer(SocketServer.TCPServer): |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
196 """Simple XML-RPC server. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
197 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
198 Simple XML-RPC server that allows functions and a single instance |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
199 to be installed to handle requests. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
200 """ |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
201 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
202 def __init__(self, addr, requestHandler=SimpleXMLRPCRequestHandler, |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
203 logRequests=1): |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
204 self.funcs = {} |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
205 self.logRequests = logRequests |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
206 self.instance = None |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
207 SocketServer.TCPServer.__init__(self, addr, requestHandler) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
208 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
209 def register_instance(self, instance): |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
210 """Registers an instance to respond to XML-RPC requests. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
211 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
212 Only one instance can be installed at a time. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
213 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
214 If the registered instance has a _dispatch method then that |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
215 method will be called with the name of the XML-RPC method and |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
216 it's parameters as a tuple |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
217 e.g. instance._dispatch('add',(2,3)) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
218 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
219 If the registered instance does not have a _dispatch method |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
220 then the instance will be searched to find a matching method |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
221 and, if found, will be called. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
222 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
223 Methods beginning with an '_' are considered private and will |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
224 not be called by SimpleXMLRPCServer. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
225 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
226 If a registered function matches a XML-RPC request, then it |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
227 will be called instead of the registered instance. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
228 """ |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
229 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
230 self.instance = instance |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
231 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
232 def register_function(self, function, name = None): |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
233 """Registers a function to respond to XML-RPC requests. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
234 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
235 The optional name argument can be used to set a Unicode name |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
236 for the function. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
237 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
238 If an instance is also registered then it will only be called |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
239 if a matching function is not found. |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
240 """ |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
241 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
242 if name is None: |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
243 name = function.__name__ |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
244 self.funcs[name] = function |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
245 |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
246 if __name__ == '__main__': |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
247 server = SimpleXMLRPCServer(("localhost", 8000)) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
248 server.register_function(pow) |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
249 server.register_function(lambda x,y: x+y, 'add') |
|
896f2d1e2f46
Brian Quinlan's XML-RPC server framework.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
250 server.serve_forever() |
