From 427aedbbd436a3daa27176b2a57b8e402d1ff0e0 Mon Sep 17 00:00:00 2001 From: "Andrew M. Kuchling" Date: Sun, 4 Dec 2005 17:13:12 +0000 Subject: [PATCH] [Patch #1039083] Add 'encoding' parameter to SimpleXMLRPCServer --- Doc/lib/libsimplexmlrpc.tex | 25 ++++++++++++++++--------- Lib/SimpleXMLRPCServer.py | 19 +++++++++++-------- Misc/NEWS | 2 +- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/Doc/lib/libsimplexmlrpc.tex b/Doc/lib/libsimplexmlrpc.tex index 4d179f6c4e2..ad8ccd483b1 100644 --- a/Doc/lib/libsimplexmlrpc.tex +++ b/Doc/lib/libsimplexmlrpc.tex @@ -14,24 +14,31 @@ CGI environment, using \class{CGIXMLRPCRequestHandler}. \begin{classdesc}{SimpleXMLRPCServer}{addr\optional{, requestHandler\optional{, - logRequests\optional{allow_none}}}} + logRequests\optional{allow_none\optional{, encoding}}}}} - Create a new server instance. The \var{requestHandler} parameter + Create a new server instance. This class + provides methods for registration of functions that can be called by + the XML-RPC protocol. 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. - \versionchanged[The \var{allow_none} parameter was added]{2.5} + setting this parameter to false will turn off logging. + The \var{allow_none} and \var{encoding} parameters are passed on to + \module{xmlrpclib} and control the XML-RPC responses that will be returned + from the server. + \versionchanged[The \var{allow_none} and \var{encoding} parameters were added]{2.5} \end{classdesc} -\begin{classdesc}{CGIXMLRPCRequestHandler}{\optional{allow_none}} +\begin{classdesc}{CGIXMLRPCRequestHandler}{\optional{allow_none\optional{, encoding}}} Create a new instance to handle XML-RPC requests in a CGI - environment. \versionadded{2.3} - \versionchanged[The \var{allow_none} parameter was added]{2.5} + environment. + The \var{allow_none} and \var{encoding} parameters are passed on to + \module{xmlrpclib} and control the XML-RPC responses that will be returned + from the server. + \versionadded{2.3} + \versionchanged[The \var{allow_none} and \var{encoding} parameters were added]{2.5} \end{classdesc} \begin{classdesc}{SimpleXMLRPCRequestHandler}{} diff --git a/Lib/SimpleXMLRPCServer.py b/Lib/SimpleXMLRPCServer.py index 49b7f598ec8..cdf1fb6acfb 100644 --- a/Lib/SimpleXMLRPCServer.py +++ b/Lib/SimpleXMLRPCServer.py @@ -159,10 +159,11 @@ class SimpleXMLRPCDispatcher: reason to instantiate this class directly. """ - def __init__(self, allow_none): + def __init__(self, allow_none, encoding): self.funcs = {} self.instance = None self.allow_none = allow_none + self.encoding = encoding def register_instance(self, instance, allow_dotted_names=False): """Registers an instance to respond to XML-RPC requests. @@ -253,13 +254,15 @@ class SimpleXMLRPCDispatcher: # wrap response in a singleton tuple response = (response,) response = xmlrpclib.dumps(response, methodresponse=1, - allow_none = self.allow_none) + allow_none=self.allow_none, encoding=self.encoding) except Fault, fault: - response = xmlrpclib.dumps(fault) + response = xmlrpclib.dumps(fault, allow_none=self.allow_none, + encoding=self.encoding) except: # report exception back to server response = xmlrpclib.dumps( - xmlrpclib.Fault(1, "%s:%s" % (sys.exc_type, sys.exc_value)) + xmlrpclib.Fault(1, "%s:%s" % (sys.exc_type, sys.exc_value)), + encoding=self.encoding, allow_none=self.allow_none, ) return response @@ -481,10 +484,10 @@ class SimpleXMLRPCServer(SocketServer.TCPServer, allow_reuse_address = True def __init__(self, addr, requestHandler=SimpleXMLRPCRequestHandler, - logRequests=True, allow_none=False): + logRequests=True, allow_none=False, encoding=None): self.logRequests = logRequests - SimpleXMLRPCDispatcher.__init__(self, allow_none) + SimpleXMLRPCDispatcher.__init__(self, allow_none, encoding) SocketServer.TCPServer.__init__(self, addr, requestHandler) # [Bug #1222790] If possible, set close-on-exec flag; if a @@ -498,8 +501,8 @@ class SimpleXMLRPCServer(SocketServer.TCPServer, class CGIXMLRPCRequestHandler(SimpleXMLRPCDispatcher): """Simple handler for XML-RPC data passed through CGI.""" - def __init__(self, allow_none=False): - SimpleXMLRPCDispatcher.__init__(self, allow_none) + def __init__(self, allow_none=False, encoding=None): + SimpleXMLRPCDispatcher.__init__(self, allow_none, encoding) def handle_xmlrpc(self, request_text): """Handle a single XML-RPC request""" diff --git a/Misc/NEWS b/Misc/NEWS index bc8382ec212..7bc24dd72fa 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -454,7 +454,7 @@ Library - Bug #792570: SimpleXMLRPCServer had problems if the request grew too large. Fixed by reading the HTTP body in chunks instead of one big socket.read(). -- Patch #893642: add allow_none argument to constructors of +- Patches #893642, #1039083: add allow_none, encoding arguments to constructors of SimpleXMLRPCServer and CGIXMLRPCRequestHandler. - Bug #1110478: Revert os.environ.update to do putenv again.