Skip to content

Commit 19a26dc

Browse files
committed
Merged in [17650] from rjsparks@nostrum.com:
Refactor disqualifying roles into one place. - Legacy-Id: 17652 Note: SVN reference [17650] has been migrated to Git commit d981076
2 parents 3e80114 + d981076 commit 19a26dc

3 files changed

Lines changed: 17 additions & 18 deletions

File tree

ietf/meeting/utils.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@
1414

1515
from ietf.dbtemplate.models import DBTemplate
1616
from ietf.meeting.models import Session, Meeting, SchedulingEvent, TimeSlot
17-
from ietf.group.models import Group
17+
from ietf.group.models import Group, Role
1818
from ietf.group.utils import can_manage_materials
1919
from ietf.name.models import SessionStatusName
20+
from ietf.nomcom.utils import DISQUALIFYING_ROLE_QUERY_EXPRESSION
2021
from ietf.person.models import Email
2122
from ietf.secr.proceedings.proc_utils import import_audio_files
2223

@@ -174,13 +175,9 @@ def attended_in_last_five_ietf_meetings(person, date=datetime.datetime.today()):
174175

175176
def is_nomcom_eligible(person, date=datetime.date.today()):
176177
attended = attended_in_last_five_ietf_meetings(person, date)
177-
# See RFC8713 section 4.15
178-
is_isoc_board = person.role_set.filter(group__acronym='isocbot', name_id__in=['member', 'chair']).exists()
179-
is_ietf_trust = person.role_set.filter(group__acronym='ietf-trust', name_id__in=['member', 'chair']).exists()
180-
is_llc_board = person.role_set.filter(group__acronym='llc-board', name_id__in=['member', 'chair']).exists()
181-
is_iesg = person.role_set.filter(group__type_id='area',group__state='active',name_id='ad').exists()
182-
is_iab = person.role_set.filter(group__acronym='iab',name_id__in=['member','chair']).exists()
183-
return len(attended)>=3 and not any([is_isoc_board, is_ietf_trust, is_llc_board, is_iesg, is_iab])
178+
disqualifying_roles = Role.objects.filter(person=person).filter(DISQUALIFYING_ROLE_QUERY_EXPRESSION)
179+
return len(attended)>=3 and not disqualifying_roles.exists()
180+
184181

185182
def sort_accept_tuple(accept):
186183
tup = []

ietf/nomcom/utils.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from email.iterators import typed_subpart_iterator
1414
from email.utils import parseaddr
1515

16+
from django.db.models import Q
1617
from django.conf import settings
1718
from django.contrib.sites.models import Site
1819
from django.core.exceptions import ObjectDoesNotExist
@@ -57,6 +58,11 @@
5758
IESG_GENERIC_REQUIREMENTS_TEMPLATE,
5859
]
5960

61+
# See RFC8713 section 4.15
62+
DISQUALIFYING_ROLE_QUERY_EXPRESSION = ( Q(group__acronym__in=['isocbot', 'ietf-trust', 'llc-board', 'iab'], name_id__in=['member', 'chair'])
63+
| Q(group__type_id='area', group__state='active',name_id='ad')
64+
)
65+
6066

6167
def get_nomcom_by_year(year):
6268
from ietf.nomcom.models import NomCom
@@ -470,4 +476,5 @@ def create_feedback_email(nomcom, msg):
470476

471477
class EncryptedException(Exception):
472478
pass
479+
473480

ietf/nomcom/views.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from ietf.dbtemplate.models import DBTemplate
2323
from ietf.dbtemplate.views import group_template_edit, group_template_show
2424
from ietf.name.models import NomineePositionStateName, FeedbackTypeName
25-
from ietf.group.models import Group, GroupEvent
25+
from ietf.group.models import Group, GroupEvent, Role
2626
from ietf.message.models import Message
2727
from ietf.meeting.models import Meeting
2828

@@ -37,7 +37,8 @@
3737
FeedbackLastSeen, Topic, TopicFeedbackLastSeen, )
3838
from ietf.nomcom.utils import (get_nomcom_by_year, store_nomcom_private_key,
3939
get_hash_nominee_position, send_reminder_to_nominees,
40-
HOME_TEMPLATE, NOMINEE_ACCEPT_REMINDER_TEMPLATE,NOMINEE_QUESTIONNAIRE_REMINDER_TEMPLATE)
40+
HOME_TEMPLATE, NOMINEE_ACCEPT_REMINDER_TEMPLATE,NOMINEE_QUESTIONNAIRE_REMINDER_TEMPLATE,
41+
DISQUALIFYING_ROLE_QUERY_EXPRESSION)
4142
from ietf.ietfauth.utils import role_required
4243
from ietf.person.models import Person
4344
from ietf.utils import log
@@ -1251,14 +1252,8 @@ def eligible(request, year):
12511252
registration_emails = m.meetingregistration_set.values_list('email',flat=True)
12521253
attendees[m] = Person.objects.filter(email__address__in=registration_emails).distinct()
12531254
# See RFC8713 section 4.15
1254-
potentials.update(
1255-
attendees[m] \
1256-
.exclude(role__group__acronym='isocbot', role__name_id__in=['member','chair']) \
1257-
.exclude(role__group__acronym='ietf-trust', role__name_id__in=['member','chair']) \
1258-
.exclude(role__group__acronym='llc-board', role__name_id__in=['member','chair']) \
1259-
.exclude(role__group__type_id='area',role__group__state='active',role__name_id='ad') \
1260-
.exclude(role__group__acronym='iab',role__name_id__in=['member','chair'])
1261-
)
1255+
disqualified_roles = Role.objects.filter(DISQUALIFYING_ROLE_QUERY_EXPRESSION)
1256+
potentials.update(attendees[m].exclude(role__in=disqualified_roles))
12621257
eligible_persons = []
12631258
for p in potentials:
12641259
count = 0

0 commit comments

Comments
 (0)