diff --git a/ietf/bin/generate-wg-aliases b/ietf/bin/generate-wg-aliases index 32e733052..9c571dca8 100755 --- a/ietf/bin/generate-wg-aliases +++ b/ietf/bin/generate-wg-aliases @@ -4,20 +4,22 @@ # # $Id: generate-wg-aliases $ # -# Author: Markus Stenberg +# Original Author: Markus Stenberg +# Refactored By: Russ Housley # """ This script requires that the proper virtual python environment has been invoked before start. - This code dumps Django model IETFWG's contents as two sets of postfix mail lists: -ads, and -chairs - """ -# boilerplate (from various other ietf/bin scripts) -import io, os, sys +import io +import os +import sys +import datetime +import time filename = os.path.abspath(__file__) basedir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) @@ -36,25 +38,11 @@ from ietf.group.utils import get_group_ad_emails, get_group_role_emails, get_chi from ietf.name.models import GroupTypeName from ietf.utils.aliases import dump_sublist -# from secr/utils/group.py.. ACTIVE_STATES=['active', 'bof', 'proposed'] +GROUP_TYPES=['wg','rg','dir','team','review','program'] +NO_AD_GROUP_TYPES=['rg','team','program'] if __name__ == '__main__': - import datetime - import time - - # Year ago? - #show_since = datetime.datetime.now() - datetime.timedelta(365) - - # 2 years ago? - #show_since = datetime.datetime.now() - datetime.timedelta(2 * 365) - - # 3 years ago? - #show_since = datetime.datetime.now() - datetime.timedelta(3 * 365) - - # 5 years ago? - show_since = datetime.datetime.now() - datetime.timedelta(5 * 365) - date = time.strftime("%Y-%m-%d_%H:%M:%S") signature = '# Generated by %s at %s\n' % (filename, date) @@ -64,84 +52,39 @@ if __name__ == '__main__': afile.write(signature) vfile.write(signature) vfile.write("%s anything\n" % settings.GROUP_VIRTUAL_DOMAIN) + + # Inactive == 5 years ago + show_since = datetime.datetime.now() - datetime.timedelta(5 * 365) - # - Working groups ----------------------------------------- - wgs = Group.objects.filter(type='wg').all() + # Loop through each group type and build -ads and -chairs entries + for g in GROUP_TYPES: + entries = Group.objects.filter(type=g).all() + active_entries = entries.filter(state__in=ACTIVE_STATES) + inactive_recent_entries = entries.exclude(state__in=ACTIVE_STATES).filter(time__gte=show_since) + interesting_entries = active_entries | inactive_recent_entries - # - status = Active - active_wgs = wgs.filter(state__in=ACTIVE_STATES) + for e in interesting_entries.distinct().iterator(): + name = e.acronym + # Research groups, teams, and programs do not have -ads lists + if not g in NO_AD_GROUP_TYPES: + dump_sublist(afile, vfile, name+'-ads', ['ietf.org', ], settings.GROUP_VIRTUAL_DOMAIN, get_group_ad_emails(e)) + # All group types have -chairs lists + dump_sublist(afile, vfile, name+'-chairs', ['ietf.org', ], settings.GROUP_VIRTUAL_DOMAIN, get_group_role_emails(e, ['chair', 'secr'])) - # - activity within last year? (use concluded_date) - inactive_recent_wgs = wgs.exclude(state__in=ACTIVE_STATES).filter(time__gte=show_since) - interesting_wgs = active_wgs | inactive_recent_wgs - - for wg in interesting_wgs.distinct().iterator(): - name = wg.acronym - dump_sublist(afile, vfile, name+'-ads', ['ietf.org', ], settings.GROUP_VIRTUAL_DOMAIN, get_group_ad_emails(wg)) - dump_sublist(afile, vfile, name+'-chairs', ['ietf.org', ], settings.GROUP_VIRTUAL_DOMAIN, get_group_role_emails(wg, ['chair', 'secr'])) - - # - Research groups ----------------------------------------- - rgs = Group.objects.filter(type='rg').all() - - # - status = Active - active_rgs = rgs.filter(state__in=ACTIVE_STATES) - - # - activity within last year? (use concluded_date) - inactive_recent_rgs = rgs.exclude(state__in=ACTIVE_STATES).filter(time__gte=show_since) - interesting_rgs = active_rgs | inactive_recent_rgs - - for rg in interesting_rgs.distinct().iterator(): - name = rg.acronym - #dump_sublist('%s%s' % (name, '-ads'), get_group_ad_emails, rg, True) - dump_sublist(afile, vfile, name+'-chairs', ['ietf.org', 'irtf.org', ], settings.GROUP_VIRTUAL_DOMAIN, get_group_role_emails(rg, ['chair', 'secr'])) - - # - Directorates ----------------------------------------- - directorates = Group.objects.filter(type='dir').all() - - # - status = Active - active_directorates = directorates.filter(state__in=ACTIVE_STATES) - - # - activity within last year? (use concluded_date) - inactive_recent_directorates = directorates.exclude(state__in=ACTIVE_STATES).filter(time__gte=show_since) - interesting_directorates = active_directorates | inactive_recent_directorates - - for directorate in interesting_directorates.distinct().iterator(): - name = directorate.acronym - dump_sublist(afile, vfile, name+'-ads', ['ietf.org', ], settings.GROUP_VIRTUAL_DOMAIN, get_group_ad_emails(directorate)) - dump_sublist(afile, vfile, name+'-chairs', ['ietf.org', ], settings.GROUP_VIRTUAL_DOMAIN, get_group_role_emails(directorate, ['chair', 'secr'])) - - # - Teams ----------------------------------------- - teams = Group.objects.filter(type='team').all() - - # - status = Active - active_teams = teams.filter(state__in=ACTIVE_STATES) - - # - activity within last year? (use concluded_date) - inactive_recent_teams = teams.exclude(state__in=ACTIVE_STATES).filter(time__gte=show_since) - interesting_teams = active_teams | inactive_recent_teams - - for team in interesting_teams.distinct().iterator(): - name = team.acronym - dump_sublist(afile, vfile, name+'-chairs', ['ietf.org', ], settings.GROUP_VIRTUAL_DOMAIN, get_group_role_emails(team, ['chair', 'secr'])) - - # - Areas -------------------------------------------------- - # Additionally, for areas, we should list -ads and -chairs - # (for every chair in active groups within the area). + # The area lists include every chair in active working groups in the area areas = Group.objects.filter(type='area').all() active_areas = areas.filter(state__in=ACTIVE_STATES) for area in active_areas: name = area.acronym area_ad_emails = get_group_role_emails(area, ['pre-ad', 'ad', 'chair']) - dump_sublist(afile, vfile, name+'-ads' , ['ietf.org', ], settings.GROUP_VIRTUAL_DOMAIN, area_ad_emails) + dump_sublist(afile, vfile, name+'-ads', ['ietf.org', ], settings.GROUP_VIRTUAL_DOMAIN, area_ad_emails) dump_sublist(afile, vfile, name+'-chairs', ['ietf.org', ], settings.GROUP_VIRTUAL_DOMAIN, (get_child_group_role_emails(area, ['chair', 'secr']) | area_ad_emails)) - - # - Special groups -------------------------------------------------- - # We need to be able to send mail to chairs of groups that require - # group draft submission approval and don't otherwise have aliases + # Other groups with chairs that require Internet-Draft submission approval gtypes = GroupTypeName.objects.values_list('slug', flat=True) special_groups = Group.objects.filter(type__features__req_subm_approval=True, acronym__in=gtypes, state='active') for group in special_groups: dump_sublist(afile, vfile, group.acronym+'-chairs', ['ietf.org', ], settings.GROUP_VIRTUAL_DOMAIN, get_group_role_emails(group, ['chair', 'delegate'])) - + afile.close() + vfile.close() \ No newline at end of file