| \section{\module{SimpleXMLRPCServer} --- | 
 |          Basic XML-RPC server} | 
 |  | 
 | \declaremodule{standard}{SimpleXMLRPCServer} | 
 | \modulesynopsis{Basic XML-RPC server implementation.} | 
 | \moduleauthor{Brian Quinlan}{brianq@activestate.com} | 
 | \sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org} | 
 |  | 
 |  | 
 | The \module{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}. | 
 |  | 
 | \begin{classdesc}{SimpleXMLRPCServer}{addr\optional{, | 
 |                                       requestHandler\optional{, logRequests}}} | 
 |  | 
 |   Create a new server instance.  The \var{requestHandler} parameter | 
 |   should be a factory for request handler instances; it defaults to | 
 |   \class{SimpleXMLRPCRequestHandler}.  The \var{addr} and | 
 |   \var{requestHandler} parameters are passed to the | 
 |   \class{\refmodule{SocketServer}.TCPServer} constructor.  If | 
 |   \var{logRequests} is true (the default), requests will be logged; | 
 |   setting this parameter to false will turn off logging.  This class | 
 |   provides methods for registration of functions that can be called by | 
 |   the XML-RPC protocol. | 
 | \end{classdesc} | 
 |  | 
 | \begin{classdesc}{CGIXMLRPCRequestHandler}{} | 
 |   Create a new instance to handle XML-RPC requests in a CGI | 
 |   environment. \versionadded{2.3} | 
 | \end{classdesc} | 
 |  | 
 | \begin{classdesc}{SimpleXMLRPCRequestHandler}{} | 
 |   Create a new request handler instance.  This request handler | 
 |   supports \code{POST} requests and modifies logging so that the | 
 |   \var{logRequests} parameter to the \class{SimpleXMLRPCServer} | 
 |   constructor parameter is honored. | 
 | \end{classdesc} | 
 |  | 
 |  | 
 | \subsection{SimpleXMLRPCServer Objects \label{simple-xmlrpc-servers}} | 
 |  | 
 | The \class{SimpleXMLRPCServer} class is based on | 
 | \class{SocketServer.TCPServer} and provides a means of creating | 
 | simple, stand alone XML-RPC servers. | 
 |  | 
 | \begin{methoddesc}[SimpleXMLRPCServer]{register_function}{function\optional{, | 
 |                                                           name}} | 
 |   Register a function that can respond to XML-RPC requests.  If | 
 |   \var{name} is given, it will be the method name associated with | 
 |   \var{function}, otherwise \code{\var{function}.__name__} will be | 
 |   used.  \var{name} can be either a normal or Unicode string, and may | 
 |   contain characters not legal in Python identifiers, including the | 
 |   period character. | 
 | \end{methoddesc} | 
 |  | 
 | \begin{methoddesc}[SimpleXMLRPCServer]{register_instance}{instance} | 
 |   Register an object which is used to expose method names which have | 
 |   not been registered using \method{register_function()}.  If | 
 |   \var{instance} contains a \method{_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 | 
 |   \var{instance} does not have a \method{_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. | 
 | \end{methoddesc} | 
 |  | 
 | \begin{methoddesc}{register_introspection_functions}{} | 
 |   Registers the XML-RPC introspection functions \code{system.listMethods}, | 
 |   \code{system.methodHelp} and \code{system.methodSignature}.  | 
 |   \versionadded{2.3} | 
 | \end{methoddesc} | 
 |  | 
 | \begin{methoddesc}{register_multicall_functions}{} | 
 |   Registers the XML-RPC multicall function system.multicall. | 
 | \end{methoddesc} | 
 |  | 
 | Example: | 
 |  | 
 | \begin{verbatim} | 
 | class MyFuncs: | 
 |     def div(self, x, y) : return div(x,y) | 
 |  | 
 |  | 
 | server = SimpleXMLRPCServer(("localhost", 8000)) | 
 | server.register_function(pow) | 
 | server.register_function(lambda x,y: x+y, 'add') | 
 | server.register_introspection_functions() | 
 | server.register_instance(MyFuncs()) | 
 | server.serve_forever() | 
 | \end{verbatim} | 
 |  | 
 | \subsection{CGIXMLRPCRequestHandler} | 
 |  | 
 | The \class{CGIXMLRPCRequestHandler} class can be used to  | 
 | handle XML-RPC requests sent to Python CGI scripts. | 
 |  | 
 | \begin{methoddesc}{register_function}{function\optional{, name}} | 
 | Register a function that can respond to XML-RPC requests. If  | 
 | \var{name] is given, it will be the method name associated with  | 
 | function, otherwise \var{function.__name__} will be used. \var{name} | 
 | can be either a normal or Unicode string, and may contain  | 
 | characters not legal in Python identifiers, including the period | 
 | character.  | 
 | \end{methoddesc} | 
 |  | 
 | \begin{methoddesc}{register_instance}{instance} | 
 | Register an object which is used to expose method names  | 
 | which have not been registered using \method{register_function()}. If  | 
 | instance contains a \method{_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 \methode{_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.  | 
 | \end{methoddesc} | 
 |  | 
 | \begin{methoddesc}{register_introspection_functions}{} | 
 | Register the XML-RPC introspection functions  | 
 | \code{system.listMethods}, \code{system.methodHelp} and  | 
 | \code{system.methodSignature}. | 
 | \end{methoddesc} | 
 |  | 
 | \begin{methoddesc}{register_multicall_functions}{} | 
 | Register the XML-RPC multicall function \code{system.multicall}. | 
 | \end{methoddesc} | 
 |  | 
 | \begin{methoddesc}{handle_request}{\optional{request_text = None}} | 
 | Handle a XML-RPC request. If \var{request_text} is given, it  | 
 | should be the POST data provided by the HTTP server,  | 
 | otherwise the contents of stdin will be used. | 
 | \end{methoddesc} | 
 |  | 
 | Example: | 
 |  | 
 | \begin{verbatim} | 
 | class MyFuncs: | 
 |     def div(self, x, y) : return div(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() | 
 | \end{verbatim} |