add context parameter to xmlrpclib.ServerProxy (#22960)

Patch by Alex Gaynor.
This commit is contained in:
Benjamin Peterson 2014-11-29 23:32:57 -05:00
parent 2b3b95be62
commit c1da3d1ed8
3 changed files with 21 additions and 5 deletions

View File

@ -34,7 +34,7 @@ between conformable Python objects and XML on the wire.
.. class:: ServerProxy(uri, transport=None, encoding=None, verbose=False, \ .. class:: ServerProxy(uri, transport=None, encoding=None, verbose=False, \
allow_none=False, use_datetime=False, \ allow_none=False, use_datetime=False, \
use_builtin_types=False) use_builtin_types=False, context=None)
.. versionchanged:: 3.3 .. versionchanged:: 3.3
The *use_builtin_types* flag was added. The *use_builtin_types* flag was added.
@ -63,7 +63,9 @@ between conformable Python objects and XML on the wire.
portion will be base64-encoded as an HTTP 'Authorization' header, and sent to portion will be base64-encoded as an HTTP 'Authorization' header, and sent to
the remote server as part of the connection process when invoking an XML-RPC the remote server as part of the connection process when invoking an XML-RPC
method. You only need to use this if the remote server requires a Basic method. You only need to use this if the remote server requires a Basic
Authentication user and password. Authentication user and password. If an HTTPS url is provided, *context* may
be :class:`ssl.SSLContext` and configures the SSL settings of the underlying
HTTPS connection.
The returned instance is a proxy object with methods that can be used to invoke The returned instance is a proxy object with methods that can be used to invoke
corresponding RPC calls on the remote server. If the remote server supports the corresponding RPC calls on the remote server. If the remote server supports the
@ -127,6 +129,9 @@ between conformable Python objects and XML on the wire.
:class:`Server` is retained as an alias for :class:`ServerProxy` for backwards :class:`Server` is retained as an alias for :class:`ServerProxy` for backwards
compatibility. New code should use :class:`ServerProxy`. compatibility. New code should use :class:`ServerProxy`.
.. versionchanged:: 3.4.3
Added the *context* argument.
.. seealso:: .. seealso::

View File

@ -1323,6 +1323,11 @@ class Transport:
class SafeTransport(Transport): class SafeTransport(Transport):
"""Handles an HTTPS transaction to an XML-RPC server.""" """Handles an HTTPS transaction to an XML-RPC server."""
def __init__(self, use_datetime=False, use_builtin_types=False, *,
context=None):
super().__init__(use_datetime=use_datetime, use_builtin_types=use_builtin_types)
self.context = context
# FIXME: mostly untested # FIXME: mostly untested
def make_connection(self, host): def make_connection(self, host):
@ -1336,7 +1341,7 @@ class SafeTransport(Transport):
# host may be a string, or a (host, x509-dict) tuple # host may be a string, or a (host, x509-dict) tuple
chost, self._extra_headers, x509 = self.get_host_info(host) chost, self._extra_headers, x509 = self.get_host_info(host)
self._connection = host, http.client.HTTPSConnection(chost, self._connection = host, http.client.HTTPSConnection(chost,
None, **(x509 or {})) None, context=self.context, **(x509 or {}))
return self._connection[1] return self._connection[1]
## ##
@ -1379,7 +1384,8 @@ class ServerProxy:
""" """
def __init__(self, uri, transport=None, encoding=None, verbose=False, def __init__(self, uri, transport=None, encoding=None, verbose=False,
allow_none=False, use_datetime=False, use_builtin_types=False): allow_none=False, use_datetime=False, use_builtin_types=False,
*, context=None):
# establish a "logical" server connection # establish a "logical" server connection
# get the url # get the url
@ -1393,10 +1399,13 @@ class ServerProxy:
if transport is None: if transport is None:
if type == "https": if type == "https":
handler = SafeTransport handler = SafeTransport
extra_kwargs = {"context": context}
else: else:
handler = Transport handler = Transport
extra_kwargs = {}
transport = handler(use_datetime=use_datetime, transport = handler(use_datetime=use_datetime,
use_builtin_types=use_builtin_types) use_builtin_types=use_builtin_types,
**extra_kwargs)
self.__transport = transport self.__transport = transport
self.__encoding = encoding or 'utf-8' self.__encoding = encoding or 'utf-8'

View File

@ -36,6 +36,8 @@ Core and Builtins
Library Library
------- -------
- Issue #22960: Add a context argument to xmlrpclib.ServerProxy constructor.
- Issue #22915: SAX parser now supports files opened with file descriptor or - Issue #22915: SAX parser now supports files opened with file descriptor or
bytes path. bytes path.