Hi,

On 30/07/2011 5.58, senthil.kumaran wrote:
http://hg.python.org/cpython/rev/26839edf3cc1
changeset:   71617:26839edf3cc1
parent:      71613:018e14a46454
user:        Senthil Kumaran<sent...@uthcode.com>
date:        Sat Jul 30 10:56:50 2011 +0800
summary:
   Fix closes Issue11281 - smtplib.STMP gets source_address parameter, which 
adds the ability to bind to specific source address on a machine with multiple 
interfaces. Patch by Paulo Scardine.

files:
   Doc/library/smtplib.rst  |  33 +++++++++++++++++-----
   Lib/smtplib.py           |  40 ++++++++++++++++++---------
   Lib/test/mock_socket.py  |   3 +-
   Lib/test/test_smtplib.py |  17 +++++++++++
   Misc/NEWS                |   4 ++
   5 files changed, 75 insertions(+), 22 deletions(-)


diff --git a/Doc/library/smtplib.rst b/Doc/library/smtplib.rst
--- a/Doc/library/smtplib.rst
+++ b/Doc/library/smtplib.rst
@@ -20,7 +20,7 @@
  Protocol) and :rfc:`1869` (SMTP Service Extensions).


-.. class:: SMTP(host='', port=0, local_hostname=None[, timeout])
+.. class:: SMTP(host='', port=0, local_hostname=None[, timeout], 
source_address=None)

The "[, timeout]" now looks weird there, and it would be better to convert it to ", timeout=..." to match the other args. However I don't know what the value should be, since the real value is socket._GLOBAL_DEFAULT_TIMEOUT (i.e. object()) and I don't think it's a good idea to expose that. Maybe "None" can be used instead?


     A :class:`SMTP` instance encapsulates an SMTP connection.  It has methods
     that support a full repertoire of SMTP and ESMTP operations. If the 
optional
@@ -29,7 +29,12 @@
     raised if the specified host doesn't respond correctly. The optional
     *timeout* parameter specifies a timeout in seconds for blocking operations
     like the connection attempt (if not specified, the global default timeout
-   setting will be used).
+   setting will be used). The optional source_address parameter allows to bind 
to some
+   specific source address in a machine with multiple network interfaces,
+   and/or to some specific source tcp port. It takes a 2-tuple (host, port),

I think TCP should be uppercase.

+   for the socket to bind to as its source address before connecting. If
+   ommited (or if host or port are '' and/or 0 respectively) the OS default

s/ommited/omitted/ and s/''/``''``/

+   behavior will be used.

     For normal use, you should only require the initialization/connect,
     :meth:`sendmail`, and :meth:`quit` methods.  An example is included below.
@@ -48,8 +53,10 @@
     .. versionchanged:: 3.3
        Support for the :keyword:`with` statement was added.

+   .. versionadded:: 3.3
+      source_address parameter.

I think the convention is to use "versionadded" when the function/method/class/etc has been added, and "versionchanged" for all the changes, including new arguments.

-.. class:: SMTP_SSL(host='', port=0, local_hostname=None, keyfile=None, 
certfile=None[, timeout], context=None)
+.. class:: SMTP_SSL(host='', port=0, local_hostname=None, keyfile=None, 
certfile=None[, timeout], context=None, source_address=None)

Ditto for "[, timeout]" and the typos/markup below.

     A :class:`SMTP_SSL` instance behaves exactly the same as instances of
     :class:`SMTP`. :class:`SMTP_SSL` should be used for situations where SSL is
@@ -62,18 +69,28 @@
     keyfile and certfile must be None.  The optional *timeout*
     parameter specifies a timeout in seconds for blocking operations like the
     connection attempt (if not specified, the global default timeout setting
-   will be used).
+   will be used). The optional source_address parameter allows to bind to some
+   specific source address in a machine with multiple network interfaces,
+   and/or to some specific source tcp port. It takes a 2-tuple (host, port),
+   for the socket to bind to as its source address before connecting. If
+   ommited (or if host or port are '' and/or 0 respectively) the OS default
+   behavior will be used.

     .. versionchanged:: 3.3
        *context* was added.

+   .. versionadded:: 3.3
+      source_address parameter.

-.. class:: LMTP(host='', port=LMTP_PORT, local_hostname=None)
+
+.. class:: LMTP(host='', port=LMTP_PORT, local_hostname=None, 
source_address=None)

     The LMTP protocol, which is very similar to ESMTP, is heavily based on the
-   standard SMTP client. It's common to use Unix sockets for LMTP, so our 
:meth:`connect`
-   method must support that as well as a regular host:port server. To specify a
-   Unix socket, you must use an absolute path for *host*, starting with a '/'.
+   standard SMTP client. It's common to use Unix sockets for LMTP, so our
+   :meth:`connect` method must support that as well as a regular host:port
+   server. The optional parameters local_hostname and source_address has the

s/has/have/?
Also I prefer 'arguments' rather than 'parameters', the smtplib doc uses both, but 'arguments' seems to be used more.

+   same meaning as that of SMTP client.To specify a Unix socket, you must use

Missing space after the '.' (there should be two spaces, but here a single space is used consistently so it's fine).

+   an absolute path for *host*, starting with a '/'.

     Authentication is supported, using the regular SMTP mechanism. When using 
a Unix
     socket, LMTP generally don't support or require any authentication, but 
your
diff --git a/Lib/smtplib.py b/Lib/smtplib.py
--- a/Lib/smtplib.py
+++ b/Lib/smtplib.py
@@ -215,7 +215,8 @@
  [...]

Best Regards,
Ezio Melotti
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to