#!/usr/bin/python import os import sys if __name__ == '__main__': cur_file = os.path.abspath(__file__) django_dir = os.path.abspath(os.path.join(os.path.dirname(cur_file), '..')) sys.path.append(django_dir) os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' from django.db import connection import groups.models import util.mailinglist def get_lists(): status_objs = groups.models.GroupStatus.objects.filter(slug__in=['active', 'suspended', ]) active_groups = groups.models.Group.objects.filter(group_status__in=status_objs) funded_groups = active_groups.filter(group_class__slug='mit-funded') return ( ( util.mailinglist.MoiraList('finboard-groups-only'), funded_groups.filter(group_funding__slug='undergrad'), None, ), ( util.mailinglist.MailmanList('gsc-fb-'), funded_groups.filter(group_funding__slug='grad'), None, ), ( util.mailinglist.MailmanList('asa-official'), active_groups, 'asa-official-listeners@mit.edu', ), ) def diff_lists(lists): for lst, group_filter, listeners in lists: list_addresses = set(email.lower() for email in lst.list_members()) db_addresses = set() if listeners: db_addresses.add(listeners) for group in group_filter: email = group.officer_email.lower() db_addresses.add(email) if email not in list_addresses: print "%24s:\t%s:\t%s (%s)" % (lst.name, 'miss', email, group.name, ) print "" for email in list_addresses-db_addresses: print "%24s:\t%s:\t%s" % (lst.name, 'extra', email, ) print "" print "%24s: contains %d (list) vs. %d/%d (DB); %d missing from list; %d extra on list" % ( lst.name, len(list_addresses), len(db_addresses), # this includes only one blank email, len(group_filter), # so may be much lower than this one len(db_addresses-list_addresses), len(list_addresses-db_addresses), ) print "" if __name__ == '__main__': diff_lists(get_lists())