def convert_pr(pr: PullRequest) -> GprrPR: """ Converts PyGithub pull request representation to GPRR pull request representation :param pr: PyGithub pull request :return: GPRR pull request """ gprr_pr = GprrPR() gprr_pr.id = pr.id gprr_pr.number = pr.number gprr_pr.url = pr.html_url gprr_pr.repository = convert_repo(pr.head.repo) gprr_pr.title = pr.title gprr_pr.creator = convert_user(pr.user) gprr_pr.created = pr.created_at gprr_pr.updated = pr.updated_at gprr_pr.since_updated = (datetime.today() - gprr_pr.updated).days gprr_pr.flags.append(GprrPrFlag("Draft", str(pr.draft))) gprr_pr.flags.append(GprrPrFlag("Mergeable", str(pr.mergeable))) gprr_pr.flags.append(GprrPrFlag("Mergeable State", str(pr.mergeable_state))) gprr_pr.initial_branch = pr.head.ref for assignee in pr.assignees: gprr_pr.assignees.append(convert_user(assignee)) for label in pr.get_labels( ): # this makes additional call to Github REST API gprr_pr.labels.append(convert_label(label)) active_reviewers = [] for review in pr.get_reviews( ): # this makes additional call to Github REST API reviewer = convert_user(review.user) if not known_review(active_reviewers, reviewer): active_reviewers.append(reviewer) gprr_review = GprrReview( user=reviewer, state=review.state, submitted_at=review.submitted_at, url=review.html_url, ) gprr_pr.reviews.append(gprr_review) pr_review_requests = pr.get_review_requests() for revusr in pr_review_requests[ 0]: # this makes additional call to Github REST API usr = convert_user(revusr) review = GprrReview(user=usr, state="PENDING") gprr_pr.reviews_pending.append(review) # for revteam in pr_review_requests[1]: # team_as_user = convert_team_to_user(revteam) # review = GprrReview(user=team_as_user, state="PENDING") # gprr_pr.reviews_pending.append(review) return gprr_pr
def extract_pull_request_review_requests( pull_request: GithubPullRequest) -> List[str]: """Extract features from requested reviews of the PR. GitHub understands review requests rather as requested reviewers than actual requests. Arguments: pull_request {PullRequest} -- PR of which we can extract review requests. Returns: List[str] -- list of logins of the requested reviewers """ requested_users = pull_request.get_review_requests()[0] extracted = [] for user in requested_users: extracted.append(user.login) return extracted