source: asadb/groups/listdiff.py

stable
Last change on this file was 093448c, checked in by ASA Group Database <asa-db@…>, 11 years ago

Make listdiff diff the GSC and UA Finboard lists too

  • Property mode set to 100755
File size: 2.2 KB
Line 
1#!/usr/bin/python
2
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.db import connection
13
14import groups.models
15import util.mailinglist
16
17def 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
39def 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
65if __name__ == '__main__':
66    diff_lists(get_lists())
Note: See TracBrowser for help on using the repository browser.