Skip to content

Commit 8e97669

Browse files
committed
Added a get_active_ads() utility function that uses the cache to reduce database access. Moved some utility functions so as to reduce import loops.
- Legacy-Id: 14986
1 parent db3a4eb commit 8e97669

3 files changed

Lines changed: 26 additions & 19 deletions

File tree

ietf/meeting/utils.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import debug # pyflakes:ignore
99

1010
from ietf.dbtemplate.models import DBTemplate
11-
from ietf.meeting.models import Session
11+
from ietf.meeting.models import Session, Meeting
1212
from ietf.group.utils import can_manage_materials
1313
from ietf.secr.proceedings.proc_utils import import_audio_files
1414

@@ -138,3 +138,17 @@ def finalize(meeting):
138138
meeting.save()
139139
return
140140

141+
def attended_ietf_meetings(person):
142+
return Meeting.objects.filter(type='ietf',meetingregistration__email__in=Email.objects.filter(person=person).values_list('address',flat=True))
143+
144+
def attended_in_last_five_ietf_meetings(person, date=datetime.datetime.today()):
145+
previous_five = Meeting.objects.filter(type='ietf',date__lte=date).order_by('-date')[:5]
146+
attended = attended_ietf_meetings(person)
147+
return set(previous_five).intersection(attended)
148+
149+
def is_nomcom_eligible(person, date=datetime.date.today()):
150+
attended = attended_in_last_five_ietf_meetings(person, date)
151+
is_iesg = person.role_set.filter(group__type_id='area',group__state='active',name_id='ad').exists()
152+
is_iab = person.role_set.filter(group__acronym='iab',name_id__in=['member','chair']).exists()
153+
is_iaoc = person.role_set.filter(group__acronym='iaoc',name_id__in=['member','chair']).exists()
154+
return len(attended)>=3 and not (is_iesg or is_iab or is_iaoc)

ietf/person/templatetags/person_filters.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import debug # pyflakes:ignore
88

9-
from ietf.person.utils import is_nomcom_eligible as util_is_nomcom_eligible
9+
from ietf.meeting.utils import is_nomcom_eligible as util_is_nomcom_eligible
1010

1111
register = template.Library()
1212

ietf/person/utils.py

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,12 @@
77

88
from django.contrib import admin
99
from django.contrib.auth.models import User
10+
from django.core.exceptions import ObjectDoesNotExist
1011

1112
import debug # pyflakes:ignore
1213

13-
from ietf.nomcom.models import Nominee
1414
from ietf.person.models import Person, Email
1515
from ietf.utils.mail import send_mail
16-
from ietf.meeting.models import Meeting
1716

1817
def merge_persons(source, target, file=sys.stdout, verbose=False):
1918
changes = []
@@ -141,7 +140,7 @@ def merge_nominees(source, target):
141140
for nominee in source.nominee_set.all():
142141
try:
143142
target_nominee = target.nominee_set.get(nomcom=nominee.nomcom)
144-
except Nominee.DoesNotExist:
143+
except ObjectDoesNotExist:
145144
target_nominee = target.nominee_set.create(nomcom=nominee.nomcom, email=target.email())
146145
nominee.nomination_set.all().update(nominee=target_nominee)
147146
for fb in nominee.feedback_set.all():
@@ -183,17 +182,11 @@ def determine_merge_order(source,target):
183182
source,target = sorted([source,target],key=lambda a: a.user.last_login if a.user.last_login else datetime.datetime.min)
184183
return source,target
185184

186-
def attended_ietf_meetings(person):
187-
return Meeting.objects.filter(type='ietf',meetingregistration__email__in=Email.objects.filter(person=person).values_list('address',flat=True))
188-
189-
def attended_in_last_five_ietf_meetings(person, date=datetime.datetime.today()):
190-
previous_five = Meeting.objects.filter(type='ietf',date__lte=date).order_by('-date')[:5]
191-
attended = attended_ietf_meetings(person)
192-
return set(previous_five).intersection(attended)
193-
194-
def is_nomcom_eligible(person, date=datetime.date.today()):
195-
attended = attended_in_last_five_ietf_meetings(person, date)
196-
is_iesg = person.role_set.filter(group__type_id='area',group__state='active',name_id='ad').exists()
197-
is_iab = person.role_set.filter(group__acronym='iab',name_id__in=['member','chair']).exists()
198-
is_iaoc = person.role_set.filter(group__acronym='iaoc',name_id__in=['member','chair']).exists()
199-
return len(attended)>=3 and not (is_iesg or is_iab or is_iaoc)
185+
def get_active_ads():
186+
from ietf.person.models import Person
187+
cache_key = "doc:active_ads"
188+
active_ads = cache.get(cache_key)
189+
if not active_ads:
190+
active_ads = list(Person.objects.filter(role__name="ad", role__group__state="active", role__group__type="area").distinct())
191+
cache.set(cache_key, active_ads)
192+
return active_ads

0 commit comments

Comments
 (0)