2007-08-15 11:28:01 -03:00
|
|
|
:mod:`SimpleXMLRPCServer` --- Basic XML-RPC server
|
|
|
|
==================================================
|
|
|
|
|
|
|
|
.. module:: SimpleXMLRPCServer
|
|
|
|
:synopsis: Basic XML-RPC server implementation.
|
|
|
|
.. moduleauthor:: Brian Quinlan <brianq@activestate.com>
|
|
|
|
.. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
|
|
|
|
|
2008-05-26 07:47:43 -03:00
|
|
|
.. note::
|
|
|
|
The :mod:`SimpleXMLRPCServer` module has been merged into
|
|
|
|
:mod:`xmlrpc.server` in Python 3.0. The :term:`2to3` tool will automatically
|
|
|
|
adapt imports when converting your sources to 3.0.
|
|
|
|
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
.. versionadded:: 2.2
|
|
|
|
|
|
|
|
The :mod:`SimpleXMLRPCServer` module provides a basic server framework for
|
|
|
|
XML-RPC servers written in Python. Servers can either be free standing, using
|
|
|
|
:class:`SimpleXMLRPCServer`, or embedded in a CGI environment, using
|
|
|
|
:class:`CGIXMLRPCRequestHandler`.
|
|
|
|
|
|
|
|
|
|
|
|
.. class:: SimpleXMLRPCServer(addr[, requestHandler[, logRequests[, allow_none[, encoding]]]])
|
|
|
|
|
|
|
|
Create a new server instance. This class provides methods for registration of
|
|
|
|
functions that can be called by the XML-RPC protocol. The *requestHandler*
|
|
|
|
parameter should be a factory for request handler instances; it defaults to
|
|
|
|
:class:`SimpleXMLRPCRequestHandler`. The *addr* and *requestHandler* parameters
|
2008-05-24 15:31:28 -03:00
|
|
|
are passed to the :class:`SocketServer.TCPServer` constructor. If *logRequests*
|
2007-08-15 11:28:01 -03:00
|
|
|
is true (the default), requests will be logged; setting this parameter to false
|
|
|
|
will turn off logging. The *allow_none* and *encoding* parameters are passed
|
|
|
|
on to :mod:`xmlrpclib` and control the XML-RPC responses that will be returned
|
|
|
|
from the server. The *bind_and_activate* parameter controls whether
|
|
|
|
:meth:`server_bind` and :meth:`server_activate` are called immediately by the
|
|
|
|
constructor; it defaults to true. Setting it to false allows code to manipulate
|
|
|
|
the *allow_reuse_address* class variable before the address is bound.
|
|
|
|
|
|
|
|
.. versionchanged:: 2.5
|
|
|
|
The *allow_none* and *encoding* parameters were added.
|
|
|
|
|
|
|
|
.. versionchanged:: 2.6
|
|
|
|
The *bind_and_activate* parameter was added.
|
|
|
|
|
|
|
|
|
|
|
|
.. class:: CGIXMLRPCRequestHandler([allow_none[, encoding]])
|
|
|
|
|
|
|
|
Create a new instance to handle XML-RPC requests in a CGI environment. The
|
|
|
|
*allow_none* and *encoding* parameters are passed on to :mod:`xmlrpclib` and
|
|
|
|
control the XML-RPC responses that will be returned from the server.
|
|
|
|
|
|
|
|
.. versionadded:: 2.3
|
|
|
|
|
|
|
|
.. versionchanged:: 2.5
|
|
|
|
The *allow_none* and *encoding* parameters were added.
|
|
|
|
|
|
|
|
|
|
|
|
.. class:: SimpleXMLRPCRequestHandler()
|
|
|
|
|
|
|
|
Create a new request handler instance. This request handler supports ``POST``
|
|
|
|
requests and modifies logging so that the *logRequests* parameter to the
|
|
|
|
:class:`SimpleXMLRPCServer` constructor parameter is honored.
|
|
|
|
|
|
|
|
|
|
|
|
.. _simple-xmlrpc-servers:
|
|
|
|
|
|
|
|
SimpleXMLRPCServer Objects
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
The :class:`SimpleXMLRPCServer` class is based on
|
2008-05-24 15:31:28 -03:00
|
|
|
:class:`SocketServer.TCPServer` and provides a means of creating simple, stand
|
2007-08-15 11:28:01 -03:00
|
|
|
alone XML-RPC servers.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: SimpleXMLRPCServer.register_function(function[, name])
|
|
|
|
|
|
|
|
Register a function that can respond to XML-RPC requests. If *name* is given,
|
|
|
|
it will be the method name associated with *function*, otherwise
|
|
|
|
``function.__name__`` will be used. *name* can be either a normal or Unicode
|
|
|
|
string, and may contain characters not legal in Python identifiers, including
|
|
|
|
the period character.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: SimpleXMLRPCServer.register_instance(instance[, allow_dotted_names])
|
|
|
|
|
|
|
|
Register an object which is used to expose method names which have not been
|
|
|
|
registered using :meth:`register_function`. If *instance* contains a
|
|
|
|
:meth:`_dispatch` method, it is called with the requested method name and the
|
|
|
|
parameters from the request. Its API is ``def _dispatch(self, method, params)``
|
|
|
|
(note that *params* does not represent a variable argument list). If it calls
|
|
|
|
an underlying function to perform its task, that function is called as
|
|
|
|
``func(*params)``, expanding the parameter list. The return value from
|
|
|
|
:meth:`_dispatch` is returned to the client as the result. If *instance* does
|
|
|
|
not have a :meth:`_dispatch` method, it is searched for an attribute matching
|
|
|
|
the name of the requested method.
|
|
|
|
|
|
|
|
If the optional *allow_dotted_names* argument is true and the instance does not
|
|
|
|
have a :meth:`_dispatch` method, then if the requested method name contains
|
|
|
|
periods, each component of the method name is searched for individually, with
|
|
|
|
the effect that a simple hierarchical search is performed. The value found from
|
|
|
|
this search is then called with the parameters from the request, and the return
|
|
|
|
value is passed back to the client.
|
|
|
|
|
|
|
|
.. warning::
|
|
|
|
|
|
|
|
Enabling the *allow_dotted_names* option allows intruders to access your
|
|
|
|
module's global variables and may allow intruders to execute arbitrary code on
|
|
|
|
your machine. Only use this option on a secure, closed network.
|
|
|
|
|
|
|
|
.. versionchanged:: 2.3.5, 2.4.1
|
|
|
|
*allow_dotted_names* was added to plug a security hole; prior versions are
|
|
|
|
insecure.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: SimpleXMLRPCServer.register_introspection_functions()
|
|
|
|
|
|
|
|
Registers the XML-RPC introspection functions ``system.listMethods``,
|
|
|
|
``system.methodHelp`` and ``system.methodSignature``.
|
|
|
|
|
|
|
|
.. versionadded:: 2.3
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: SimpleXMLRPCServer.register_multicall_functions()
|
|
|
|
|
|
|
|
Registers the XML-RPC multicall function system.multicall.
|
|
|
|
|
|
|
|
|
2008-02-23 11:41:51 -04:00
|
|
|
.. attribute:: SimpleXMLRPCRequestHandler.rpc_paths
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
An attribute value that must be a tuple listing valid path portions of the URL
|
|
|
|
for receiving XML-RPC requests. Requests posted to other paths will result in a
|
|
|
|
404 "no such page" HTTP error. If this tuple is empty, all paths will be
|
|
|
|
considered valid. The default value is ``('/', '/RPC2')``.
|
|
|
|
|
|
|
|
.. versionadded:: 2.5
|
|
|
|
|
2007-12-03 16:03:46 -04:00
|
|
|
.. _simplexmlrpcserver-example:
|
|
|
|
|
|
|
|
SimpleXMLRPCServer Example
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Server code::
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
from SimpleXMLRPCServer import SimpleXMLRPCServer
|
2008-02-23 11:41:51 -04:00
|
|
|
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler
|
|
|
|
|
|
|
|
# Restrict to a particular path.
|
|
|
|
class RequestHandler(SimpleXMLRPCRequestHandler):
|
|
|
|
rpc_paths = ('/RPC2',)
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
# Create server
|
2008-02-23 11:41:51 -04:00
|
|
|
server = SimpleXMLRPCServer(("localhost", 8000),
|
|
|
|
requestHandler=RequestHandler)
|
2007-08-15 11:28:01 -03:00
|
|
|
server.register_introspection_functions()
|
|
|
|
|
Merged revisions 68133-68134,68141-68142,68145-68146,68148-68149,68159-68162,68166,68171-68174,68179,68195-68196,68210,68214-68215,68217-68222 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r68133 | antoine.pitrou | 2009-01-01 16:38:03 +0100 (Thu, 01 Jan 2009) | 1 line
fill in actual issue number in tests
........
r68134 | hirokazu.yamamoto | 2009-01-01 16:45:39 +0100 (Thu, 01 Jan 2009) | 2 lines
Issue #4797: IOError.filename was not set when _fileio.FileIO failed to open
file with `str' filename on Windows.
........
r68141 | benjamin.peterson | 2009-01-01 17:43:12 +0100 (Thu, 01 Jan 2009) | 1 line
fix highlighting
........
r68142 | benjamin.peterson | 2009-01-01 18:29:49 +0100 (Thu, 01 Jan 2009) | 2 lines
welcome to 2009, Python!
........
r68145 | amaury.forgeotdarc | 2009-01-02 01:03:54 +0100 (Fri, 02 Jan 2009) | 5 lines
#4801 _collections module fails to build on cygwin.
_PyObject_GC_TRACK is the macro version of PyObject_GC_Track,
and according to documentation it should not be used for extension modules.
........
r68146 | ronald.oussoren | 2009-01-02 11:44:46 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue4472: "configure --enable-shared doesn't work on OSX"
........
r68148 | ronald.oussoren | 2009-01-02 11:48:31 +0100 (Fri, 02 Jan 2009) | 2 lines
Forgot to add a NEWS item in my previous checkin
........
r68149 | ronald.oussoren | 2009-01-02 11:50:48 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue4780
........
r68159 | ronald.oussoren | 2009-01-02 15:48:17 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue 1627952
........
r68160 | ronald.oussoren | 2009-01-02 15:52:09 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue r1737832
........
r68161 | ronald.oussoren | 2009-01-02 16:00:05 +0100 (Fri, 02 Jan 2009) | 3 lines
Fix for issue 1149804
........
r68162 | ronald.oussoren | 2009-01-02 16:06:00 +0100 (Fri, 02 Jan 2009) | 3 lines
Fix for issue 4472 is incompatible with Cygwin, this patch
should fix that.
........
r68166 | benjamin.peterson | 2009-01-02 19:26:23 +0100 (Fri, 02 Jan 2009) | 1 line
document PyMemberDef
........
r68171 | georg.brandl | 2009-01-02 21:25:14 +0100 (Fri, 02 Jan 2009) | 3 lines
#4811: fix markup glitches (mostly remains of the conversion),
found by Gabriel Genellina.
........
r68172 | martin.v.loewis | 2009-01-02 21:32:55 +0100 (Fri, 02 Jan 2009) | 2 lines
Issue #4075: Use OutputDebugStringW in Py_FatalError.
........
r68173 | martin.v.loewis | 2009-01-02 21:40:14 +0100 (Fri, 02 Jan 2009) | 2 lines
Issue #4051: Prevent conflict of UNICODE macros in cPickle.
........
r68174 | benjamin.peterson | 2009-01-02 21:47:27 +0100 (Fri, 02 Jan 2009) | 1 line
fix compilation on non-Windows platforms
........
r68179 | raymond.hettinger | 2009-01-02 22:26:45 +0100 (Fri, 02 Jan 2009) | 1 line
Issue #4615. Document how to use itertools for de-duping.
........
r68195 | georg.brandl | 2009-01-03 14:45:15 +0100 (Sat, 03 Jan 2009) | 2 lines
Remove useless string literal.
........
r68196 | georg.brandl | 2009-01-03 15:29:53 +0100 (Sat, 03 Jan 2009) | 2 lines
Fix indentation.
........
r68210 | georg.brandl | 2009-01-03 20:10:12 +0100 (Sat, 03 Jan 2009) | 2 lines
Set eol-style correctly for mp_distributing.py.
........
r68214 | georg.brandl | 2009-01-03 20:44:48 +0100 (Sat, 03 Jan 2009) | 2 lines
Make indentation consistent.
........
r68215 | georg.brandl | 2009-01-03 21:15:14 +0100 (Sat, 03 Jan 2009) | 2 lines
Fix role name.
........
r68217 | georg.brandl | 2009-01-03 21:30:15 +0100 (Sat, 03 Jan 2009) | 2 lines
Add rstlint, a little tool to find subtle markup problems and inconsistencies in the Doc sources.
........
r68218 | georg.brandl | 2009-01-03 21:38:59 +0100 (Sat, 03 Jan 2009) | 2 lines
Recognize usage of the default role.
........
r68219 | georg.brandl | 2009-01-03 21:47:01 +0100 (Sat, 03 Jan 2009) | 2 lines
Fix uses of the default role.
........
r68220 | georg.brandl | 2009-01-03 21:55:06 +0100 (Sat, 03 Jan 2009) | 2 lines
Remove trailing whitespace.
........
r68221 | georg.brandl | 2009-01-03 22:04:55 +0100 (Sat, 03 Jan 2009) | 2 lines
Remove tabs from the documentation.
........
r68222 | georg.brandl | 2009-01-03 22:11:58 +0100 (Sat, 03 Jan 2009) | 2 lines
Disable the line length checker by default.
........
2009-01-03 17:55:17 -04:00
|
|
|
# Register pow() function; this will use the value of
|
2007-08-15 11:28:01 -03:00
|
|
|
# pow.__name__ as the name, which is just 'pow'.
|
|
|
|
server.register_function(pow)
|
|
|
|
|
|
|
|
# Register a function under a different name
|
|
|
|
def adder_function(x,y):
|
|
|
|
return x + y
|
|
|
|
server.register_function(adder_function, 'add')
|
|
|
|
|
Merged revisions 68133-68134,68141-68142,68145-68146,68148-68149,68159-68162,68166,68171-68174,68179,68195-68196,68210,68214-68215,68217-68222 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r68133 | antoine.pitrou | 2009-01-01 16:38:03 +0100 (Thu, 01 Jan 2009) | 1 line
fill in actual issue number in tests
........
r68134 | hirokazu.yamamoto | 2009-01-01 16:45:39 +0100 (Thu, 01 Jan 2009) | 2 lines
Issue #4797: IOError.filename was not set when _fileio.FileIO failed to open
file with `str' filename on Windows.
........
r68141 | benjamin.peterson | 2009-01-01 17:43:12 +0100 (Thu, 01 Jan 2009) | 1 line
fix highlighting
........
r68142 | benjamin.peterson | 2009-01-01 18:29:49 +0100 (Thu, 01 Jan 2009) | 2 lines
welcome to 2009, Python!
........
r68145 | amaury.forgeotdarc | 2009-01-02 01:03:54 +0100 (Fri, 02 Jan 2009) | 5 lines
#4801 _collections module fails to build on cygwin.
_PyObject_GC_TRACK is the macro version of PyObject_GC_Track,
and according to documentation it should not be used for extension modules.
........
r68146 | ronald.oussoren | 2009-01-02 11:44:46 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue4472: "configure --enable-shared doesn't work on OSX"
........
r68148 | ronald.oussoren | 2009-01-02 11:48:31 +0100 (Fri, 02 Jan 2009) | 2 lines
Forgot to add a NEWS item in my previous checkin
........
r68149 | ronald.oussoren | 2009-01-02 11:50:48 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue4780
........
r68159 | ronald.oussoren | 2009-01-02 15:48:17 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue 1627952
........
r68160 | ronald.oussoren | 2009-01-02 15:52:09 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue r1737832
........
r68161 | ronald.oussoren | 2009-01-02 16:00:05 +0100 (Fri, 02 Jan 2009) | 3 lines
Fix for issue 1149804
........
r68162 | ronald.oussoren | 2009-01-02 16:06:00 +0100 (Fri, 02 Jan 2009) | 3 lines
Fix for issue 4472 is incompatible with Cygwin, this patch
should fix that.
........
r68166 | benjamin.peterson | 2009-01-02 19:26:23 +0100 (Fri, 02 Jan 2009) | 1 line
document PyMemberDef
........
r68171 | georg.brandl | 2009-01-02 21:25:14 +0100 (Fri, 02 Jan 2009) | 3 lines
#4811: fix markup glitches (mostly remains of the conversion),
found by Gabriel Genellina.
........
r68172 | martin.v.loewis | 2009-01-02 21:32:55 +0100 (Fri, 02 Jan 2009) | 2 lines
Issue #4075: Use OutputDebugStringW in Py_FatalError.
........
r68173 | martin.v.loewis | 2009-01-02 21:40:14 +0100 (Fri, 02 Jan 2009) | 2 lines
Issue #4051: Prevent conflict of UNICODE macros in cPickle.
........
r68174 | benjamin.peterson | 2009-01-02 21:47:27 +0100 (Fri, 02 Jan 2009) | 1 line
fix compilation on non-Windows platforms
........
r68179 | raymond.hettinger | 2009-01-02 22:26:45 +0100 (Fri, 02 Jan 2009) | 1 line
Issue #4615. Document how to use itertools for de-duping.
........
r68195 | georg.brandl | 2009-01-03 14:45:15 +0100 (Sat, 03 Jan 2009) | 2 lines
Remove useless string literal.
........
r68196 | georg.brandl | 2009-01-03 15:29:53 +0100 (Sat, 03 Jan 2009) | 2 lines
Fix indentation.
........
r68210 | georg.brandl | 2009-01-03 20:10:12 +0100 (Sat, 03 Jan 2009) | 2 lines
Set eol-style correctly for mp_distributing.py.
........
r68214 | georg.brandl | 2009-01-03 20:44:48 +0100 (Sat, 03 Jan 2009) | 2 lines
Make indentation consistent.
........
r68215 | georg.brandl | 2009-01-03 21:15:14 +0100 (Sat, 03 Jan 2009) | 2 lines
Fix role name.
........
r68217 | georg.brandl | 2009-01-03 21:30:15 +0100 (Sat, 03 Jan 2009) | 2 lines
Add rstlint, a little tool to find subtle markup problems and inconsistencies in the Doc sources.
........
r68218 | georg.brandl | 2009-01-03 21:38:59 +0100 (Sat, 03 Jan 2009) | 2 lines
Recognize usage of the default role.
........
r68219 | georg.brandl | 2009-01-03 21:47:01 +0100 (Sat, 03 Jan 2009) | 2 lines
Fix uses of the default role.
........
r68220 | georg.brandl | 2009-01-03 21:55:06 +0100 (Sat, 03 Jan 2009) | 2 lines
Remove trailing whitespace.
........
r68221 | georg.brandl | 2009-01-03 22:04:55 +0100 (Sat, 03 Jan 2009) | 2 lines
Remove tabs from the documentation.
........
r68222 | georg.brandl | 2009-01-03 22:11:58 +0100 (Sat, 03 Jan 2009) | 2 lines
Disable the line length checker by default.
........
2009-01-03 17:55:17 -04:00
|
|
|
# Register an instance; all the methods of the instance are
|
2007-08-15 11:28:01 -03:00
|
|
|
# published as XML-RPC methods (in this case, just 'div').
|
|
|
|
class MyFuncs:
|
Merged revisions 68133-68134,68141-68142,68145-68146,68148-68149,68159-68162,68166,68171-68174,68179,68195-68196,68210,68214-68215,68217-68222 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r68133 | antoine.pitrou | 2009-01-01 16:38:03 +0100 (Thu, 01 Jan 2009) | 1 line
fill in actual issue number in tests
........
r68134 | hirokazu.yamamoto | 2009-01-01 16:45:39 +0100 (Thu, 01 Jan 2009) | 2 lines
Issue #4797: IOError.filename was not set when _fileio.FileIO failed to open
file with `str' filename on Windows.
........
r68141 | benjamin.peterson | 2009-01-01 17:43:12 +0100 (Thu, 01 Jan 2009) | 1 line
fix highlighting
........
r68142 | benjamin.peterson | 2009-01-01 18:29:49 +0100 (Thu, 01 Jan 2009) | 2 lines
welcome to 2009, Python!
........
r68145 | amaury.forgeotdarc | 2009-01-02 01:03:54 +0100 (Fri, 02 Jan 2009) | 5 lines
#4801 _collections module fails to build on cygwin.
_PyObject_GC_TRACK is the macro version of PyObject_GC_Track,
and according to documentation it should not be used for extension modules.
........
r68146 | ronald.oussoren | 2009-01-02 11:44:46 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue4472: "configure --enable-shared doesn't work on OSX"
........
r68148 | ronald.oussoren | 2009-01-02 11:48:31 +0100 (Fri, 02 Jan 2009) | 2 lines
Forgot to add a NEWS item in my previous checkin
........
r68149 | ronald.oussoren | 2009-01-02 11:50:48 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue4780
........
r68159 | ronald.oussoren | 2009-01-02 15:48:17 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue 1627952
........
r68160 | ronald.oussoren | 2009-01-02 15:52:09 +0100 (Fri, 02 Jan 2009) | 2 lines
Fix for issue r1737832
........
r68161 | ronald.oussoren | 2009-01-02 16:00:05 +0100 (Fri, 02 Jan 2009) | 3 lines
Fix for issue 1149804
........
r68162 | ronald.oussoren | 2009-01-02 16:06:00 +0100 (Fri, 02 Jan 2009) | 3 lines
Fix for issue 4472 is incompatible with Cygwin, this patch
should fix that.
........
r68166 | benjamin.peterson | 2009-01-02 19:26:23 +0100 (Fri, 02 Jan 2009) | 1 line
document PyMemberDef
........
r68171 | georg.brandl | 2009-01-02 21:25:14 +0100 (Fri, 02 Jan 2009) | 3 lines
#4811: fix markup glitches (mostly remains of the conversion),
found by Gabriel Genellina.
........
r68172 | martin.v.loewis | 2009-01-02 21:32:55 +0100 (Fri, 02 Jan 2009) | 2 lines
Issue #4075: Use OutputDebugStringW in Py_FatalError.
........
r68173 | martin.v.loewis | 2009-01-02 21:40:14 +0100 (Fri, 02 Jan 2009) | 2 lines
Issue #4051: Prevent conflict of UNICODE macros in cPickle.
........
r68174 | benjamin.peterson | 2009-01-02 21:47:27 +0100 (Fri, 02 Jan 2009) | 1 line
fix compilation on non-Windows platforms
........
r68179 | raymond.hettinger | 2009-01-02 22:26:45 +0100 (Fri, 02 Jan 2009) | 1 line
Issue #4615. Document how to use itertools for de-duping.
........
r68195 | georg.brandl | 2009-01-03 14:45:15 +0100 (Sat, 03 Jan 2009) | 2 lines
Remove useless string literal.
........
r68196 | georg.brandl | 2009-01-03 15:29:53 +0100 (Sat, 03 Jan 2009) | 2 lines
Fix indentation.
........
r68210 | georg.brandl | 2009-01-03 20:10:12 +0100 (Sat, 03 Jan 2009) | 2 lines
Set eol-style correctly for mp_distributing.py.
........
r68214 | georg.brandl | 2009-01-03 20:44:48 +0100 (Sat, 03 Jan 2009) | 2 lines
Make indentation consistent.
........
r68215 | georg.brandl | 2009-01-03 21:15:14 +0100 (Sat, 03 Jan 2009) | 2 lines
Fix role name.
........
r68217 | georg.brandl | 2009-01-03 21:30:15 +0100 (Sat, 03 Jan 2009) | 2 lines
Add rstlint, a little tool to find subtle markup problems and inconsistencies in the Doc sources.
........
r68218 | georg.brandl | 2009-01-03 21:38:59 +0100 (Sat, 03 Jan 2009) | 2 lines
Recognize usage of the default role.
........
r68219 | georg.brandl | 2009-01-03 21:47:01 +0100 (Sat, 03 Jan 2009) | 2 lines
Fix uses of the default role.
........
r68220 | georg.brandl | 2009-01-03 21:55:06 +0100 (Sat, 03 Jan 2009) | 2 lines
Remove trailing whitespace.
........
r68221 | georg.brandl | 2009-01-03 22:04:55 +0100 (Sat, 03 Jan 2009) | 2 lines
Remove tabs from the documentation.
........
r68222 | georg.brandl | 2009-01-03 22:11:58 +0100 (Sat, 03 Jan 2009) | 2 lines
Disable the line length checker by default.
........
2009-01-03 17:55:17 -04:00
|
|
|
def div(self, x, y):
|
2007-08-15 11:28:01 -03:00
|
|
|
return x // y
|
|
|
|
|
|
|
|
server.register_instance(MyFuncs())
|
|
|
|
|
|
|
|
# Run the server's main loop
|
|
|
|
server.serve_forever()
|
|
|
|
|
2007-12-03 16:03:46 -04:00
|
|
|
The following client code will call the methods made available by the preceding
|
2007-08-15 11:28:01 -03:00
|
|
|
server::
|
|
|
|
|
|
|
|
import xmlrpclib
|
|
|
|
|
2007-09-12 15:05:57 -03:00
|
|
|
s = xmlrpclib.ServerProxy('http://localhost:8000')
|
2007-08-15 11:28:01 -03:00
|
|
|
print s.pow(2,3) # Returns 2**3 = 8
|
|
|
|
print s.add(2,3) # Returns 5
|
|
|
|
print s.div(5,2) # Returns 5//2 = 2
|
|
|
|
|
|
|
|
# Print list of available methods
|
|
|
|
print s.system.listMethods()
|
|
|
|
|
|
|
|
|
|
|
|
CGIXMLRPCRequestHandler
|
|
|
|
-----------------------
|
|
|
|
|
|
|
|
The :class:`CGIXMLRPCRequestHandler` class can be used to handle XML-RPC
|
|
|
|
requests sent to Python CGI scripts.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: CGIXMLRPCRequestHandler.register_function(function[, name])
|
|
|
|
|
|
|
|
Register a function that can respond to XML-RPC requests. If *name* is given,
|
|
|
|
it will be the method name associated with function, otherwise
|
|
|
|
*function.__name__* will be used. *name* can be either a normal or Unicode
|
|
|
|
string, and may contain characters not legal in Python identifiers, including
|
|
|
|
the period character.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: CGIXMLRPCRequestHandler.register_instance(instance)
|
|
|
|
|
|
|
|
Register an object which is used to expose method names which have not been
|
|
|
|
registered using :meth:`register_function`. If instance contains a
|
|
|
|
:meth:`_dispatch` method, it is called with the requested method name and the
|
|
|
|
parameters from the request; the return value is returned to the client as the
|
|
|
|
result. If instance does not have a :meth:`_dispatch` method, it is searched
|
|
|
|
for an attribute matching the name of the requested method; if the requested
|
|
|
|
method name contains periods, each component of the method name is searched for
|
|
|
|
individually, with the effect that a simple hierarchical search is performed.
|
|
|
|
The value found from this search is then called with the parameters from the
|
|
|
|
request, and the return value is passed back to the client.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: CGIXMLRPCRequestHandler.register_introspection_functions()
|
|
|
|
|
|
|
|
Register the XML-RPC introspection functions ``system.listMethods``,
|
|
|
|
``system.methodHelp`` and ``system.methodSignature``.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: CGIXMLRPCRequestHandler.register_multicall_functions()
|
|
|
|
|
|
|
|
Register the XML-RPC multicall function ``system.multicall``.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: CGIXMLRPCRequestHandler.handle_request([request_text = None])
|
|
|
|
|
|
|
|
Handle a XML-RPC request. If *request_text* is given, it should be the POST
|
|
|
|
data provided by the HTTP server, otherwise the contents of stdin will be used.
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
class MyFuncs:
|
|
|
|
def div(self, x, y) : return x // y
|
|
|
|
|
|
|
|
|
|
|
|
handler = CGIXMLRPCRequestHandler()
|
|
|
|
handler.register_function(pow)
|
|
|
|
handler.register_function(lambda x,y: x+y, 'add')
|
|
|
|
handler.register_introspection_functions()
|
|
|
|
handler.register_instance(MyFuncs())
|
|
|
|
handler.handle_request()
|
|
|
|
|