Skip to content

Commit 1970cba

Browse files
committed
Modify importer to take deadline from the document log if at all
possible, also add an extra assignment fallback using deadline = assignment time + 30 days for early reviews that never had a deadline (a few left in secdir) - Legacy-Id: 12381
1 parent d302875 commit 1970cba

1 file changed

Lines changed: 48 additions & 31 deletions

File tree

ietf/review/import_from_review_tool.py

Lines changed: 48 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)