@@ -356,6 +356,8 @@ def parse_timestamp(t):
356356
357357system_person = Person .objects .get (name = "(System)" )
358358
359+ seen_review_requests = {}
360+
359361with db_con .cursor () as c :
360362 c .execute ("select * from reviews order by reviewid;" )
361363
@@ -464,17 +466,19 @@ def fix_docname(docname):
464466 docname = "draft-fenner-obsolete-1264"
465467 return docname
466468
467- review_req , _ = ReviewRequest .objects .get_or_create (
468- doc_id = fix_docname (row .docname ),
469+ fixed_docname = fix_docname (row .docname )
470+
471+ review_req = ReviewRequest .objects .filter (
472+ doc_id = fixed_docname ,
469473 team = team ,
470474 old_id = row .reviewid ,
471- defaults = {
472- "state" : states [ "requested" ],
473- "type" : type_name ,
474- "deadline" : deadline . date () ,
475- "requested_by" : system_person ,
476- }
477- )
475+ ). first ()
476+ if not review_req :
477+ review_req = ReviewRequest (
478+ doc_id = fixed_docname ,
479+ team = team ,
480+ old_id = row . reviewid ,
481+ )
478482
479483 review_req .reviewer = known_personnel [row .reviewer ] if row .reviewer else None
480484 review_req .result = results .get (row .summary .lower ()) if row .summary else None
@@ -483,8 +487,61 @@ def fix_docname(docname):
483487 review_req .time = time
484488 review_req .reviewed_rev = reviewed_rev if review_req .state_id not in ("requested" , "accepted" ) else ""
485489 review_req .deadline = deadline .date ()
490+ review_req .requested_by = system_person
491+
492+ k = (review_req .doc_id , review_req .result_id , review_req .state_id , review_req .reviewer_id , review_req .reviewed_rev , row .reviewurl )
493+ if k in seen_review_requests :
494+ print "SKIPPING SEEN" , k
495+
496+ # there's one special thing we're going to do here, and
497+ # that's checking whether we have a real completion event
498+ # for this skipped entry where the previous match didn't
499+ if "closed" in event_collection and review_req .state_id not in ("requested" , "accepted" ):
500+ review_req = seen_review_requests [k ]
501+ if ReviewRequestDocEvent .objects .filter (type = "closed_review_request" , doc = review_req .doc , review_request = review_req ).exists ():
502+ continue
503+
504+ data = event_collection ['closed' ]
505+ timestamp , who_did_it , reviewer , state , latest_iesg_status = data
506+
507+ if who_did_it in known_personnel :
508+ by = known_personnel [who_did_it ].person
509+ else :
510+ by = system_person
511+
512+ e = ReviewRequestDocEvent .objects .filter (type = "closed_review_request" , doc = review_req .doc , review_request = review_req ).first ()
513+ if not e :
514+ e = ReviewRequestDocEvent (type = "closed_review_request" , doc = review_req .doc , review_request = review_req )
515+ e .time = parse_timestamp (timestamp )
516+ e .by = by
517+ e .state = states .get (state ) if state else None
518+ if e .state_id == "rejected" :
519+ e .desc = "Assignment of request for {} review by {} to {} was rejected" .format (
520+ review_req .type .name ,
521+ review_req .team .acronym .upper (),
522+ review_req .reviewer .person ,
523+ )
524+ elif e .state_id == "completed" :
525+ e .desc = "Request for {} review by {} {}{}. Reviewer: {}." .format (
526+ review_req .type .name ,
527+ review_req .team .acronym .upper (),
528+ review_req .state .name ,
529+ ": {}" .format (review_req .result .name ) if review_req .result else "" ,
530+ review_req .reviewer .person ,
531+ )
532+ else :
533+ e .desc = "Closed request for {} review by {} with state '{}'" .format (review_req .type .name , review_req .team .acronym .upper (), e .state .name )
534+ e .skip_community_list_notification = True
535+ e .save ()
536+ completion_event = e
537+ print "imported event closed_review_request" , e .desc , e .doc_id
538+
539+ continue
540+
486541 review_req .save ()
487542
543+ seen_review_requests [k ] = review_req
544+
488545 completion_event = None
489546
490547 # review request events
0 commit comments