[Checkins] SVN: ZConfig/trunk/ - Added SMTP authentication support for email logger on Python 2.6.

Christian Zagrodnick cz at gocept.com
Sat Apr 10 08:12:11 EDT 2010


Log message for revision 110705:
  - Added SMTP authentication support for email logger on Python 2.6.
  
  

Changed:
  U   ZConfig/trunk/NEWS.txt
  U   ZConfig/trunk/ZConfig/components/logger/handlers.py
  U   ZConfig/trunk/ZConfig/components/logger/handlers.xml
  U   ZConfig/trunk/ZConfig/components/logger/tests/test_logger.py

-=-
Modified: ZConfig/trunk/NEWS.txt
===================================================================
--- ZConfig/trunk/NEWS.txt	2010-04-10 05:25:40 UTC (rev 110704)
+++ ZConfig/trunk/NEWS.txt	2010-04-10 12:12:11 UTC (rev 110705)
@@ -8,6 +8,8 @@
 - Fix relative path recognition.
   https://bugs.launchpad.net/zconfig/+bug/405687
 
+- Added SMTP authentication support for email logger on Python 2.6.
+
 ZConfig 2.7.1 (2009/06/13)
 --------------------------
 

Modified: ZConfig/trunk/ZConfig/components/logger/handlers.py
===================================================================
--- ZConfig/trunk/ZConfig/components/logger/handlers.py	2010-04-10 05:25:40 UTC (rev 110704)
+++ ZConfig/trunk/ZConfig/components/logger/handlers.py	2010-04-10 12:12:11 UTC (rev 110705)
@@ -212,7 +212,16 @@
             mailhost = host
         else:
             mailhost = host, port
+        kwargs = {}
+        if self.section.smtp_auth_username or self.section.smtp_auth_password:
+            # Since credentials were only added in py2.6 we use a kwarg to not
+            # break compatibility with older py
+            if sys.version_info < (2, 6):
+                raise ValueError('SMTP auth requires at least Python 2.6.')
+            kwargs['credentials'] = (self.section.smtp_auth_username,
+                                     self.section.smtp_auth_password)
         return loghandler.SMTPHandler(mailhost,
                                       self.section.fromaddr,
                                       self.section.toaddrs,
-                                      self.section.subject)
+                                      self.section.subject,
+                                      **kwargs)

Modified: ZConfig/trunk/ZConfig/components/logger/handlers.xml
===================================================================
--- ZConfig/trunk/ZConfig/components/logger/handlers.xml	2010-04-10 05:25:40 UTC (rev 110704)
+++ ZConfig/trunk/ZConfig/components/logger/handlers.xml	2010-04-10 12:12:11 UTC (rev 110705)
@@ -79,6 +79,8 @@
     <multikey name="to" required="yes" attribute="toaddrs"/>
     <key name="subject" default="Message from Zope"/>
     <key name="smtp-server" default="localhost" datatype="inet-address"/>
+    <key name="smtp-auth-username" default="" datatype="string"/>
+    <key name="smtp-auth-password" default="" datatype="string"/>
     <key name="format"
          default="%(asctime)s %(levelname)s %(name)s %(message)s"
          datatype=".log_format"/>

Modified: ZConfig/trunk/ZConfig/components/logger/tests/test_logger.py
===================================================================
--- ZConfig/trunk/ZConfig/components/logger/tests/test_logger.py	2010-04-10 05:25:40 UTC (rev 110704)
+++ ZConfig/trunk/ZConfig/components/logger/tests/test_logger.py	2010-04-10 12:12:11 UTC (rev 110705)
@@ -346,6 +346,32 @@
         self.assertEqual(handler.fromaddr, "zlog-user at example.com")
         self.assertEqual(handler.level, logging.FATAL)
 
+    def test_with_email_notifier_with_credentials(self):
+        try:
+            logger = self.check_simple_logger("<eventlog>\n"
+                                              "  <email-notifier>\n"
+                                              "    to sysadmin at example.com\n"
+                                              "    from zlog-user at example.com\n"
+                                              "    level fatal\n"
+                                              "    smtp-auth-username john\n"
+                                              "    smtp-auth-password johnpw\n"
+                                              "  </email-notifier>\n"
+                                              "</eventlog>")
+        except ValueError:
+            if sys.version_info >= (2, 6):
+                # For python 2.6 no ValueError must be raised.
+                raise
+        else:
+            # This path must only be reached with python >=2.6
+            self.assert_(sys.version_info >= (2, 6))
+            handler = logger.handlers[0]
+            self.assertEqual(handler.toaddrs, ["sysadmin at example.com"])
+            self.assertEqual(handler.fromaddr, "zlog-user at example.com")
+            self.assertEqual(handler.fromaddr, "zlog-user at example.com")
+            self.assertEqual(handler.level, logging.FATAL)
+            self.assertEqual(handler.username, 'john')
+            self.assertEqual(handler.password, 'johnpw')
+
     def check_simple_logger(self, text, level=logging.INFO):
         conf = self.get_config(text)
         self.assert_(conf.eventlog is not None)



More information about the checkins mailing list