def _parse_reviews()

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