Skip to content

Commit

Permalink
add context parameter to xmlrpclib.ServerProxy (#22960)
Browse files Browse the repository at this point in the history
Patch from Alex Gaynor.
  • Loading branch information
benjaminp committed Nov 30, 2014
1 parent 209dd46 commit efa3cf8
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 6 deletions.
11 changes: 8 additions & 3 deletions Doc/library/xmlrpclib.rst
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ between conformable Python objects and XML on the wire.
For https URIs, :mod:`xmlrpclib` now performs all the necessary certificate
and hostname checks by default

.. class:: ServerProxy(uri[, transport[, encoding[, verbose[, allow_none[, use_datetime]]]]])
.. class:: ServerProxy(uri[, transport[, encoding[, verbose[, allow_none[, use_datetime[, context]]]]]])

A :class:`ServerProxy` instance is an object that manages communication with a
remote XML-RPC server. The required first argument is a URI (Uniform Resource
Expand All @@ -57,11 +57,13 @@ between conformable Python objects and XML on the wire.
:class:`datetime.datetime` objects may be passed to calls.

Both the HTTP and HTTPS transports support the URL syntax extension for HTTP
Basic Authentication: ``http://user:pass@host:port/path``. The ``user:pass``
Basic Authentication: ``http://user:pass@host:port/path``. The ``user:pass``
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
Expand Down Expand Up @@ -131,6 +133,9 @@ between conformable Python objects and XML on the wire.
*__dict__* attribute and don't have a base class that is marshalled in a
special way.

.. versionchanged:: 2.7.9
Added the *context* argument.


.. seealso::

Expand Down
10 changes: 7 additions & 3 deletions Lib/xmlrpclib.py
Original file line number Diff line number Diff line change
Expand Up @@ -1478,6 +1478,10 @@ def parse_response(self, response):
class SafeTransport(Transport):
"""Handles an HTTPS transaction to an XML-RPC server."""

def __init__(self, use_datetime=0, context=None):
Transport.__init__(self, use_datetime=use_datetime)
self.context = context

# FIXME: mostly untested

def make_connection(self, host):
Expand All @@ -1493,7 +1497,7 @@ def make_connection(self, host):
)
else:
chost, self._extra_headers, x509 = self.get_host_info(host)
self._connection = host, HTTPS(chost, None, **(x509 or {}))
self._connection = host, HTTPS(chost, None, context=context, **(x509 or {}))
return self._connection[1]

##
Expand Down Expand Up @@ -1536,7 +1540,7 @@ class ServerProxy:
"""

def __init__(self, uri, transport=None, encoding=None, verbose=0,
allow_none=0, use_datetime=0):
allow_none=0, use_datetime=0, context=None):
# establish a "logical" server connection

if isinstance(uri, unicode):
Expand All @@ -1553,7 +1557,7 @@ def __init__(self, uri, transport=None, encoding=None, verbose=0,

if transport is None:
if type == "https":
transport = SafeTransport(use_datetime=use_datetime)
transport = SafeTransport(use_datetime=use_datetime, context=context)
else:
transport = Transport(use_datetime=use_datetime)
self.__transport = transport
Expand Down
11 changes: 11 additions & 0 deletions Misc/NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,17 @@
Python News
+++++++++++

What's New in Python 2.7.9?
===========================

*Release date: 2014-12-XX*

Library
-------

- Issue #22960: Add a context argument to xmlrpclib.ServerProxy.


What's New in Python 2.7.9 release candidate 1?
===============================================

Expand Down

0 comments on commit efa3cf8

Please sign in to comment.