2929parser = argparse .ArgumentParser ()
3030parser .add_argument ("database" , help = "database must be included in settings" )
3131parser .add_argument ("team" , help = "team acronym, must exist" )
32+ parser .add_argument ("--genartdata" , help = "genart data file" )
3233args = parser .parse_args ()
3334
3435db_con = connections [args .database ]
@@ -68,6 +69,8 @@ def parse_timestamp(t):
6869
6970reviewer_blacklist = set ([("genart" , "alice" )])
7071
72+ name_to_login = {}
73+
7174known_personnel = {}
7275with 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+
362390system_person = Person .objects .get (name = "(System)" )
363391
364392seen_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