in services/lambda-pr-status-labeler/pr_status_bot/PRStatusBot.py [0:0]
def _parse_reviews(self, pr):
"""
This method parses through the reviews of the PR and returns count of
3 states: Approved reviews, Comment reviews, Requested Changes reviews
All these 3 states take into account if there are dismissed reviews.
Approved review / Requested changes review can be dismissed.
If dismissed, then the review doesn't count.
Note: Only reviews by MXNet Committers are considered.
:param pr
"""
approvers = []
change_requesters = []
commenters = []
dismissed = []
for review in pr.get_reviews():
# continue if the review is for a stale commit
if(review.commit_id != self.latest_commit_sha):
continue
# continue if the review is by non-committer
reviewer = review.user
if not self._is_mxnet_committer(reviewer):
logging.info(f'Review is by non-MXNet Committer: {reviewer}. Ignore.')
continue
approvers, change_requesters, commenters, dismissed = self.get_review_counts(review, approvers, change_requesters, commenters, dismissed)
approvers = list(set(approvers) - set(dismissed))
change_requesters = list(set(change_requesters) - set(dismissed))
commenters = list(set(commenters))
approved_count = len(approvers) if len(approvers) else 0
requested_changes_count = len(change_requesters) if len(change_requesters) else 0
comment_count = len(commenters) if len(commenters) else 0
return approved_count, requested_changes_count, comment_count