]> granicus.if.org Git - python/commitdiff
Fixes #14314: Improved SMTP timeout handling.
authorVinay Sajip <vinay_sajip@yahoo.co.uk>
Thu, 15 Mar 2012 12:02:08 +0000 (12:02 +0000)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>
Thu, 15 Mar 2012 12:02:08 +0000 (12:02 +0000)
Lib/logging/handlers.py
Lib/test/test_logging.py

index bebd79a8fe1e139c6bb5540586f8523c69a1100d..f8632ceb1b45d7a2e1c3969498c597a97536285d 100644 (file)
@@ -867,7 +867,7 @@ class SMTPHandler(logging.Handler):
     A handler class which sends an SMTP email for each logging event.
     """
     def __init__(self, mailhost, fromaddr, toaddrs, subject,
-                 credentials=None, secure=None):
+                 credentials=None, secure=None, timeout=1.0):
         """
         Initialize the handler.
 
@@ -881,6 +881,8 @@ class SMTPHandler(logging.Handler):
         will be either an empty tuple, or a single-value tuple with the name
         of a keyfile, or a 2-value tuple with the names of the keyfile and
         certificate file. (This tuple is passed to the `starttls` method).
+        A timeout in seconds can be specified for the SMTP connection (the
+        default is one second).
         """
         logging.Handler.__init__(self)
         if isinstance(mailhost, tuple):
@@ -897,6 +899,7 @@ class SMTPHandler(logging.Handler):
         self.toaddrs = toaddrs
         self.subject = subject
         self.secure = secure
+        self.timeout = timeout
 
     def getSubject(self, record):
         """
@@ -919,7 +922,7 @@ class SMTPHandler(logging.Handler):
             port = self.mailport
             if not port:
                 port = smtplib.SMTP_PORT
-            smtp = smtplib.SMTP(self.mailhost, port)
+            smtp = smtplib.SMTP(self.mailhost, port, timeout=self.timeout)
             msg = self.format(record)
             msg = "From: %s\r\nTo: %s\r\nSubject: %s\r\nDate: %s\r\n\r\n%s" % (
                             self.fromaddr,
index be84be682f7173bcae3846e9c24ef842fe5d7b26..b0f8f9fb165c961ef91815d4f3b2e24a717a1173 100644 (file)
@@ -936,8 +936,9 @@ class SMTPHandlerTest(BaseTest):
         r = logging.makeLogRecord({'msg': 'Hello'})
         self.handled = threading.Event()
         h.handle(r)
-        self.handled.wait()
+        self.handled.wait(5.0)  # 14314: don't wait forever
         server.stop()
+        self.assertTrue(self.handled.is_set())
         self.assertEqual(len(self.messages), 1)
         peer, mailfrom, rcpttos, data = self.messages[0]
         self.assertEqual(mailfrom, 'me')