[Checkins] SVN: zope.bugchecker/trunk/src/zope/bugchecker/bugchecker.py Added support for sending the report via e-mail

Charlie Clark charlie at begeistert.org
Tue May 18 14:08:37 EDT 2010


Log message for revision 112469:
  Added support for sending the report via e-mail

Changed:
  U   zope.bugchecker/trunk/src/zope/bugchecker/bugchecker.py

-=-
Modified: zope.bugchecker/trunk/src/zope/bugchecker/bugchecker.py
===================================================================
--- zope.bugchecker/trunk/src/zope/bugchecker/bugchecker.py	2010-05-18 17:42:51 UTC (rev 112468)
+++ zope.bugchecker/trunk/src/zope/bugchecker/bugchecker.py	2010-05-18 18:08:36 UTC (rev 112469)
@@ -64,11 +64,22 @@
 --project-group, -g  Supply a named project group.  If no project names are
                      passed, use the project group to look up a list of project
                      names
+
+--mail, -m           Send report as e-mail. Must also supply at least a "to"
+                     and "from" address. Host will default to localhost if
+                     none is supplied here.
+
+--mail-from          Address sending an e-mail report
+
+--mail-to            Address e-mail report will be sent to
+
 """
 
 import datetime
 import getopt
 import sys
+import smtplib
+import StringIO
 
 from launchpadlib.launchpad import Launchpad
 from pytz import utc
@@ -139,20 +150,36 @@
         if level <= self.verbose:
             print message
 
+def mail_it(mail_host, mail_from, mail_to, subject, report):
+    """Send report as e-mail"""
+
+    mail = {}
+    mailserver = smtplib.SMTP(mail_host)
+    msg = ('From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s' %
+            (mail_from, mail_to, subject, report.getvalue()))
+    mailserver.sendmail(mail_from, [mail_to], msg)
+    mailserver.quit()
+
 def main():
     verbose = 1
     days = 14
     states = []
     project_group = None
+    sendmail = False
+    mail_to = None
+    mail_from = None
     try:
         options, args = getopt.gnu_getopt(sys.argv[1:],
-                                          '?hqvn:s:g:',
+                                          '?hqvn:s:g:m',
                                           ['help',
                                            'verbose',
                                            'quiet',
                                            'num-days=',
                                            'state=',
                                            'project-group=',
+                                           'mail=',
+                                           'mail-from=',
+                                           'mail-to='
                                           ])
     except getopt.GetoptError, e:
         print __doc__
@@ -174,9 +201,23 @@
             states.append(v)
         elif k in ('-g', '--project-group'):
             project_group = v
+        elif k in ('-m', '--mail'):
+            sendmail = True
+            mail_host = v or 'localhost'
+        elif k == '--mail-to':
+            mail_to = v
+        elif k == '--mail-from':
+            mail_from = v
         else:
             print __doc__
             sys.exit(1)
+    if sendmail is True:
+        if not (mail_to or mail_from):
+            print "Mail addresses must be supplied"
+            sys.exit(1)
+        else:
+            report = StringIO.StringIO()
+            sys.stdout = report
 
     today = datetime.date.today()
     delta = datetime.timedelta(days=days)
@@ -215,6 +256,9 @@
     rheostat(0, 'Total languishing bugs:  %d' % total)
     rheostat(1, '=' * 78)
 
+    if sendmail is True:
+        mail_it(mail_host, mail_from, mail_to, 
+                'Total languishing bugs:  %d' % total, report)
     if total > 0:
         sys.exit(-1)
 



More information about the checkins mailing list