From b387599dac9016d49930f447b0c28506ba780f7c Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Wed, 15 Apr 2020 21:39:58 +0000 Subject: [PATCH] Follow RFC8713 section 4.15 for roles that disqualify for nomcom. Fixes #2944. Commit ready for merge. - Legacy-Id: 17649 --- ietf/meeting/utils.py | 7 +++++-- ietf/nomcom/views.py | 10 +++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ietf/meeting/utils.py b/ietf/meeting/utils.py index 84483fec1..1acd8a364 100644 --- a/ietf/meeting/utils.py +++ b/ietf/meeting/utils.py @@ -174,10 +174,13 @@ def attended_in_last_five_ietf_meetings(person, date=datetime.datetime.today()): def is_nomcom_eligible(person, date=datetime.date.today()): attended = attended_in_last_five_ietf_meetings(person, date) + # See RFC8713 section 4.15 + is_isoc_board = person.role_set.filter(group__acronym='isocbot', name_id__in=['member', 'chair']).exists() + is_ietf_trust = person.role_set.filter(group__acronym='ietf-trust', name_id__in=['member', 'chair']).exists() + is_llc_board = person.role_set.filter(group__acronym='llc-board', name_id__in=['member', 'chair']).exists() is_iesg = person.role_set.filter(group__type_id='area',group__state='active',name_id='ad').exists() is_iab = person.role_set.filter(group__acronym='iab',name_id__in=['member','chair']).exists() - is_iaoc = person.role_set.filter(group__acronym='iaoc',name_id__in=['member','chair']).exists() - return len(attended)>=3 and not (is_iesg or is_iab or is_iaoc) + return len(attended)>=3 and not any([is_isoc_board, is_ietf_trust, is_llc_board, is_iesg, is_iab]) def sort_accept_tuple(accept): tup = [] diff --git a/ietf/nomcom/views.py b/ietf/nomcom/views.py index 9613501e1..71825ba0b 100644 --- a/ietf/nomcom/views.py +++ b/ietf/nomcom/views.py @@ -1250,7 +1250,15 @@ def eligible(request, year): for m in previous_five: registration_emails = m.meetingregistration_set.values_list('email',flat=True) attendees[m] = Person.objects.filter(email__address__in=registration_emails).distinct() - potentials.update(attendees[m].exclude(role__group__type_id='area',role__group__state='active',role__name_id='ad').exclude(role__group__acronym='iab',role__name_id__in=['member','chair']).exclude(role__group__acronym='iaoc',role__name_id__in=['member','chair'])) + # See RFC8713 section 4.15 + potentials.update( + attendees[m] \ + .exclude(role__group__acronym='isocbot', role__name_id__in=['member','chair']) \ + .exclude(role__group__acronym='ietf-trust', role__name_id__in=['member','chair']) \ + .exclude(role__group__acronym='llc-board', role__name_id__in=['member','chair']) \ + .exclude(role__group__type_id='area',role__group__state='active',role__name_id='ad') \ + .exclude(role__group__acronym='iab',role__name_id__in=['member','chair']) + ) eligible_persons = [] for p in potentials: count = 0