@@ -413,22 +413,25 @@ def suggested_review_requests_for_team(team):
413413
414414 requests = {}
415415
416- today = datetime .date . today ()
416+ now = datetime .datetime . now ()
417417
418418 requested_state = ReviewRequestStateName .objects .get (slug = "requested" , used = True )
419419
420420 if True : # FIXME
421421 # in Last Call
422422 last_call_type = ReviewTypeName .objects .get (slug = "lc" )
423423 last_call_docs = Document .objects .filter (states = State .objects .get (type = "draft-iesg" , slug = "lc" , used = True ))
424- last_call_expires = { e .doc_id : e . expires for e in LastCallDocEvent .objects .order_by ("time" , "id" ) }
424+ last_call_expiry_events = { e .doc_id : e for e in LastCallDocEvent .objects .order_by ("time" , "id" ) }
425425 for doc in last_call_docs :
426- deadline = last_call_expires [doc .pk ]. date () if doc .pk in last_call_expires else today
426+ e = last_call_expiry_events [doc .pk ] if doc .pk in last_call_expiry_events else LastCallDocEvent ( expires = now . date (), time = now )
427427
428- if deadline > seen_deadlines .get (doc .pk , datetime .date .max ) or deadline < today :
428+ deadline = e .expires .date ()
429+
430+ if deadline > seen_deadlines .get (doc .pk , datetime .date .max ) or deadline < now .date ():
429431 continue
430432
431433 requests [doc .pk ] = ReviewRequest (
434+ time = e .time ,
432435 type = last_call_type ,
433436 doc = doc ,
434437 team = team ,
@@ -446,27 +449,33 @@ def suggested_review_requests_for_team(team):
446449
447450 telechat_type = ReviewTypeName .objects .get (slug = "telechat" )
448451 telechat_deadline_delta = datetime .timedelta (days = 2 )
449- telechat_docs = Document .objects .filter (docevent__telechatdocevent__telechat_date__in = telechat_dates )
450- for doc in telechat_docs :
451- d = doc .telechat_date ()
452- if d not in telechat_dates :
453- continue
454452
455- deadline = d - telechat_deadline_delta
456-
457- if deadline > seen_deadlines .get (doc .pk , datetime .date .max ):
453+ telechat_docs = Document .objects .filter (
454+ docevent__telechatdocevent__telechat_date__in = telechat_dates
455+ ).values_list (
456+ "pk" , "docevent__telechatdocevent__time" , "docevent__telechatdocevent__telechat_date"
457+ ).order_by ("pk" , "docevent__telechatdocevent__telechat_date" )
458+ for doc_pk , events in itertools .groupby (telechat_docs , lambda t : t [0 ]):
459+ event_time = deadline = None
460+ for _ , event_time , event_telechat_date in events :
461+ if event_telechat_date in telechat_dates :
462+ deadline = event_telechat_date - telechat_deadline_delta
463+ break
464+
465+ if not deadline or deadline > seen_deadlines .get (doc_pk , datetime .date .max ):
458466 continue
459467
460- requests [doc .pk ] = ReviewRequest (
468+ requests [doc_pk ] = ReviewRequest (
469+ time = event_time ,
461470 type = telechat_type ,
462- doc = doc ,
471+ doc_id = doc_pk ,
463472 team = team ,
464473 deadline = deadline ,
465474 requested_by = system_person ,
466475 state = requested_state ,
467476 )
468477
469- seen_deadlines [doc . pk ] = deadline
478+ seen_deadlines [doc_pk ] = deadline
470479
471480 # filter those with existing requests
472481 existing_requests = defaultdict (list )
0 commit comments