Skip to content

Commit 19a3f10

Browse files
committed
Fix bug in telechat code, a previous rewrite to fix a possible problem
was misguided - we should always only look at the latest telechat event - Legacy-Id: 12265
1 parent ac1b93a commit 19a3f10

1 file changed

Lines changed: 24 additions & 15 deletions

File tree

ietf/review/utils.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77

88
from ietf.group.models import Group, Role
99
from ietf.doc.models import (Document, ReviewRequestDocEvent, State,
10-
LastCallDocEvent, DocumentAuthor, DocAlias)
10+
LastCallDocEvent, TelechatDocEvent,
11+
DocumentAuthor, DocAlias)
1112
from ietf.iesg.models import TelechatDate
12-
from ietf.person.models import Person, Email
13+
from ietf.person.models import Person
1314
from ietf.ietfauth.utils import has_role, is_authorized_in_doc_stream
1415
from ietf.review.models import (ReviewRequest, ReviewRequestStateName, ReviewTypeName, TypeUsedInReviewTeam,
1516
ReviewerSettings, UnavailablePeriod, ReviewWish, NextReviewerInTeam)
@@ -508,14 +509,15 @@ def suggested_review_requests_for_team(team):
508509

509510
now = datetime.datetime.now()
510511

512+
reviewable_docs_qs = Document.objects.filter(type="draft").exclude(stream="ise")
513+
511514
requested_state = ReviewRequestStateName.objects.get(slug="requested", used=True)
512515

513516
last_call_type = ReviewTypeName.objects.get(slug="lc")
514517
if TypeUsedInReviewTeam.objects.filter(team=team, type=last_call_type).exists():
515518
# in Last Call
516-
last_call_docs = Document.objects.filter(
517-
type="draft",
518-
states=State.objects.get(type="draft-iesg", slug="lc", used=True),
519+
last_call_docs = reviewable_docs_qs.filter(
520+
states=State.objects.get(type="draft-iesg", slug="lc", used=True)
519521
)
520522
last_call_expiry_events = { e.doc_id: e for e in LastCallDocEvent.objects.order_by("time", "id") }
521523
for doc in last_call_docs:
@@ -546,18 +548,25 @@ def suggested_review_requests_for_team(team):
546548

547549
telechat_deadline_delta = datetime.timedelta(days=2)
548550

549-
telechat_docs = Document.objects.filter(
550-
type="draft",
551+
telechat_docs = reviewable_docs_qs.filter(
551552
docevent__telechatdocevent__telechat_date__in=telechat_dates
553+
).values_list("pk", flat=True)
554+
555+
# we need to check the latest telechat event for each document
556+
# scheduled for the telechat, as the appearance might have been
557+
# cancelled/moved
558+
telechat_events = TelechatDocEvent.objects.filter(
559+
doc__in=list(telechat_docs), # explicitly turn into list so we don't get a complex and slow join sent down to the DB
552560
).values_list(
553-
"pk", "docevent__telechatdocevent__time", "docevent__telechatdocevent__telechat_date"
554-
).order_by("pk", "docevent__telechatdocevent__telechat_date")
555-
for doc_pk, events in itertools.groupby(telechat_docs, lambda t: t[0]):
556-
event_time = deadline = None
557-
for _, event_time, event_telechat_date in events:
558-
if event_telechat_date in telechat_dates:
559-
deadline = event_telechat_date - telechat_deadline_delta
560-
break
561+
"doc", "pk", "time", "telechat_date"
562+
).order_by("doc", "-time", "-id").distinct()
563+
564+
for doc_pk, events in itertools.groupby(telechat_events, lambda t: t[0]):
565+
_, _, event_time, event_telechat_date = list(events)[0]
566+
567+
deadline = None
568+
if event_telechat_date in telechat_dates:
569+
deadline = event_telechat_date - telechat_deadline_delta
561570

562571
if not deadline or deadline > seen_deadlines.get(doc_pk, datetime.date.max):
563572
continue

0 commit comments

Comments
 (0)