Skip to content

Commit b16a829

Browse files
committed
Modify review import to read result data for genart from an extra dataset
- Legacy-Id: 12248
1 parent 54bc9ff commit b16a829

1 file changed

Lines changed: 72 additions & 12 deletions

File tree

ietf/review/import_from_review_tool.py

Lines changed: 72 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
parser = argparse.ArgumentParser()
3030
parser.add_argument("database", help="database must be included in settings")
3131
parser.add_argument("team", help="team acronym, must exist")
32+
parser.add_argument("--genartdata", help="genart data file")
3233
args = parser.parse_args()
3334

3435
db_con = connections[args.database]
@@ -68,6 +69,8 @@ def parse_timestamp(t):
6869

6970
reviewer_blacklist = set([("genart", "alice")])
7071

72+
name_to_login = {}
73+
7174
known_personnel = {}
7275
with db_con.cursor() as c:
7376
c.execute("select * from members;")
@@ -81,6 +84,8 @@ def parse_timestamp(t):
8184
if (team.acronym, row.login) in reviewer_blacklist:
8285
continue # ignore
8386

87+
name_to_login[row.name] = row.login
88+
8489
email = Email.objects.filter(address=row.email).select_related("person").first()
8590
if not email:
8691
person = Person.objects.filter(alias__name=row.name).first()
@@ -359,6 +364,29 @@ def parse_timestamp(t):
359364
doc_metadata[(row.docname, row.version)] = doc_metadata[row.docname] = (parse_timestamp(row.deadline), parse_timestamp(row.telechat), parse_timestamp(row.lcend), row.status)
360365

361366

367+
genart_data = {}
368+
if team.acronym == "genart":
369+
with open(args.genartdata) as f:
370+
for line in f:
371+
t = line.strip().split("\t")
372+
373+
document, reviewer, version_number, result_url, d, review_type, results_time, result_name = t
374+
375+
d = datetime.datetime.strptime(d, "%Y-%m-%d")
376+
377+
if results_time:
378+
results_time = datetime.datetime.strptime(results_time, "%Y-%m-%dT%H:%M:%S")
379+
else:
380+
results_time = None
381+
382+
reviewer_login = name_to_login.get(reviewer)
383+
if not reviewer_login:
384+
print "WARNING: unknown genart reviewer", reviewer
385+
continue
386+
387+
genart_data[(document, reviewer_login)] = genart_data[(document, reviewer_login, version_number)] = (result_url, d, review_type, results_time, result_name)
388+
389+
362390
system_person = Person.objects.get(name="(System)")
363391

364392
seen_review_requests = {}
@@ -373,7 +401,9 @@ def parse_timestamp(t):
373401
if (team.acronym, row.reviewer) in reviewer_blacklist:
374402
continue # ignore
375403

376-
meta = doc_metadata.get((row.docname, row.version))
404+
reviewed_rev = row.version if row.version and row.version != "99" else ""
405+
406+
meta = doc_metadata.get((row.docname, reviewed_rev))
377407
deadline, telechat, lcend, status = meta or (None, None, None, None)
378408
if not deadline:
379409
deadline = parse_timestamp(row.timeout)
@@ -385,9 +415,36 @@ def parse_timestamp(t):
385415
if not deadline and meta:
386416
deadline = meta[1]
387417

388-
reviewed_rev = row.version if row.version and row.version != "99" else ""
389-
if row.summary == "noresponse":
390-
reviewed_rev = ""
418+
reviewurl = row.reviewurl
419+
reviewstatus = row.docstatus
420+
reviewsummary = row.summary
421+
donetime = None
422+
423+
if team.acronym == "genart":
424+
extra_data = genart_data.get((row.docname, row.reviewer, reviewed_rev))
425+
#if not extra_data:
426+
# extra_data = genart_data.get(row.docname)
427+
if extra_data:
428+
extra_result_url, extra_d, extra_review_type, extra_results_time, extra_result_name = extra_data
429+
extra_data = []
430+
if not reviewurl and extra_result_url:
431+
reviewurl = extra_result_url
432+
extra_data.append(reviewurl)
433+
434+
if not reviewsummary and extra_result_name:
435+
reviewsummary = extra_result_name
436+
extra_data.append(reviewsummary)
437+
438+
if reviewstatus != "done" and (reviewurl or reviewsummary):
439+
reviewstatus = "done"
440+
extra_data.append("done")
441+
442+
if extra_results_time:
443+
donetime = extra_results_time
444+
extra_data.append(donetime)
445+
446+
if extra_data:
447+
print "EXTRA DATA", row.docname, extra_data
391448

392449
event_collection = {}
393450
branches = document_history.get(row.docname)
@@ -405,7 +462,7 @@ def parse_timestamp(t):
405462
if "assigned" not in event_collection:
406463
print "WARNING: no assigned log entry for", row.docname, [event_collection] + history
407464

408-
if "closed" not in event_collection and row.docstatus in close_states:
465+
if "closed" not in event_collection and reviewstatus in close_states:
409466
print "WARNING: no {} log entry for".format("/".join(close_states)), row.docname, [event_collection] + history
410467

411468
def day_delta(time_from, time_to):
@@ -437,6 +494,8 @@ def day_delta(time_from, time_to):
437494
time = parse_timestamp(event_collection["assigned"][0])
438495
elif "closed" in event_collection:
439496
time = parse_timestamp(event_collection["closed"][0])
497+
elif donetime:
498+
time = donetime
440499
else:
441500
time = deadline
442501

@@ -488,16 +547,17 @@ def fix_docname(docname):
488547
old_id=row.reviewid,
489548
)
490549

550+
491551
review_req.reviewer = known_personnel[row.reviewer] if row.reviewer else None
492-
review_req.result = results.get(row.summary.lower()) if row.summary else None
493-
review_req.state = states.get(row.docstatus) if row.docstatus else None
552+
review_req.result = results.get(reviewsummary.lower()) if reviewsummary else None
553+
review_req.state = states.get(reviewstatus) if reviewstatus else None
494554
review_req.type = type_name
495555
review_req.time = time
496556
review_req.reviewed_rev = reviewed_rev if review_req.state_id not in ("requested", "accepted") else ""
497557
review_req.deadline = deadline.date()
498558
review_req.requested_by = system_person
499559

500-
k = (review_req.doc_id, review_req.result_id, review_req.state_id, review_req.reviewer_id, review_req.reviewed_rev, row.reviewurl)
560+
k = (review_req.doc_id, review_req.result_id, review_req.state_id, review_req.reviewer_id, review_req.reviewed_rev, reviewurl)
501561
if k in seen_review_requests:
502562
print "SKIPPING SEEN", k
503563

@@ -621,14 +681,14 @@ def fix_docname(docname):
621681
print "imported event closed_review_request", e.desc, e.doc_id
622682

623683
if review_req.state_id == "completed":
624-
if not row.reviewurl: # don't have anything to store, so skip
684+
if not reviewurl: # don't have anything to store, so skip
625685
continue
626686

627687
if completion_event:
628688
completion_time = completion_event.time
629689
completion_by = completion_event.by
630690
else:
631-
completion_time = deadline
691+
completion_time = donetime or deadline
632692
completion_by = system_person
633693

634694
# create the review document
@@ -661,7 +721,7 @@ def fix_docname(docname):
661721
review.rev = "00"
662722
review.title = "{} Review of {}-{}".format(review_req.type.name, review_req.doc.name, review_req.reviewed_rev)
663723
review.group = review_req.team
664-
review.external_url = row.reviewurl
724+
review.external_url = reviewurl
665725

666726
existing = NewRevisionDocEvent.objects.filter(doc=review).first() or NewRevisionDocEvent(doc=review)
667727
e.type = "new_revision"
@@ -686,7 +746,7 @@ def fix_docname(docname):
686746
e = ReviewRequestDocEvent.objects.filter(type="closed_review_request", doc=review_req.doc, review_request=review_req).first()
687747
if not e:
688748
e = ReviewRequestDocEvent(type="closed_review_request", doc=review_req.doc, review_request=review_req)
689-
e.time = datetime.datetime.now()
749+
e.time = donetime or datetime.datetime.now()
690750
e.by = by
691751
e.state = review_req.state
692752
e.desc = "Closed request for {} review by {} with state '{}'".format(review_req.type.name, review_req.team.acronym.upper(), e.state.name)

0 commit comments

Comments
 (0)