| 1 | #!/usr/bin/python |
|---|
| 2 | |
|---|
| 3 | import os |
|---|
| 4 | import sys |
|---|
| 5 | |
|---|
| 6 | if __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 | |
|---|
| 12 | from django.db import connection |
|---|
| 13 | |
|---|
| 14 | import groups.models |
|---|
| 15 | import util.mailinglist |
|---|
| 16 | |
|---|
| 17 | def get_lists(): |
|---|
| 18 | status_objs = groups.models.GroupStatus.objects.filter(slug__in=['active', 'suspended', ]) |
|---|
| 19 | active_groups = groups.models.Group.objects.filter(group_status__in=status_objs) |
|---|
| 20 | funded_groups = active_groups.filter(group_class__slug='mit-funded') |
|---|
| 21 | return ( |
|---|
| 22 | ( |
|---|
| 23 | util.mailinglist.MoiraList('finboard-groups-only'), |
|---|
| 24 | funded_groups.filter(group_funding__slug='undergrad'), |
|---|
| 25 | None, |
|---|
| 26 | ), |
|---|
| 27 | ( |
|---|
| 28 | util.mailinglist.MailmanList('gsc-fb-'), |
|---|
| 29 | funded_groups.filter(group_funding__slug='grad'), |
|---|
| 30 | None, |
|---|
| 31 | ), |
|---|
| 32 | ( |
|---|
| 33 | util.mailinglist.MailmanList('asa-official'), |
|---|
| 34 | active_groups, |
|---|
| 35 | 'asa-official-listeners@mit.edu', |
|---|
| 36 | ), |
|---|
| 37 | ) |
|---|
| 38 | |
|---|
| 39 | def diff_lists(lists): |
|---|
| 40 | for lst, group_filter, listeners in lists: |
|---|
| 41 | list_addresses = set(email.lower() for email in lst.list_members()) |
|---|
| 42 | db_addresses = set() |
|---|
| 43 | if listeners: |
|---|
| 44 | db_addresses.add(listeners) |
|---|
| 45 | for group in group_filter: |
|---|
| 46 | email = group.officer_email.lower() |
|---|
| 47 | db_addresses.add(email) |
|---|
| 48 | if email not in list_addresses: |
|---|
| 49 | print "%24s:\t%s:\t%s (%s)" % (lst.name, 'miss', email, group.name, ) |
|---|
| 50 | print "" |
|---|
| 51 | for email in list_addresses-db_addresses: |
|---|
| 52 | print "%24s:\t%s:\t%s" % (lst.name, 'extra', email, ) |
|---|
| 53 | print "" |
|---|
| 54 | |
|---|
| 55 | print "%24s: contains %d (list) vs. %d/%d (DB); %d missing from list; %d extra on list" % ( |
|---|
| 56 | lst.name, |
|---|
| 57 | len(list_addresses), |
|---|
| 58 | len(db_addresses), # this includes only one blank email, |
|---|
| 59 | len(group_filter), # so may be much lower than this one |
|---|
| 60 | len(db_addresses-list_addresses), |
|---|
| 61 | len(list_addresses-db_addresses), |
|---|
| 62 | ) |
|---|
| 63 | print "" |
|---|
| 64 | |
|---|
| 65 | if __name__ == '__main__': |
|---|
| 66 | diff_lists(get_lists()) |
|---|