source: asadb/groups/find_missing_transition.py @ 2a587e4

space-accessstablestage
Last change on this file since 2a587e4 was 2a587e4, checked in by ASA Group Database <asa-db@…>, 14 years ago

Misc. fixes for find_missing_transition.py

  • Add @mit.edu as necessary
  • Don't send messages to board members
  • Comment out the mail sending (uncomment to actually send...)
  • Minor editing of the template language
  • Property mode set to 100755
File size: 2.7 KB
Line 
1#!/usr/bin/python
2import csv
3import os
4import sys
5
6if __name__ == '__main__':
7    cur_file = os.path.abspath(__file__)
8    django_dir = os.path.abspath(os.path.join(os.path.dirname(cur_file), '..'))
9    sys.path.append(django_dir)
10    os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
11
12from django.core import mail
13from django.template import Context, Template
14from django.template.loader import get_template
15
16import groups.models
17
18def get_roles():
19    roles = [
20        ['treasurer', True, 'No treasurer listed', ],
21        ['financial', False, 'No financial signatories listed. At minimum, this should generally be your president and treasurer.', ],
22        ['reservation', False, 'No reservation signatories listed. Members reserving space for the group should be reservation signatories.', ],
23    ]
24    for role in roles:
25        obj = groups.models.OfficerRole.objects.get(slug=role[0])
26        role[0] = obj
27    return roles
28
29def check_group(group, roles, ):
30    problems = []
31    fail = False
32    if group.officer_email or group.description:
33        pass
34    else:
35        problems.append("No basic group information listed")
36        fail = True
37    for role, cause_fail, msg in roles:
38        if len(group.officers(role=role)) == 0:
39            problems.append(msg)
40            if cause_fail: fail = True
41    return fail, problems
42
43def canonicalize_email(email):
44    if '@' in email: return email
45    elif email == '': return ''
46    else: return email + "@mit.edu"
47
48def officers_lists(fd, ):
49    reader = csv.DictReader(fd)
50    lists = {}
51    for d in reader:
52        pk = int(d['ASA_STUDENT_GROUP_KEY'])
53        lists[pk] = canonicalize_email(d['OFFICER_EMAIL'])
54    return lists
55
56def check_groups(old_groups_data):
57    roles = get_roles()
58    officers = officers_lists(open(old_groups_data, 'r'))
59    tmpl = get_template('groups/letters/missing-transition.txt')
60    emails = []
61    for group in groups.models.Group.active_groups.all():
62        fail, problems = check_group(group, roles, )
63        if fail:
64            to = [officers[group.pk]]
65            if group.officer_email:
66                to.append(group.officer_email)
67            ctx = Context({
68                'group': group,
69                'problems': problems,
70            })
71            body = tmpl.render(ctx)
72            email = mail.EmailMessage(
73                subject="[ASA] Missing information for %s" % (group.name, ),
74                body=body,
75                from_email='asa-exec@mit.edu',
76                to=to,
77                bcc=['asa-db-outgoing@mit.edu'],
78            )
79            emails.append(email)
80
81    connection = mail.get_connection()
82    #connection.send_messages(emails)
83    for email in emails: print email.subject
84    print len(emails)
85
86if __name__ == '__main__':
87    check_groups(sys.argv[1])
Note: See TracBrowser for help on using the repository browser.