add context parameter to xmlrpclib.ServerProxy (#22960)
Patch by Alex Gaynor.
This commit is contained in:
parent
2b3b95be62
commit
c1da3d1ed8
|
@ -34,7 +34,7 @@ between conformable Python objects and XML on the wire.
|
|||
|
||||
.. class:: ServerProxy(uri, transport=None, encoding=None, verbose=False, \
|
||||
allow_none=False, use_datetime=False, \
|
||||
use_builtin_types=False)
|
||||
use_builtin_types=False, context=None)
|
||||
|
||||
.. versionchanged:: 3.3
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
compatibility. New code should use :class:`ServerProxy`.
|
||||
|
||||
.. versionchanged:: 3.4.3
|
||||
Added the *context* argument.
|
||||
|
||||
|
||||
.. seealso::
|
||||
|
||||
|
|
|
@ -1323,6 +1323,11 @@ class Transport:
|
|||
class SafeTransport(Transport):
|
||||
"""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
|
||||
|
||||
def make_connection(self, host):
|
||||
|
@ -1336,7 +1341,7 @@ class SafeTransport(Transport):
|
|||
# host may be a string, or a (host, x509-dict) tuple
|
||||
chost, self._extra_headers, x509 = self.get_host_info(host)
|
||||
self._connection = host, http.client.HTTPSConnection(chost,
|
||||
None, **(x509 or {}))
|
||||
None, context=self.context, **(x509 or {}))
|
||||
return self._connection[1]
|
||||
|
||||
##
|
||||
|
@ -1379,7 +1384,8 @@ class ServerProxy:
|
|||
"""
|
||||
|
||||
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
|
||||
|
||||
# get the url
|
||||
|
@ -1393,10 +1399,13 @@ class ServerProxy:
|
|||
if transport is None:
|
||||
if type == "https":
|
||||
handler = SafeTransport
|
||||
extra_kwargs = {"context": context}
|
||||
else:
|
||||
handler = Transport
|
||||
extra_kwargs = {}
|
||||
transport = handler(use_datetime=use_datetime,
|
||||
use_builtin_types=use_builtin_types)
|
||||
use_builtin_types=use_builtin_types,
|
||||
**extra_kwargs)
|
||||
self.__transport = transport
|
||||
|
||||
self.__encoding = encoding or 'utf-8'
|
||||
|
|
Loading…
Reference in New Issue