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 d981076432
This commit is contained in:
Henrik Levkowetz 2020-04-16 12:25:45 +00:00
commit 19a26dc39a
3 changed files with 17 additions and 18 deletions
ietf

View file

@ -14,9 +14,10 @@ import debug # pyflakes:ignore
from ietf.dbtemplate.models import DBTemplate from ietf.dbtemplate.models import DBTemplate
from ietf.meeting.models import Session, Meeting, SchedulingEvent, TimeSlot from ietf.meeting.models import Session, Meeting, SchedulingEvent, TimeSlot
from ietf.group.models import Group from ietf.group.models import Group, Role
from ietf.group.utils import can_manage_materials from ietf.group.utils import can_manage_materials
from ietf.name.models import SessionStatusName from ietf.name.models import SessionStatusName
from ietf.nomcom.utils import DISQUALIFYING_ROLE_QUERY_EXPRESSION
from ietf.person.models import Email from ietf.person.models import Email
from ietf.secr.proceedings.proc_utils import import_audio_files from ietf.secr.proceedings.proc_utils import import_audio_files
@ -174,13 +175,9 @@ def attended_in_last_five_ietf_meetings(person, date=datetime.datetime.today()):
def is_nomcom_eligible(person, date=datetime.date.today()): def is_nomcom_eligible(person, date=datetime.date.today()):
attended = attended_in_last_five_ietf_meetings(person, date) attended = attended_in_last_five_ietf_meetings(person, date)
# See RFC8713 section 4.15 disqualifying_roles = Role.objects.filter(person=person).filter(DISQUALIFYING_ROLE_QUERY_EXPRESSION)
is_isoc_board = person.role_set.filter(group__acronym='isocbot', name_id__in=['member', 'chair']).exists() return len(attended)>=3 and not disqualifying_roles.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()
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): def sort_accept_tuple(accept):
tup = [] tup = []

View file

@ -13,6 +13,7 @@ from email.header import decode_header
from email.iterators import typed_subpart_iterator from email.iterators import typed_subpart_iterator
from email.utils import parseaddr from email.utils import parseaddr
from django.db.models import Q
from django.conf import settings from django.conf import settings
from django.contrib.sites.models import Site from django.contrib.sites.models import Site
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
@ -57,6 +58,11 @@ DEFAULT_NOMCOM_TEMPLATES = [HOME_TEMPLATE,
IESG_GENERIC_REQUIREMENTS_TEMPLATE, IESG_GENERIC_REQUIREMENTS_TEMPLATE,
] ]
# See RFC8713 section 4.15
DISQUALIFYING_ROLE_QUERY_EXPRESSION = ( Q(group__acronym__in=['isocbot', 'ietf-trust', 'llc-board', 'iab'], name_id__in=['member', 'chair'])
| Q(group__type_id='area', group__state='active',name_id='ad')
)
def get_nomcom_by_year(year): def get_nomcom_by_year(year):
from ietf.nomcom.models import NomCom from ietf.nomcom.models import NomCom
@ -470,4 +476,5 @@ def create_feedback_email(nomcom, msg):
class EncryptedException(Exception): class EncryptedException(Exception):
pass pass

View file

@ -22,7 +22,7 @@ from django.utils.encoding import force_bytes
from ietf.dbtemplate.models import DBTemplate from ietf.dbtemplate.models import DBTemplate
from ietf.dbtemplate.views import group_template_edit, group_template_show from ietf.dbtemplate.views import group_template_edit, group_template_show
from ietf.name.models import NomineePositionStateName, FeedbackTypeName from ietf.name.models import NomineePositionStateName, FeedbackTypeName
from ietf.group.models import Group, GroupEvent from ietf.group.models import Group, GroupEvent, Role
from ietf.message.models import Message from ietf.message.models import Message
from ietf.meeting.models import Meeting from ietf.meeting.models import Meeting
@ -37,7 +37,8 @@ from ietf.nomcom.models import (Position, NomineePosition, Nominee, Feedback, No
FeedbackLastSeen, Topic, TopicFeedbackLastSeen, ) FeedbackLastSeen, Topic, TopicFeedbackLastSeen, )
from ietf.nomcom.utils import (get_nomcom_by_year, store_nomcom_private_key, from ietf.nomcom.utils import (get_nomcom_by_year, store_nomcom_private_key,
get_hash_nominee_position, send_reminder_to_nominees, get_hash_nominee_position, send_reminder_to_nominees,
HOME_TEMPLATE, NOMINEE_ACCEPT_REMINDER_TEMPLATE,NOMINEE_QUESTIONNAIRE_REMINDER_TEMPLATE) HOME_TEMPLATE, NOMINEE_ACCEPT_REMINDER_TEMPLATE,NOMINEE_QUESTIONNAIRE_REMINDER_TEMPLATE,
DISQUALIFYING_ROLE_QUERY_EXPRESSION)
from ietf.ietfauth.utils import role_required from ietf.ietfauth.utils import role_required
from ietf.person.models import Person from ietf.person.models import Person
from ietf.utils import log from ietf.utils import log
@ -1251,14 +1252,8 @@ def eligible(request, year):
registration_emails = m.meetingregistration_set.values_list('email',flat=True) registration_emails = m.meetingregistration_set.values_list('email',flat=True)
attendees[m] = Person.objects.filter(email__address__in=registration_emails).distinct() attendees[m] = Person.objects.filter(email__address__in=registration_emails).distinct()
# See RFC8713 section 4.15 # See RFC8713 section 4.15
potentials.update( disqualified_roles = Role.objects.filter(DISQUALIFYING_ROLE_QUERY_EXPRESSION)
attendees[m] \ potentials.update(attendees[m].exclude(role__in=disqualified_roles))
.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 = [] eligible_persons = []
for p in potentials: for p in potentials:
count = 0 count = 0