@@ -257,6 +257,7 @@ def parse_timestamp(t):
257257 latest_requested = None
258258 non_specific_close = None
259259 latest_iesg_status = None
260+ latest_deadline = None
260261
261262 for row in rows :
262263 if (team .acronym , row .who ) in reviewer_blacklist :
@@ -295,6 +296,10 @@ def parse_timestamp(t):
295296 latest_iesg_status = "lc"
296297 used = True
297298
299+ if deadline_re .search (row .text ):
300+ m = deadline_re .search (row .text )
301+ latest_deadline = parse_timestamp (int (m .groups ()[0 ]))
302+
298303 if iesgstatus_re .search (row .text ):
299304 m = iesgstatus_re .search (row .text )
300305 if m .groups ():
@@ -306,7 +311,7 @@ def parse_timestamp(t):
306311 used = True
307312
308313 if "CHANGE status working => done" in row .text :
309- non_specific_close = (row , latest_iesg_status )
314+ non_specific_close = (row , latest_iesg_status , latest_deadline )
310315 used = True
311316
312317 if not used :
@@ -319,7 +324,7 @@ def parse_timestamp(t):
319324 state = "assigned"
320325
321326 if state == "requested" :
322- latest_requested = (row .time , row .who , membername , state , latest_iesg_status )
327+ latest_requested = (row .time , row .who , membername , state , latest_iesg_status , latest_deadline )
323328 else :
324329 if membername not in branches :
325330 branches [membername ] = []
@@ -336,9 +341,9 @@ def parse_timestamp(t):
336341 latest_requested = None
337342
338343 if state in ("assigned" , 'accepted' ):
339- latest [state ] = (row .time , row .who , membername , state , latest_iesg_status )
344+ latest [state ] = (row .time , row .who , membername , state , latest_iesg_status , latest_deadline )
340345 else :
341- latest ["closed" ] = (row .time , row .who , membername , state , latest_iesg_status )
346+ latest ["closed" ] = (row .time , row .who , membername , state , latest_iesg_status , latest_deadline )
342347
343348
344349 if branches :
@@ -348,8 +353,8 @@ def parse_timestamp(t):
348353 latest = hs [- 1 ]
349354 if "assigned" in latest and "closed" not in latest :
350355 #print "closing with non specific", docname
351- close_row , iesg_status = non_specific_close
352- latest ["closed" ] = (close_row .time , close_row .who , m , "done" , iesg_status )
356+ close_row , iesg_status , deadline = non_specific_close
357+ latest ["closed" ] = (close_row .time , close_row .who , m , "done" , iesg_status , deadline )
353358
354359 document_history [docname ] = branches
355360
@@ -406,17 +411,7 @@ def parse_timestamp(t):
406411
407412 reviewed_rev = row .version if row .version and row .version != "99" else ""
408413
409- meta = doc_metadata .get ((row .docname , reviewed_rev ))
410- deadline , telechat , lcend , status = meta or (None , None , None , None )
411- if not deadline :
412- deadline = parse_timestamp (row .timeout )
413-
414- if not meta :
415- meta = doc_metadata .get (row .docname )
416- telechat , lcend , status = (meta or (None , None , None , None ))[1 :]
417-
418- if not deadline and meta :
419- deadline = meta [1 ]
414+ doc_deadline , telechat , lcend , status = doc_metadata .get (row .docname ) or (None , None , None , None )
420415
421416 reviewurl = row .reviewurl
422417 reviewstatus = row .docstatus
@@ -489,26 +484,48 @@ def day_delta(time_from, time_to):
489484 if assigned_closed_days is not None and assigned_closed_days > at_most_days and event_collection .get ("closed" )[3 ] not in ("noresponse" , "withdrawn" ):
490485 print "WARNING: more than {} days between assignment and completion" .format (at_most_days ), round (assigned_closed_days ), event_collection , row .docname
491486
487+ deadline = None
488+ request_time = None
492489 if event_collection :
493- time = None
490+ if "closed" in event_collection and not deadline :
491+ deadline = event_collection ["closed" ][5 ]
492+ if "assigned" in event_collection and not deadline :
493+ deadline = event_collection ["assigned" ][5 ]
494+ if "requested" in event_collection and not deadline :
495+ deadline = event_collection ["requested" ][5 ]
496+
494497 if "requested" in event_collection :
495- time = parse_timestamp (event_collection ["requested" ][0 ])
498+ request_time = parse_timestamp (event_collection ["requested" ][0 ])
496499 elif "assigned" in event_collection :
497- time = parse_timestamp (event_collection ["assigned" ][0 ])
500+ request_time = parse_timestamp (event_collection ["assigned" ][0 ])
498501 elif "closed" in event_collection :
499- time = parse_timestamp (event_collection ["closed" ][0 ])
500- elif donetime :
501- time = donetime
502- else :
503- time = deadline
502+ request_time = parse_timestamp (event_collection ["closed" ][0 ])
503+
504+ if not deadline :
505+ deadline = doc_deadline
506+
507+ if not deadline :
508+ deadline = parse_timestamp (row .timeout )
504509
505510 if not deadline and "closed" in event_collection :
506511 deadline = parse_timestamp (event_collection ["closed" ][0 ])
507-
512+
513+ if not deadline and "assigned" in event_collection :
514+ deadline = parse_timestamp (event_collection ["assigned" ][0 ])
515+ if deadline :
516+ deadline += datetime .timedelta (days = 30 )
517+
508518 if not deadline :
509- print "SKIPPING WITH NO DEADLINE" , row .reviewid , row .docname , meta , event_collection
519+ print "SKIPPING WITH NO DEADLINE" , row .reviewid , row .docname , event_collection
510520 continue
511521
522+ if not request_time and donetime :
523+ request_time = donetime
524+
525+ if not request_time :
526+ request_time = deadline
527+
528+
512529 type_slug = None
513530 if "assigned" in event_collection :
514531 type_slug = event_collection ["assigned" ][4 ]
@@ -555,7 +572,7 @@ def fix_docname(docname):
555572 review_req .result = results .get (reviewsummary .lower ()) if reviewsummary else None
556573 review_req .state = states .get (reviewstatus ) if reviewstatus else None
557574 review_req .type = type_name
558- review_req .time = time
575+ review_req .time = request_time
559576 review_req .reviewed_rev = reviewed_rev if review_req .state_id not in ("requested" , "accepted" ) else ""
560577 review_req .deadline = deadline .date ()
561578 review_req .requested_by = system_person
@@ -573,7 +590,7 @@ def fix_docname(docname):
573590 continue
574591
575592 data = event_collection ['closed' ]
576- timestamp , who_did_it , reviewer , state , latest_iesg_status = data
593+ timestamp , who_did_it , reviewer , state , latest_iesg_status , latest_deadline = data
577594
578595 if who_did_it in known_personnel :
579596 by = known_personnel [who_did_it ].person
@@ -617,7 +634,7 @@ def fix_docname(docname):
617634
618635 # review request events
619636 for key , data in event_collection .iteritems ():
620- timestamp , who_did_it , reviewer , state , latest_iesg_status = data
637+ timestamp , who_did_it , reviewer , state , latest_iesg_status , latest_deadline = data
621638
622639 if who_did_it in known_personnel :
623640 by = known_personnel [who_did_it ].person
@@ -631,7 +648,7 @@ def fix_docname(docname):
631648 e = ReviewRequestDocEvent .objects .filter (type = "requested_review" , doc = review_req .doc , review_request = review_req ).first ()
632649 if not e :
633650 e = ReviewRequestDocEvent (type = "requested_review" , doc = review_req .doc , review_request = review_req )
634- e .time = time
651+ e .time = request_time
635652 e .by = by
636653 e .desc = "Requested {} review by {}" .format (review_req .type .name , review_req .team .acronym .upper ())
637654 e .state = None
0 commit comments