Added group secretaries to the alias lists. Refactored related utility functions to less code with fewer branches with greater generality.
- Legacy-Id: 10543
This commit is contained in:
parent
f5ca3a12bc
commit
9b274111eb
|
@ -38,7 +38,7 @@ django.setup()
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from ietf.doc.models import Document
|
from ietf.doc.models import Document
|
||||||
from ietf.group.utils import get_group_chairs_emails, get_group_ads_emails
|
from ietf.group.utils import get_group_role_emails, get_group_ad_emails
|
||||||
from ietf.utils.aliases import *
|
from ietf.utils.aliases import *
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ def get_draft_ad_emails(draft):
|
||||||
# If working group document, return current WG ADs
|
# If working group document, return current WG ADs
|
||||||
wg = draft.group
|
wg = draft.group
|
||||||
if wg and wg.acronym != 'none' and wg.parent and wg.parent.acronym != 'none':
|
if wg and wg.acronym != 'none' and wg.parent and wg.parent.acronym != 'none':
|
||||||
return get_group_ads_emails(wg)
|
return get_group_ad_emails(wg)
|
||||||
# If not, return explicit AD set (whether up to date or not)
|
# If not, return explicit AD set (whether up to date or not)
|
||||||
ad = draft.ad
|
ad = draft.ad
|
||||||
#return [ad and ad.user and ad.user.email]
|
#return [ad and ad.user and ad.user.email]
|
||||||
|
@ -147,7 +147,7 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
# .chairs = group chairs
|
# .chairs = group chairs
|
||||||
if draft.group:
|
if draft.group:
|
||||||
handle_sublist(afile, vfile, alias+'.chairs', get_group_chairs_emails(draft.group))
|
handle_sublist(afile, vfile, alias+'.chairs', get_group_role_emails(draft.group, ['chair', 'secr']))
|
||||||
|
|
||||||
# .ad = sponsoring AD / WG AD (WG document)
|
# .ad = sponsoring AD / WG AD (WG document)
|
||||||
handle_sublist(afile, vfile, alias+'.ad', get_draft_ad_emails(draft))
|
handle_sublist(afile, vfile, alias+'.ad', get_draft_ad_emails(draft))
|
||||||
|
|
|
@ -26,7 +26,7 @@ django.setup()
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from ietf.group.models import Group
|
from ietf.group.models import Group
|
||||||
from ietf.group.utils import get_group_ads_emails, get_group_chairs_emails, get_area_ads_emails, get_area_chairs_emails
|
from ietf.group.utils import get_group_ad_emails, get_group_role_emails, get_child_group_role_emails
|
||||||
from ietf.utils.aliases import dump_sublist
|
from ietf.utils.aliases import dump_sublist
|
||||||
|
|
||||||
# from secr/utils/group.py..
|
# from secr/utils/group.py..
|
||||||
|
@ -69,8 +69,8 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
for wg in interesting_wgs.distinct().iterator():
|
for wg in interesting_wgs.distinct().iterator():
|
||||||
name = wg.acronym
|
name = wg.acronym
|
||||||
dump_sublist(afile, vfile, name+'-ads', settings.GROUP_VIRTUAL_DOMAIN, get_group_ads_emails(wg))
|
dump_sublist(afile, vfile, name+'-ads', settings.GROUP_VIRTUAL_DOMAIN, get_group_ad_emails(wg))
|
||||||
dump_sublist(afile, vfile, name+'-chairs', settings.GROUP_VIRTUAL_DOMAIN, get_group_chairs_emails(wg))
|
dump_sublist(afile, vfile, name+'-chairs', settings.GROUP_VIRTUAL_DOMAIN, get_group_role_emails(wg, ['chair', 'secr']))
|
||||||
|
|
||||||
# - status = Active
|
# - status = Active
|
||||||
rgs = Group.objects.filter(type='rg').all()
|
rgs = Group.objects.filter(type='rg').all()
|
||||||
|
@ -82,8 +82,8 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
for rg in interesting_rgs.distinct().iterator():
|
for rg in interesting_rgs.distinct().iterator():
|
||||||
name = rg.acronym
|
name = rg.acronym
|
||||||
#dump_sublist('%s%s' % (name, '-ads'), get_group_ads_emails, rg, True)
|
#dump_sublist('%s%s' % (name, '-ads'), get_group_ad_emails, rg, True)
|
||||||
dump_sublist(afile, vfile, name+'-chairs', settings.GROUP_VIRTUAL_DOMAIN, get_group_chairs_emails(rg))
|
dump_sublist(afile, vfile, name+'-chairs', settings.GROUP_VIRTUAL_DOMAIN, get_group_role_emails(rg, ['chair', 'secr']))
|
||||||
|
|
||||||
# Additionally, for areaz, we should list -ads and -chairs
|
# Additionally, for areaz, we should list -ads and -chairs
|
||||||
# (for every chair in active groups within the area).
|
# (for every chair in active groups within the area).
|
||||||
|
@ -91,6 +91,7 @@ if __name__ == '__main__':
|
||||||
active_areas = areas.filter(state__in=ACTIVE_STATES)
|
active_areas = areas.filter(state__in=ACTIVE_STATES)
|
||||||
for area in active_areas:
|
for area in active_areas:
|
||||||
name = area.acronym
|
name = area.acronym
|
||||||
dump_sublist(afile, vfile, name+'-ads' , settings.GROUP_VIRTUAL_DOMAIN, get_area_ads_emails(area))
|
area_ad_emails = get_group_role_emails(area, ['pre-ad', 'ad', 'chair'])
|
||||||
dump_sublist(afile, vfile, name+'-chairs', settings.GROUP_VIRTUAL_DOMAIN, get_area_chairs_emails(area)+get_area_ads_emails(area))
|
dump_sublist(afile, vfile, name+'-ads' , settings.GROUP_VIRTUAL_DOMAIN, area_ad_emails)
|
||||||
|
dump_sublist(afile, vfile, name+'-chairs', settings.GROUP_VIRTUAL_DOMAIN, (get_child_group_role_emails(area, ['chair', 'secr']) | area_ad_emails))
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@ import os
|
||||||
|
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
|
|
||||||
|
import debug # pyflakes:ignore
|
||||||
|
|
||||||
from ietf.group.models import Group, RoleHistory
|
from ietf.group.models import Group, RoleHistory
|
||||||
from ietf.person.models import Email
|
from ietf.person.models import Email
|
||||||
from ietf.utils.history import get_history_object_for, copy_many_to_many_for_history
|
from ietf.utils.history import get_history_object_for, copy_many_to_many_for_history
|
||||||
|
@ -44,53 +46,34 @@ def get_charter_text(group):
|
||||||
except IOError:
|
except IOError:
|
||||||
return 'Error Loading Group Charter'
|
return 'Error Loading Group Charter'
|
||||||
|
|
||||||
def get_area_ads_emails(area):
|
def get_group_role_emails(group, roles):
|
||||||
if area.acronym == 'none':
|
"Get a list of email addresses for a given WG and Role"
|
||||||
return []
|
if not group or not group.acronym or group.acronym == 'none':
|
||||||
emails = [r.email.email_address()
|
return set()
|
||||||
for r in area.role_set.filter(name__in=('pre-ad', 'ad', 'chair'))]
|
emails = Email.objects.filter(role__group=group, role__name__in=roles)
|
||||||
return filter(None, emails)
|
return set(filter(None, [e.email_address() for e in emails]))
|
||||||
|
|
||||||
def get_group_ads_emails(wg):
|
def get_child_group_role_emails(parent, roles, group_type='wg'):
|
||||||
" Get list of area directors' emails for a given WG "
|
"""Get a list of email addresses for a given set of
|
||||||
if wg.acronym == 'none':
|
roles for all child groups of a given type"""
|
||||||
return []
|
emails = set()
|
||||||
|
groups = Group.objects.filter(parent=parent, type=group_type, state="active")
|
||||||
ad_emails = set()
|
for group in groups:
|
||||||
|
emails |= get_group_role_emails(group, roles)
|
||||||
if wg.parent and wg.parent.acronym != 'none':
|
return emails
|
||||||
# Include the _current_ list of ads for the area!
|
|
||||||
ad_emails.update(get_area_ads_emails(wg.parent))
|
|
||||||
|
|
||||||
|
def get_group_ad_emails(wg):
|
||||||
|
" Get list of area directors' email addresses for a given WG "
|
||||||
|
if not wg.acronym or wg.acronym == 'none':
|
||||||
|
return set()
|
||||||
|
emails = get_group_role_emails(wg.parent, roles=('pre-ad', 'ad', 'chair'))
|
||||||
# Make sure the assigned AD is included (in case that is not one of the area ADs)
|
# Make sure the assigned AD is included (in case that is not one of the area ADs)
|
||||||
if wg.state.slug=='active':
|
if wg.state.slug=='active':
|
||||||
wg_ad_email = wg.ad_role() and wg.ad_role().email.address
|
wg_ad_email = wg.ad_role() and wg.ad_role().email.address
|
||||||
if wg_ad_email:
|
if wg_ad_email:
|
||||||
ad_emails.add(wg_ad_email)
|
emails.add(wg_ad_email)
|
||||||
|
|
||||||
return list(ad_emails)
|
|
||||||
|
|
||||||
def get_group_chairs_emails(wg):
|
|
||||||
" Get list of area chairs' emails for a given WG "
|
|
||||||
if wg.acronym == 'none':
|
|
||||||
return []
|
|
||||||
emails = Email.objects.filter(role__group=wg,
|
|
||||||
role__name='chair')
|
|
||||||
if not emails:
|
|
||||||
return []
|
|
||||||
emails = [e.email_address() for e in emails]
|
|
||||||
emails = filter(None, emails)
|
|
||||||
return emails
|
return emails
|
||||||
|
|
||||||
def get_area_chairs_emails(area):
|
|
||||||
emails = {}
|
|
||||||
# XXX - should we filter these by validity? Or not?
|
|
||||||
wgs = Group.objects.filter(parent=area, type="wg", state="active")
|
|
||||||
for wg in wgs:
|
|
||||||
for e in get_group_chairs_emails(wg):
|
|
||||||
emails[e] = True
|
|
||||||
return emails.keys()
|
|
||||||
|
|
||||||
def save_milestone_in_history(milestone):
|
def save_milestone_in_history(milestone):
|
||||||
h = get_history_object_for(milestone)
|
h = get_history_object_for(milestone)
|
||||||
h.milestone = milestone
|
h.milestone = milestone
|
||||||
|
|
Loading…
Reference in a new issue