bpo-32680 add default "sock" on SMTP objects (#5345)

By default the smtplib.SMTP objects did not have a sock attribute, it
was only created during connect()
This commit is contained in:
Romuald Brunet 2018-10-09 16:31:55 +02:00 committed by Giampaolo Rodola
parent 2b2758d0b3
commit 7b31397180
3 changed files with 11 additions and 1 deletions

View File

@ -216,6 +216,8 @@ class SMTP:
method called 'sendmail' that will do an entire mail transaction.
"""
debuglevel = 0
sock = None
file = None
helo_resp = None
ehlo_msg = "ehlo"
@ -344,7 +346,7 @@ class SMTP:
"""Send `s' to the server."""
if self.debuglevel > 0:
self._print_debug('send:', repr(s))
if hasattr(self, 'sock') and self.sock:
if self.sock:
if isinstance(s, str):
# send is used by the 'data' command, where command_encoding
# should not be used, but 'data' needs to convert the string to

View File

@ -602,6 +602,13 @@ class NonConnectingTests(unittest.TestCase):
self.assertRaises(OSError, smtplib.SMTP,
"localhost:bogus")
def testSockAttributeExists(self):
# check that sock attribute is present outside of a connect() call
# (regression test, the previous behavior raised an
# AttributeError: 'SMTP' object has no attribute 'sock')
with smtplib.SMTP() as smtp:
self.assertIsNone(smtp.sock)
class DefaultArgumentsTests(unittest.TestCase):

View File

@ -0,0 +1 @@
:class:`smtplib.SMTP` objects now always have a `sock` attribute present