[foundation-web] renewal: added a new program to mail the members needing to renew



commit 460bde8f647da18bb982a679bd493e9384be491f
Author: Tobias Mueller <tobiasmue gnome org>
Date:   Thu May 3 14:38:05 2012 +0000

    renewal: added a new program to mail the members needing to renew
    
    If you really want to send an email, you can run it with "-s" to not
    accidentally flood someone. It reuses some logic from the other program but not nearly as much as I like. But it does the job for now.

 bin/mail_renewals_to_foundation_list.py |  109 +++++++++++++++++++++++++++++++
 1 files changed, 109 insertions(+), 0 deletions(-)
---
diff --git a/bin/mail_renewals_to_foundation_list.py b/bin/mail_renewals_to_foundation_list.py
new file mode 100755
index 0000000..19eb7cf
--- /dev/null
+++ b/bin/mail_renewals_to_foundation_list.py
@@ -0,0 +1,109 @@
+#!/usr/bin/env python
+
+import datetime
+import logging
+from optparse import OptionParser
+from textwrap import dedent
+import sys
+
+from get_renewees import get_members_which_need_renewal, send_email
+
+TEMPLATE = dedent('''
+    Hi,
+     
+    as per point 1.3 of [1], here it comes a list of members in need of a
+    renew in case they didn't receive their individual e-mail:
+     
+    First name, Last name (Last renewed on)
+    %(members)s
+     
+    The Renewal form can be found at [2].
+     
+    Cheers,
+      GNOME Membership and Elections Committee
+     
+    [1] https://mail.gnome.org/archives/foundation-list/2011-November/msg00000.html
+    [2] http://www.gnome.org/foundation/membership/apply/
+
+''')
+
+def format_members_for_mail(members, template=TEMPLATE):
+    fmt = " * %(firstname)s, %(lastname)s (%(token_or_last_renewed_on)s)"
+    member_lines = [fmt % member.__dict__ for member in members]
+
+    members_formatted = '\n'.join(member_lines)
+
+    mail = template % {'members': members_formatted}
+    
+    return mail
+    
+def main(options=None):
+    log = logging.getLogger()
+
+    options = options or {}
+    if options:
+        if options.template:
+            template = open(options.template, 'r').read()
+        else:
+            template = TEMPLATE
+        
+        if options.recipient:
+            to = options.recipient
+        else:
+            to = 'foundation-list gnome org'
+
+        if options.sendmail:
+            sendmail = options.sendmail
+        else:
+            sendmail = False
+
+
+
+    members = get_members_which_need_renewal('month')
+    emailtext = format_members_for_mail(members)
+    
+    today = datetime.date.today()
+    subject = "Memberships needing renewal (%s)" % today.strftime("%02Y-%02m")
+    
+    if sendmail:
+        log.warn('Sending mail to %s: %s', to, subject)
+        send_email(to, subject, emailtext)
+    else:
+        log.info('Not sending mail to %s', to)
+        log.info('%s', subject)
+        log.info('%s', emailtext)
+    
+    return 0
+    
+if __name__ == "__main__":
+    parser = OptionParser()
+    parser.add_option("-f", "--from-address", dest="fromaddress",
+                      help="Use that as sending address [default: %default]",
+                      default="Tobias Mueller <tobiasmue gnome org>") 
+    parser.add_option("-s", "--send-mail", dest="sendmail",
+                      help="Do indeed send mail [default: %default]",
+                      action="store_true",
+                      default=False)
+    parser.add_option("-l", "--loglevel", dest="loglevel",
+                      help="Sets the loglevel to one of debug, info, warn, "
+                            "error, critical", default="info") 
+    parser.add_option("-r", "--recipient", dest="recipient",
+                      help="Address to send an email to",
+                            default=None) 
+    parser.add_option("-t", "--template", dest="template",
+                      help="Use this file as a template, instead of the "
+                            "hardcoded default one. "
+                            "Please look at the source to see the available "
+                            "variables.",
+                            default=None) 
+    (options, args) = parser.parse_args()
+    loglevel = {'debug': logging.DEBUG, 'info': logging.INFO,
+                'warn': logging.WARN, 'error': logging.ERROR,
+                'critical': logging.CRITICAL}.get(options.loglevel, "warn")
+    LOGFORMAT = "%(asctime)s %(levelname)-8s %(name)s %(message)s"
+    DATEFORMAT = '%Y-%m-%d %H:%M:%S'
+    logging.basicConfig(level=loglevel, format=LOGFORMAT, datefmt=DATEFORMAT)
+    log = logging.getLogger('main')
+
+    sys.exit (main (options))
+     



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]